糾錯碼trick和數據壓縮trick

糾錯碼和壓縮算法是同一枚硬幣的兩面。
兩者都來自于對冗余的想法。 糾錯碼被視為向消息或文件中添加冗余的原則性方法。而壓縮算法正好相反,他們會從消息或文件中移除冗余。
壓縮和糾錯并不是彼此抵消的,相反,好的壓縮算法會移除抵消冗余,而糾錯編碼會增加另一種更高效的冗余。
因此首先壓縮一條信息,再往里面添加一些糾錯碼的做法十分常見。 下面分別介紹兩者的具體內容:

糾錯碼trick

如果使用正確的技巧,即使是極端不可靠的通信頻道也可以以極低的錯誤率傳輸數據。

1、重復技巧

要確保一些信息被正確傳輸,你只需要重復幾次該信息。

如果你的賬戶余額是5213.75美元,但不幸的是,網絡不穩定,每個數字都有20%的概率變成其他數字

通過運用重復技巧,可以推測真正的余額:假設你請求傳輸余額5次,并收到如下反饋:

只要我們增加重新傳輸的次數,直到可靠性高到我們滿意為止。

相反,如果一個惡意實體故意干擾傳輸,并選擇制造某些錯誤,重復技巧將變得不可靠。

并且在下載一個大型軟件,顯然傳輸多次以確保正確性是不成熟的。

2、冗余技巧

基本原則:不能只發送原始消息,要發送一些多余的東西以增加可靠性,這里我們討論的是把原始消息轉換成一條更加長的冗余消息,原始消息會被刪除。

還是以銀行余額為例:

如果你的賬戶余額是5213.75美元

我們用英語單詞簡單地拼出余額:

five two one three point seven five

由于信道糟糕,這條消息中約20%的字符會變成隨機字符,這條消息可能會變成:

fiqe kwo one thrxp point sivpn fivq

如果我們告訴你對消息中的任何單個變化進行可靠偵測以及糾正變得顆星,我們絕對可以猜出原始消息中的單詞。

但是如果我告訴你"367"代表了一個數,但其中一個數字被替換了,你就沒辦法直道原始數字是多少了,因為這條消息中沒有冗余。

冗余和讓消息變長有關,消息的每一部分都應該符合某種已知模式。通過這種方法,任何變化都能首先被識別,然后被糾正。

冗余的工作機理:消息由符號組成

要傳輸一條消息:

1、首先要找出每個符號,并將符號轉譯成對應的代碼字。

2、然后,將轉換的消息通過不可靠信道發送。

3、當消息被接收時,查看消息的每個部分,檢查其是否為有效的代碼字。如果是有效的,只需將其轉換為相應的符號,如果不是有效的代碼字,你就要找出它和哪個代碼字最匹配

在這里插入圖片描述

由理查德漢明于貝爾實驗室發明的代碼和我們相比最明顯的區別就是將所有事情都通過0和1完成:

在這里插入圖片描述

在編碼時,每一組4位數字都加入了冗余,由此產生了一個7位數的代碼字。

解碼時,首先尋找完全匹配,否則選擇最接近匹配。這里我們不深究7位數代碼字中的設計。

3、冗余和重復比較

通常用雜項(overhead)衡量糾錯系統的成本。雜項就是為確保消息被正確接收而發送的多余信息。

重復技巧的雜項數量巨大,因為你必須發送數份完整消息。

冗余技巧的雜項取決于使用的代碼字的具體類型。

4、校驗和技巧

上面的兩個技巧都屬于同時偵測和糾正數據中錯誤的方法。

還有一種思路:可以先不管糾錯,而是將精力集中在偵測錯誤上。對于許多應用場景,只偵測到一個錯誤就足夠了,然后請求再發送一份數據即可,可以一直請求拷貝,直到得到完全無誤的拷貝,我們稱之為校驗和技巧。

簡單校驗和:將消息中的所有數字相加,只保留結果的最后一位數作為簡單校驗和

例:假設消息為 4 6 7 5 6,所有數字之和:4+6+7+5+6=28,保留最后一位數,因此這條消息的簡單校驗和是8.

在發送原始消息前,將原始消息的校驗和附加到消息末尾即可。別人在接收消息后,就能再次計算校驗和,并和你發送的校驗和比較,看收到的消息是否正確。

缺點:簡單校驗和最多只能在消息中偵測出一處錯誤,如果有兩個或者更多錯誤,簡單校驗和可能就偵測不到了。

在這里插入圖片描述

我們定義一種新的校驗和,階梯校驗和:每個數都和該數字所在的位階相乘,每個數都比前一個數大一個位階,最后只保留最后一位數。

假如消息為4 6 7 5 6,階梯校驗和計算:

(1x4) +(2x6)+(3x7)+(4x5)+(5x6)=87,保留最后一位數,為7,所以階梯校驗和為7;

在這里插入圖片描述

只要錯誤不超過兩處,你就能用這兩種方法,偵測到錯誤。

上面描述的校驗和技巧只生成了兩個校驗和數字,但真正的校驗和通常會生成很長的數字。

重點是,校驗和的長度是固定的。對非常長的消息來說,即使一個較大的校驗和,最終和消息本身相比也極小。(校驗和長度越長,偵測錯誤失敗概率越小,在現實中幾乎不可能失敗)

當存在惡意攻擊而非糟糕信道時,采用加密哈希函數的特定校驗和效果較好。

5、定位技巧

此處介紹一種特殊的冗余技巧,它能讓你迅速定位一處錯誤,我們稱之為定位技巧。

假設消息有16個數字(如果有一條長消息,將其打碎成16位數據的“塊”,并單獨處理每塊數據;如果消息比16個數字短,就用0把它補成16位數)

第一步:重新排列消息中的16個數,將其排列成一個從左往右、自上向下讀的方框:

4 8 3 7 5 4 3 6 2 2 5 6 3 9 9 7

重新排列為:

在這里插入圖片描述

計算每一行的簡單校驗和,并添加在每行的右側:

在這里插入圖片描述

計算每一列的簡單校驗和,并添加在每列的底側:

重新排列所有數,讓其能以一次一個數的方式被存儲或傳輸,然后通過從左往右、自上而下的方式讀數,最后會得到如下24位數的消息:

4 8 3 7 2 5 4 3 6 8 2 2 5 6 5 3 9 9 7 8 4 3 0 6

把數字放入一個5x5的方框中,最后一行和最后一列都對應隨原始消息一起被發送的校驗和數字:
在這里插入圖片描述

接下來,計算每一行每一列4個數的簡單校驗和,在接收的校驗和值旁邊新建一行和一列:
在這里插入圖片描述

這里會出現兩組校驗和:1個是你發送的,1個是你接收的

如果它們都一樣,那么可以確定收到的消息很可能是正確的。那么出一個錯誤呢?

在這里插入圖片描述

我們可以很快定位出出錯位置,那么我們該如何糾正呢?

我們只要用一個能讓兩個校驗和都正確的數字替代出錯的那個數字就可:第二列校驗和本應該是3,但結果是8,也就是說校驗和要減去5,7-5=2。

在這里插入圖片描述

將糾正后的原始16位數消息從5x5的框中取出,忽略最后一行和最后一列,從左往右從上往下取出:

4 8 3 7 5 4 3 6 2 2 5 6 3 9 9 7

這種定位技巧我們稱之為二維奇偶校驗碼,奇偶校驗碼和簡單校驗和的意思一樣。二維奇偶校驗碼在一些真正的計算機系統中也有運用,但是并不如其他一些冗余技巧高效。

不過它很容易地具化并展現出不要求復雜數學的情況下,在計算機系統中的流行代碼背后發現并糾正錯誤。

數據壓縮trick

數據壓縮分為無損壓縮和有損壓縮

無損壓縮

無損壓縮需要了解的技巧:

1、行程長度編碼:將重復的“行程”和行程的“長度”編碼在一起;

例如:AAAAABCBCBCBCAAAADEFDEF可以被編碼為:5A、4BC、4A、2DEF

將23個字母壓縮為只有11個字母的字符串。

主要問題:數據中心重復的片段必須是相鄰的,不能有其他數據。

例如:ABABAB編碼很容易(3AB),但是ABXABYAB就行不通了。

2、同前技巧:

基于行程長度編碼的改進:

例如下面這個數據:

VJGDNQMYLH-KW-VJGDNQMYLH-ADXSGF-OVJG

DNQMYLH-ADXSGF-VJGDNQMYLH-EW-ADXSGF

忽略連字符,首先識別數據中重復的數據塊。

已知最開始12個字母沒有重復部分,但是接下來的10個字母VJGDNQMYLH與之前的有部分重合,可以說back12,copy10(數回12個字母,直至抄到第10個字母),接下來7個字母新出現,不能壓縮。后面的字母又是大的重復,可以縮寫。

我們縮寫b代替back,c代替copy,指令可以被總結如下:

VJGDNQMYLH-KW-b12c10-ADXSGF-O-b17c16-b16c10-EW-b18c6

下面一個例子:

使用相同的技巧壓縮FG-FG-FG-FG-FG-FG-FG-FG,消息中有8次重復。可以使用FG-FG-FG-FGb8c8,

更簡略的寫法:FG-b2c14,在口述最開始的兩個字母之后,我們有了FG,然后收到b2c14指令,抄完兩個之后結果為FG-FG,持續抄寫,直到抄寫到14個為止。

3、更短符號技巧:

使用頻率越高,編碼越短。

具體步驟:

1、計算機使用同前技巧傳輸未經壓縮的源文件,讓文件中絕大多數重讀的數據由短得多的指令取代,這些指令會返回并拷貝其他地方的數據

2、計算機檢查傳輸后的文件,選出經常出現的符號。隨后計算機會創建出一張表格,用短數字碼代表經常用到的符號,用更長的數字碼代表極少用到的符號。

3、計算機會通過直接將文件翻譯為2中的數字碼再次傳輸文件。2中計算出的數字碼表也會存儲到文件中,否則在后面不可能解碼。

有損壓縮:

有損壓縮需要了解的技巧:

1、拋棄技巧:以圖像為例,原圖像為320 x 240,每兩行或每兩列像素就拋棄一行或一列,結果得到解析度為160 x 120的新圖像。
在這里插入圖片描述
可以發現,壓縮后的圖片重構之后的有較嚴重的壓縮缺陷。

接下來講解一下jpeg技術的基本原理:

jpeg首先將整張圖片劃分為8 x 8 的小方塊,每個方塊都被單獨壓縮,在沒有被壓縮的情況下,每個方塊代表64個數字(假設為灰度圖),如果這個方塊符合某些已知模式,如常數色(Constant Color)或漸變色(Smoothly Varying Color)的組合,那么其大部分信息都可以被拋棄,只需要存儲每個模式的級別或量即可

參考:【改變未來的九大算法】

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378183.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378183.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378183.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機專業理論,計算機專業綜合理論.doc

計算機專業綜合理論2010年南京市單招班教學調研測試卷(二)計算機專業綜合理論命題人:管榮平 陳高峰 戴則萍 吳有俊本試卷分第一卷(單項選擇題、判斷題)和第二卷(填空題、程序閱讀題、編程題和計算作圖題)兩部分。第一卷1至2頁,第二卷3至6頁。兩卷滿分300…

網站上flv,MP4等格式的視頻文件播放不出來的解決辦法

在做一個網站時,發現視頻文件,比如flv,MP4格式在本地可以正常的播放,但是傳到了開發機器上,就不行了。播放器的文件地址是對的,就是一直沒有反應。 經過長時間的實驗,發現問題在與iis的設置問題…

centos6 更新數據源

嘗試了很多,還是163源最舒服. 編輯yum配置文件(163源): #vi /etc/yum.repos.d/CentOS-Base.repo [base] nameCentOS-$releasever - Base mirrorlisthttp://mirrorlist.centos.org/?release$releasever&arch$basearch&repoos #baseurlhttp://mirror.centos…

常用算法總結(窮舉法、貪心算法、遞歸與分治算法、回溯算法、數值概率算法)

博主聯系方式: QQ:1540984562 QQ交流群:892023501 群里會有往屆的smarters和電賽選手,群里也會不時分享一些有用的資料,有問題可以在群里多問問。 目錄1、窮舉法2、貪心算法3、遞歸與分治算法4、回溯算法5、數值概率算法1、窮舉法…

struct/class的數據對齊---簡單解析

網上教程一大堆,我這邊就不再贅述廢話了 思路方法: 1,以四個為一組,最終的內存所占結果必須是四的倍數 2,優先考慮四的整數倍,之后再考慮內存空間問題 struct Beyond{int a;char b;short c;}; int mai…

工程師英語和計算機證書查詢,點擊進入國家硬件維修工程師證書查詢網站

工程師證書查詢網站人力資源社會保障部指定查詢國家職業資格證書的唯一官方網站。涵蓋全國各省市、各行業、各央企頒發的證書。電腦硬件維修工程師網上能查看國家工信部硬件維修工程師證書查詢網址:http://www.ceiaec.org/index.htm工程師證書編號在網上怎么查詢如果…

stl vector 函數_vector :: at()函數以及C ++ STL中的示例

stl vector 函數C vector :: at()函數 (C vector::at() function) vector::at() is a library function of "vector" header, it is used to access an element from specified position, it accepts a position/index and returns the reference to the element at…

敏捷開發“松結對編程”系列之七:問題集之一

本文是“松結對編程”系列的第七篇。(之一,之二,之三,之四,之五,之六,之七,之八)剛剛參加完MPD 2011深圳站,在演講中間及后來媒體采訪,被問到了一…

powerdesigner 導出數據庫表結構

http://www.360doc.com/content/12/0817/19/61497_230730771.shtml轉載于:https://www.cnblogs.com/gaohuag/p/3169095.html

C++中的sort函數對二維數組排序是按照什么準則?

遇到的一個疑惑&#xff0c;現記錄如下&#xff1a; int main() {vector<vector<int>> envelopes { {5, 8},{6, 7},{6, 4},{2, 3},{8,9} };sort(envelopes.begin(), envelopes.end());for (int i 0;i < envelopes.size();i)cout << envelopes[i][0]<…

Exercises

I. Faulty sentences 1&#xff0c;Our host entertained us with many interesting stories of adventure, he has been a member of an exploration team working in the Arctic. 翻譯&#xff1a;我們的主持人用許多有趣的冒險故事來娛樂我們&#xff0c;他是北極探險團隊…

數學專業學計算機哪一行,計算數學

計算數學(一個理科專業)語音編輯鎖定討論上傳視頻計算數學是由數學、物理學、計算機科學、運籌學與控制科學等學科交叉滲透而形成的一個理科專業。中文名計算數學外文名Computational Mathematics所 屬數學計算數學專業定義編輯語音計算數學也叫做數值計算方法或數值分析。主…

數論之數字根 杭電1013

做這道題就有一種感覺&#xff0c;&#xff0c;數學真是奇妙&#xff0c;&#xff0c;在網上查了一下&#xff0c;才知道數字根有那么多奇妙的性質。不過&#xff0c;對于這道題我卻是不太理解&#xff0c;&#xff0c;主要是不會證明為什么數字根就是各個位加起來對9取余&…

ubuntu12.10下安裝mysqlworkbench出現“Dependency is not satisfiable: libctemplate0”問題的解決方案...

(原文地址&#xff1a;http://www.cnblogs.com/Deasel-s-magic-box/p/3169790.html) 之前在window下面一直用navicat&#xff0c;轉到ubuntu下之后&#xff0c;雖然也找到一個navicat的linux版&#xff0c;但是經常各種莫名其妙的掛掉&#xff0c;而且界面實在是挫的1B 。 所以…

圖片透視變換操作

由于照相機硬件設備本身的誤差&#xff0c;可能會導致鏡頭畸變&#xff0c;從而導致照相機拍攝到的照片產生失真現象&#xff0c;此時可以通過透視變換去適當的校正。 大概的思路&#xff1a;在原圖像上確定四個點&#xff0c;然后再新圖像上也確定四個點&#xff0c;通過warp…

dp筆記:關于DP算法和滾動數組優化的思考

從網上總結了一些dp的套路以及對滾動數組的一些思考&#xff0c;現記錄如下&#xff0c;希望以后回顧此類算法時會有所幫助。 目錄1、DP算法經驗1、DP算法核心&#xff1a;2、DP算法類別以及例題例1&#xff1a;三步問題例2&#xff1a;最小路徑和例3&#xff1a;乘積最大子數組…

高職單招面試自我介紹稿子計算機專業,單招面試自我介紹稿子范文

每年很多參加高職單招的同學筆試不錯&#xff0c;卻在面試環節上失敗了。單招面試需要技巧&#xff0c;需要考生細心準備&#xff0c;以自信樂觀的態度全面對單招面試。下面是小編整理的單招面試自我介紹范文及技巧&#xff0c;歡迎閱讀。1單招面試自我介紹范文各位老師好&…

as_hash ruby_Ruby中帶有示例的Hash.delete_if方法

as_hash rubyHash.delete_if方法 (Hash.delete_if Method) In this article, we will study about Hash.delete_if Method. The working of this method can be predicted with the help of its name but it is not as simple as it seems. Well, we will understand this meth…

java學習筆記十二——多態

滿足多態的基本條件1、要有繼承2、要有重寫3、父類引用指向子類對象/** 多態例子 */ //定義游戲抽象類abstract class gameObject { String gameName; abstract String getGameName();}//紅警游戲class redAlert extends gameObject { String gameName "red Ale…

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解決方案

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解決方案 NoClassDefFoundErrorLogFactorySpringHibernate Spring3.1啟動時報錯&#xff1a;Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogF…