フィボナッチ符号化(Zeckendorf)— 正の整数を符号化・復号
どの正の整数もフィボナッチ符号で書けます。6は5 + 1なので10011になり、符号は必ず11で終わるため、長さの情報がなくても列の中で区切りが分かります。逆向きの復号もできます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 値
- 6
- 計算モード
- Encode
- 入力
- 6
- コード
- 10011
- ビット
- 10011
- 長さ
- 5
フィボナッチ符号化(Zeckendorf符号化とも呼ばれます)は、すべての正の整数を連続しないフィボナッチ数の一意な和として書き、その和を常に終端子11で終わる自己区切りの短いビット列に詰めます。普遍符号に初めて触れる学生、試験用オラクルを作る教員、Elias gamma・Golomb・フィボナッチ符号を比較する技術者はいずれも、整数からビット、ビットから整数の両方向で同じ決定的写像を必要とし、入力が0・負・非二進・または正規のZeckendorf配置でない場合には正直に失敗する必要があります。
Zeckendorf表現とフィボナッチ符号化の意味
Zeckendorfの定理によれば、すべての正の整数は、フィボナッチ数列上で隣り合わないフィボナッチ数の和として一意に表せます。nを符号化するときは、残りを超えない最大のフィボナッチ数を貪欲に選び、一つ下の隣を飛ばし、残りが0になるまで繰り返します。
フィボナッチ符号は、それら項のF2から最大使用項までのビットマスクを低インデックスから高へ書き、さらに終端の1を付けたものです。古典的な小値で心的モデルが固まります:1→11、2→011、3→0011、4→1011、5→00011、6→10011。
実務でフィボナッチ符号化が役立つ場面
教室やMOOCはフィボナッチ符号化計算機を使い、学習者が長い表を手計算せず、またmath.fibonacciの第n項ツールと混同せずにZeckendorf宿題を確認できるようにします。競技プログラミングや情報理論の授業は、符号語を生成し不正なビット列を拒否する双方向オラクルを必要とし、非正規や連続項の符号化を誤答とするコンテストチェッカーと整合します。
データ品質ジョブはコンパクトな自己区切り整数接頭辞を保存し、後で復号と再符号化で検証できます。どの流れでも有効な符号は整形式の整数包装としてのみ扱い、認証や秘匿とは見なさないでください。フィボナッチ符号化は透過的な普遍符号であり暗号ではありません。
このtier-Aワーカーの安全整数範囲内に値を保ち、試験で期待符号列を固定すれば、計算機代数スタックを自前で立てずに教育・採点・軽量ツール向けの決定的encode/decodeが得られます。
活用例
普遍符号のデモとノートブック
同じ正整数についてフィボナッチ符号長をEliasや単項接頭辞と比較する教育ノートブックで、毎回貪欲走査を再実装せずに済みます。
自己区切りの整数接頭辞
小さな正のIDを11で終わるフィボナッチビット列として符号化し、パイプラインで復号と再符号化して保存接頭辞が正規のままであることを確かめます。
よくある質問
フィボナッチ符号をどう復号しますか?
modeをdecode、valueを11で終わる0/1ビット列にします。
符号が11で終わらなければならない理由は?
フィボナッチ符号はZeckendorfビットマスクの後に終端の1を付けます。最大使用項は常に1なので、有効な符号語はすべて11で終わり、ビットストリーム内で自己区切りになります。
数をフィボナッチ符号にするには?
残りの値を超えない最大のフィボナッチ数を選び、すぐ下の数を飛ばすことを繰り返します。6なら5と1になり、小さい項から並べたビットに終わりの1を足すと10011です。
0を符号化できないのはなぜですか?
ゼッケンドルフの規則は正の整数だけが対象で、0にはフィボナッチ数の和がありません。そのため0や負の数は、作り話の符号を出さずに、分かりやすいメッセージで受け付けません。
終わりより前に1が2つ続く符号が拒否されるのはなぜですか?
1が2つ並ぶと、連続する2つのフィボナッチ数を使うことになり、ゼッケンドルフの形では決して起きません。その数の正しい符号ではないので、推測せずに受け付けません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
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)リクエスト例
{
"mode": "encode",
"value": "6"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.fibonacci_coding",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
本機能は標準のF2=1、F3=2、F4=3の走査を、無料ブラウザツールとKIT APIが共有する純粋なparse論理として実装し、宿題確認・LMSプラグイン・本番パイプラインが符号語で食い違わないようにします。成功したAPI呼び出しは公開の基本価格$0.002でプリペイド残高を使い、無効入力は課金されません。
Zeckendorf表現とフィボナッチ符号化の意味
通常の符号化規約では利用列をF2=1、F3=2、F4=3、F5=5…から始め、重複するF1=1を意図的に除き一意性を明確にします。最大使用項は常に最終ペイロード1を寄与するため、有効な符号は必ず2ビットパターン11で終わり、長さフィールドなしのストリームで自己区切りになります。復号は逆走査です。 末尾の終端ビットを除き、ペイロードが1の位置でF2、F3…を足し、必要なら再符号化して、連続フィボナッチを使う別解ではなく正規のZeckendorf配置だったことを確かめます。この一意性こそ、普遍符号の教育や、辞書なしの可変長整数接頭辞が必要な設計でフィボナッチ符号化が好まれる理由です。
入力契約・応答形・検証エラー
modeはencodeまたはdecodeです(別名op、action、directionを受理)。decode時のvalueは0と1の文字からなる11で終わるビット列です。mode decode、value 10011は同じ分解でvalue 6を得ます。検証失敗はプリペイド残高を消費しません。必須フィールド2つのJSONをPOSTしてください。encode時のvalueはJSON数値または純数字文字列としての正の整数で、JavaScriptの安全整数範囲は最大9007199254740991までです。0・負・小数・複数桁の先頭ゼロ・非数値テキストはinvalid_inputで何が悪いかを示して失敗します。任意の空白やアンダースコアは除去しますが、それ以外の文字・空文字列・長すぎる符号・連続する1ビットのペイロード・復号整数の正規再符号化でない配置は拒否されます。成功時は両モードともmode、エコーされた入力、整数value、フィボナッチビット列のcodeとbits、length、高から低へのzeckendorf和項、5+1のような表示用zeckendorf_sum、各和項のF添字fibonacci_indices、algorithm=fibonacci_coding、representation=Zeckendorfを返します。例:mode encode、value 6はcode 10011とzeckendorf 5+1を得ます。
実務でフィボナッチ符号化が役立つ場面
圧縮やコーデックの試作は小さな正整数でフィボナッチ符号をElias gammaや単項と比較することが多く、長さと和項を返す小さなAPIがあればノートブック実験やデモが再現可能になります。
連携の活用例
宿題・試験のZeckendorf確認
学生が整数または候補ビット列を送ると、APIは正規のフィボナッチ符号と和項を返すか、連続する1ビットがZeckendorf規則を破る場合はinvalid_inputを返します。
技術的な質問
フィボナッチ符号化で数をどう符号化しますか?
modeをencode、valueを正の整数にします。応答には11で終わるcode(ビット)、zeckendorf和項、標準規約F2=1、F3=2のfibonacci_indicesが含まれます。
どの入力が拒否されますか?
0・負・非整数・非二進の復号文字列・終端子11のない符号・連続1ビットのペイロード・非正規配置はすべてinvalid_inputで失敗し、課金されません。
フィボナッチZeckendorf符号化の料金は?
ブラウザツールは無料です。API要求は成功呼び出しごとに$0.002でKITプリペイド残高を使い、無効入力は残高を消費しません。