Codificação Fibonacci (Zeckendorf)
Escreva qualquer inteiro positivo como código de Fibonacci: 6 é 5 + 1, então vira 10011, e todo código termina em 11, para ser reconhecido dentro de uma sequência sem informar o tamanho. A decodificação faz o caminho inverso. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Valor
- 6
- Modo de cálculo
- Encode
- Entrada
- 6
- Código
- 10011
- Bits
- 10011
- Comprimento
- 5
A codificação Fibonacci, também chamada codificação de Zeckendorf, escreve cada inteiro positivo como uma soma única de números de Fibonacci não consecutivos e empacota essa soma em uma cadeia de bits autodlimitada que sempre termina com o terminador 11. Estudantes que encontram códigos universais pela primeira vez, instrutores que montam oráculos de prova e engenheiros que comparam códigos Elias gamma, Golomb e Fibonacci precisam do mesmo mapa determinístico nos dois sentidos: inteiro para bits e bits para inteiro, com falha honesta quando a entrada é zero, negativa, não binária ou não é o layout canônico de Zeckendorf.
O que significam a representação de Zeckendorf e a codificação Fibonacci
O teorema de Zeckendorf afirma que todo inteiro positivo tem uma representação única como soma de números de Fibonacci em que nenhum somando é consecutivo na sequência de Fibonacci. A convenção usual de codificação inicia a sequência utilizável em F2 igual a 1, F3 igual a 2, F4 igual a 3, F5 igual a 5, e assim por diante, omitindo de propósito o F1 duplicado igual a 1 para que a unicidade fique inequívoca.
Para codificar n você escolhe de forma gulosa o maior Fibonacci que não ultrapasse o restante, pula o vizinho inferior seguinte e repete até o resto ser zero. O código Fibonacci é então a máscara de bits desses termos de F2 até o maior usado, escrita do índice baixo ao alto, mais um 1 terminador extra.
Como o termo de maior índice sempre contribui com um 1 final de carga útil, todo código válido termina com o padrão de dois bits 11, o que torna o código autodlimitado em um fluxo sem campo de comprimento separado. Valores clássicos fixam o modelo mental: 1 codifica como 11, 2 como 011, 3 como 0011, 4 como 1011, 5 como 00011 e 6 como 10011.
A decodificação inverte o percurso: remove-se o bit terminador final, somam-se F2, F3, … onde os bits de carga são 1 e, opcionalmente, recodifica-se para provar que a cadeia era o layout canônico de Zeckendorf e não uma soma alternativa com Fibonacci consecutivos. Essa unicidade é exatamente por que a codificação Fibonacci é popular no ensino de códigos universais e em projetos que precisam de prefixos inteiros de comprimento variável sem dicionário.
Onde a codificação Fibonacci se paga na prática
Salas de aula e plataformas MOOC usam uma calculadora de codificação Fibonacci para que alunos verifiquem tarefas de Zeckendorf sem percorrer tabelas longas à mão e sem confundir o código com as ferramentas separadas math.fibonacci do n-ésimo termo. Cursos de programação competitiva e teoria da informação precisam de um oráculo bidirecional que produza a palavra-código e rejeite strings ilegais, alinhado a corretores de contest que marcam errado qualquer codificação não canônica ou com termos consecutivos.
Jobs de qualidade de dados podem guardar prefixos inteiros compactos autodlimitados e verificá-los depois decodificando e recodificando. Em todo fluxo trate um código válido apenas como empacotamento inteiro bem formado, não como autenticação nem segredo: a codificação Fibonacci é um código universal transparente, não criptografia. Mantenha valores no intervalo de inteiros seguros deste worker tier-A, fixe as strings de código esperadas nos testes e obtenha encode e decode determinísticos para ensino, correção e ferramentas leves sem montar um stack de álgebra computacional próprio.
Casos de uso
Demos e notebooks de códigos universais
Compare comprimentos de código Fibonacci com prefixos Elias ou unários para os mesmos inteiros positivos em notebooks de ensino sem reimplementar o percurso guloso toda vez.
Prefixos inteiros autodlimitados
Codifique IDs positivos pequenos como strings de bits Fibonacci que terminam em 11; depois decodifique e recodifique em pipelines para garantir que os prefixos armazenados permaneçam canônicos.
Perguntas frequentes
Como codificar um número com codificação Fibonacci?
Defina mode como encode e value como um inteiro positivo.
Por que os códigos devem terminar em 11?
Códigos Fibonacci acrescentam um 1 terminador após a máscara de bits de Zeckendorf; o termo de maior uso é sempre um 1, então toda palavra-código válida termina em 11 e fica autodlimitada em um fluxo de bits.
Como decodificar um código de Fibonacci?
Tire o último 1, que só marca o fim, e some os números de Fibonacci 1, 2, 3, 5 e seguintes nas posições em que houver um 1. Assim, 10011 dá 1 mais 5, ou seja, 6.
Por que não dá para codificar o zero?
A regra de Zeckendorf só cobre inteiros positivos: o zero não tem uma soma de números de Fibonacci para escrever. Por isso o zero e os negativos são recusados com uma mensagem clara, em vez de gerar um código inventado.
Por que um código com dois bits 1 seguidos antes do fim é recusado?
Dois bits 1 juntos significam dois números de Fibonacci consecutivos, algo que a forma de Zeckendorf nunca usa. Essa sequência não é o código válido do seu número, então a decodificação a recusa em vez de adivinhar.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/enc/fibonacci-coding \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"encode","value":"6"}'const res = await fetch("https://api.kit.forhosting.com/enc/fibonacci-coding", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mode": "encode",
"value": "6"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/fibonacci-coding",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mode": "encode",
"value": "6"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/fibonacci-coding", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mode":"encode","value":"6"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mode":"encode","value":"6"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/fibonacci-coding", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"mode": "encode",
"value": "6"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.fibonacci_coding",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Esta capacidade implementa o percurso padrão F2=1, F3=2, F4=3 como lógica parse pura compartilhada pela ferramenta gratuita do navegador e pela API do KIT, para que tarefas, plugins LMS e pipelines de produção nunca discordem de uma palavra-código. Chamadas de API bem-sucedidas usam saldo pré-pago no preço base publicado US$ 0,002; entrada inválida não é cobrada.
Contrato de entrada, formato da resposta e erros de validação
Value para decode é uma string de bits com caracteres 0 e 1 que termina em 11; espaços ou sublinhados opcionais são removidos, mas qualquer outro caractere, string vazia, código longo demais, carga com bits 1 consecutivos ou layout que não seja a recodificação canônica do inteiro decodificado é rejeitado. Mode decode e value 10011 produz value 6 com a mesma decomposição. Validação falha não consome saldo pré-pago. Envie JSON via POST com dois campos obrigatórios. Mode deve ser encode ou decode (alias op, action e direction são aceitos). Value para encode é um inteiro positivo como número JSON ou string só de dígitos no intervalo de inteiros seguros do JavaScript até 9007199254740991; zero, negativos, frações, zeros à esquerda em strings de vários dígitos e texto não numérico falham com invalid_input indicando o problema. Em sucesso ambos os modos devolvem mode, a entrada ecoada, value como inteiro, code e bits como a string Fibonacci, length, zeckendorf como somandos do maior ao menor, zeckendorf_sum como string de exibição tipo 5+1, fibonacci_indices como o índice F de cada somando, algorithm igual a fibonacci_coding e representation igual a Zeckendorf. Exemplo: mode encode e value 6 produz code 10011 com zeckendorf 5 mais 1.
Onde a codificação Fibonacci se paga na prática
Esboços de compressão e codecs costumam comparar códigos Fibonacci com Elias gamma e unário para inteiros positivos pequenos; uma API pequena que devolve comprimento e somandos torna experimentos em notebooks e demos reproduzíveis.
Casos de integração
Checagens de Zeckendorf em tarefas e provas
Alunos enviam um inteiro ou uma string de bits candidata; a API devolve o código Fibonacci canônico e os somandos, ou invalid_input quando bits 1 consecutivos quebram as regras de Zeckendorf.
Perguntas técnicas
Como decodificar um código Fibonacci?
Defina mode como decode e value como uma string de bits 0/1 terminando em 11. A API devolve o inteiro positivo value e a mesma decomposição de Zeckendorf usada na codificação.
Quais entradas são rejeitadas?
Zero, negativos, não inteiros, strings de decode não binárias, códigos sem o terminador 11, cargas com bits 1 consecutivos e layouts não canônicos falham com invalid_input e não são cobrados.
Quanto custa a codificação Fibonacci Zeckendorf?
A ferramenta do navegador é gratuita. Requisições API usam saldo pré-pago do KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não consome saldo.