頻度が最初の 8 つのフィボナッチ数である次の文字の最適なハフマン コードは何ですか: a : 1、b : 1、c : 2、d : 3、e : 5、f : 8、g : 13、h : 21 ? 周波数が最初の n 個のフィボナッチ数である場合に最適なコードを見つけるためにケースを一般化します。
これは、私が抱えている割り当ての問題の 1 つです。私は率直な答えを求めているのではなく、いくつかのリソースを求めているだけです。
質問に答えるためにピースをまとめるにはどこを見ればよいですか?
頻度が最初の 8 つのフィボナッチ数である次の文字の最適なハフマン コードは何ですか: a : 1、b : 1、c : 2、d : 3、e : 5、f : 8、g : 13、h : 21 ? 周波数が最初の n 個のフィボナッチ数である場合に最適なコードを見つけるためにケースを一般化します。
これは、私が抱えている割り当ての問題の 1 つです。私は率直な答えを求めているのではなく、いくつかのリソースを求めているだけです。
質問に答えるためにピースをまとめるにはどこを見ればよいですか?
ハフマン コーディング アルゴリズムは、2 つの最小頻度ノードを取り、それらを接続して、頻度が子ノードの合計と等しい親を形成します。シンボルのランダムな頻度では、毎回組み合わせるために少なくとも2つのノードを計算する必要がありますが、頻度のフィボナッチ数列の場合、フィボナッチ数列の数列はハフマン符号化の数列と同じです。
例: - a : 1、b : 1、c : 2、d : 3、e : 5、f : 8、g : 13、h : 21
左に歪んだツリーまたは右に歪んだツリーを形成し、各シンボルのコーディングを簡単な式を使用して導き出すことができます
n がシンボルの数でない場合
= (n-2)*0 + 0
b = (n-2)*0 + 1
c = (n-3)*0 + 1
d = (n-4)*0 + 1
e = (n-5)*0 + 1
. . . 最後 = 1
上記の例では
a = (n-2)*0 + 0 = (6)*0 + 0 = 0000000
b = (6)*0 + 1 = 0000001
c = (5)*0 + 1 = 000001
.......
私はあなたがパターンを得ることを願っています
興味深いのは、平均ビット長の計算です
avg = ((n-1)*2 + sumof((n-i+1)*fib(i)) ここで、(3,n) の i)/(sumof(fib(i)) ここで、(1, n))
上記は直接式に簡略化できます。
読む - http://en.wikipedia.org/wiki/Huffman_coding - 特に、「二分木は、左から右に最も確率の低い 2 つのシンボルを取り、それらを組み合わせて別の同等のシンボルを形成する」というフレーズに注意してください。 2 つのシンボルの合計に等しい確率。このプロセスは、シンボルが 1 つになるまで繰り返されます。」
上記はフィボナッチ数列とどのように関係していますか?