還記得這一張圖嗎?
這是人教版生物必修二上的莫爾斯電碼插圖,用於遺傳密碼的破譯(選學)的引入,這裡我也使用莫爾斯電碼來進行關於資訊傳輸的科普。
正常的資訊傳輸,關鍵點有三:
1. 準確性
2. 適用性
3. 實用性
關於保密方面的要求這裡不做討論
下面對莫爾斯電碼進行分析
準確性
莫爾斯密碼有兩種「符號」用來表示字元:點(.)和划(-),或叫「滴」(dit)和「答」(dah)。點的長度決定
了發報的速度,並且被當作發報時間參考。莫爾斯編碼簡單且一字對一碼,其二義性很小,準確性足以滿足。
適用性
莫爾斯電碼編碼簡單,傳輸方式廣泛,不僅僅用於電報,即使是簡單的手電筒,旗子甚至是眨眼或者敲擊,更廣泛的說,只要有兩種以上不同狀態,就可以用來表示莫爾斯電碼,其適用性也是足以滿足要求的。儘管由於通訊號技術之進步,各國已於2023年停止使用摩爾斯碼,但由於它所佔的頻寬最少,又具一種技術及藝術的特性,在實際生活中有廣泛的應用。如常見的sos訊號。
實用性
一條資訊是否實用,取決於這條資訊是否易於傳輸與解讀,莫爾斯電碼在編碼時關注了傳輸方面的要求。請看下面這一張:
英語語言材料中的字母頻率莫爾斯電碼中越常用的字母,其編碼符號就越短;而發出各字母的用時由快到慢順序是e it san hurdm wgvlfbk opjxcz yq
有沒有發現什麼?
莫爾斯電碼發出字母的順序快慢與字母頻率基本保持一致,這就保證了資訊傳輸的高效性,使得莫爾斯電碼更具實用性。
莫爾斯電碼僅僅是資訊傳輸的一種方式,在現代社會最常見的就是計算機型別的資訊傳輸,總的來說還是要滿足幾個資訊傳輸的要求,同時要對保密進行進一步的處理。
另外傳輸過程中還需要進行壓縮及解壓以節約網路資源,比如使用哈夫曼編碼(huffman coding)(一種用於無損資料壓縮的熵編碼演算法)來進行壓縮編碼,原理為使用變長編碼表對源符號(如檔案中的乙個字母)進行編碼,其中變長編碼表是通過一種評估**符號出現機率的方法得到的,出現機率高的字母使用較短的編碼,反之出現機率低的則使用較長的編碼,這便使編碼之後的字串的平均長度、期望值降低,從而達到無失真壓縮資料的目的,可以說莫爾斯電碼是一種壓縮率不太高的傳輸方式,計算機中應用各種壓縮可以顯著提高資訊傳輸效率,節省傳輸頻寬及儲存空間。
各種常見的壓縮格式是在綜合使用了各種壓縮演算法後生成的一種檔案格式,使用不同副檔名使得計算機可以識別,如檔案常見壓縮格式zip,rar, 7z,常見壓縮格式jpeg,gif,png。
附上哈夫曼編碼的壓縮過程
實現霍夫曼編碼的方式主要是建立乙個二叉樹和其節點。這些樹的節點可以儲存在陣列裡,陣列的大小為符號(symbols)數的大小n,而節點分別是終端節點(葉節點)與非終端節點(內部節點)。一開始,所有的節點都是終端節點,節點內有三個字段:
符號(symbol)
權重(weight、probabilities、frequency)
指向父節點的鏈結(link to its parent node)
而非終端節點內有四個字段:
權重(weight、probabilities、frequency)
指向兩個子節點的 鏈結(links to two child node)
指向父節點的鏈結(link to its parent node)
基本上,我們用』0』與』1』分別代表指向左子節點與右子節點,最後為完成的二叉樹共有n個終端節點與n-1個非終端節點,去除了不必要的符號並產生最佳的編碼長度。
過程中,每個終端節點都包含著乙個權重(weight、probabilities、frequency),兩兩終端節點結合會產生乙個新節點,新節點的權重是由兩個權重最小的終端節點權重之總和,並持續進行此過程直到只剩下乙個節點為止。
實現霍夫曼樹的方式有很多種,可以使用優先佇列(priority queue)簡單達成這個過程,給與權重較低的符號較高的優先順序(priority),演算法如下:
1. 把n個終端節點加入優先佇列,則n個節點都有乙個優先權pi,1 ≤ i ≤ n
⒉ 如果佇列內的節點數》1,則:
⑴從佇列中移除兩個最小的pi節點,即連續做兩次remove(min(pi), priority_queue)
⑵產生乙個新節點,此節點為(1)之移除節點之父節點,而此節點的權重值為(1)兩節點之權重和
⑶把(2)產生之節點加入優先佇列中
⒊ 最後在優先佇列裡的點為樹的根節點(root)
而此演算法的時間複雜度( time complexity)為o(n log n);因為有n個終端節點,所以樹總共有2n-1個節點,使用優先佇列每個迴圈須olog n)。
此外,有乙個更快的方式使時間複雜度降至線性時間(linear time)o(n),就是使用兩個佇列(queue)創件霍夫曼樹。第乙個佇列用來儲存n個符號(即n個終端節點)的權重,第二個佇列用來儲存兩兩權重的合(即非終端節點)。此法可保證第二個佇列的前端(front)權重永遠都是最小值,且方法如下:
⒈ 把n個終端節點加入第乙個佇列(依照權重大小排列,最小在前端)
⒉ 如果佇列內的節點數》1,則:
⑴從佇列前端移除兩個最低權重的節點
⑵將(1)中移除的兩個節點權重相加合成乙個新節點
⑶加入第二個佇列
⒊ 最後在第乙個佇列的節點為根節點
雖然使用此方法比使用優先佇列的時間複雜度還低,但是注意此法的第1項,節點必須依照權重大小加入佇列中,如果節點加入順序不按大小,則需要經過排序,則至少花了o(n log n)的時間複雜度計算。
但是在不同的狀況考量下,時間複雜度並非是最重要的,如果我們今天考慮英文本母的出現頻率,變數n就是英文本母的26個字母,則使用哪一種演算法時間複雜度都不會影響很大,因為n不是一筆龐大的數字。
習題4 6 uva508 莫爾斯電碼
事實證明看不懂英文的代價是慘痛的 可能你會一直哇 一時wa題一時爽,一直wa題一直爽 o o 題目意思 匹配 若有乙個完全匹配,則輸出該單詞,若有多個,則輸出 字典序最小的單詞 else 找模糊匹配,找到增刪最少的,輸出,若有多個,同上,輸出字典序最小的單詞 不管幾個 都加 else 輸出 字典中字...
Google向Gboard新增莫爾斯碼輸入
由於她的病情,finlayson一直很難與其他人溝通。她找到了一種寫出句子和用摩爾斯電碼與人交談的好方法。她的丈夫開發了一種定製裝置,可以分析她的頭部動作並將其轉碼為摩爾斯電碼。當她觸發左鍵時,它會新增乙個簡訊號,而右鍵則會觸發乙個長訊號。她的裝置然後將文字轉換為語音。谷歌的實施將取代鍵盤兩個領域的...
pyAI K210第一天 七彩流水燈與莫爾斯電碼
原理 利用bgr三色相互融合出新的顏色 實驗名稱 七彩流水燈 日期 2020 6 6 實驗目的 讓rgb燈閃爍七種顏色 from maix import gpio from fpioa manager import fm import utime 將led外部io註冊到內部gpio,k210引腳支援...