因此,我正在嘗試解決有關解碼一些霍夫曼壓縮訊息的挑戰,但不知道用于壓縮的代碼樹。
但是,我知道訊息中使用的字母表。
所以我的想法是嘗試對其進行暴力破解,但我的演算法技能有點欠缺。
我想我會嘗試以所有可能的組合為字母生成代碼。但問題是,代碼(二進制)永遠無法隱藏彼此。
所以一個例子可能是:
| 信 | 代碼 |
|---|---|
| 一種 | 0100 |
| 乙 | 1111 |
| C | 1011 |
但是,不可能有任何其他代碼,以上述任何一個開頭,因為它們最終會相互隱藏。
因此,對于 40 個字符的字母表,我想創建獨特的、非隱藏的位代碼。
我不知道從哪里開始。任何提示表示贊賞。
- 有沒有我不知道的智能演算法(很可能)?
- 它是否稱為我不知道的東西,可以幫助我搜索?
- 有關如何以任何方式實際創建此內容的任何提示?
uj5u.com熱心網友回復:
我不認為您將能夠僅列舉所有可能的編碼。我可以很容易地想出一個方案來生成超過 2^39 種不同的編碼,而這些編碼中的每一種都有 40 個!為字母分配代碼的不同方式。
讓x是一個隨機的 40 位字串。看著
~x[0]
x[0:1] ~x[1]
x[0:2] ~x[2]
x[0:3] ~x[3]
....
x[0:39] ~x[39]
x[0:40]
這是任何值的前綴代碼x。
uj5u.com熱心網友回復:
如果我誤解了您的問題,請告訴我。
二進制數與十進制數一一對應,因此您可以用長度為 1 的二進制數覆寫兩個字符的字母表,長度為 2 的四個字符等。
因此,對于 40 個字符的字母表,您將需要長度為 6 的二進制代碼。然后,如果您將它們列在串列中:
alphabet = ['A', 'B', 'C', ...]
你可以得到你的映射
mapping = {alphabet[i]: format(i, "b").zfill(6) for i in range(len(alphabet))}
{'A': '000000', 'B': '000001', 'C': '000010', ...}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/376785.html
