第424章 幻當程式設計師小白用自然語言編程時會怎樣?
=數據卡尺=
如何用統計學的知識,來應用在數據上呢?
-第一步-
要弄明白統計學和數據之間的共性和非共性。
看本書最新章節,請訪問𝙎𝙏𝙊𝟱𝟱.𝘾𝙊𝙈
統計學:每一個數據無論其數值是多少,其本身就作為一個數值獨占的存在體,然而統計學本身就有意和無意的忽略了各個數值的先後排列。
數據:每一個數據無論其數值是多少,其本身就作為一個數值獨占的存在體,然而數據本身很注重各個數值的先後排列。
比如:ABRACADABRA
用統計學來表示,就是A出現了5次,B出現了2次,C出現了1次,D出現了1次,R出現了2次。
用數據來表示,就是ABRACADABRA。
那麼如何把數據快速的解壓縮出來呢?可以使用分段壓縮方式,比如把一個大文件,分割成一個個片段,例如:
ABRACADABRA THE FOX JUMP.張三和李四一起去喝酒。
那麼,就可以根據前面的數據,本身就是採用英文的方式,也就是最多是52進位(區分大小寫),而後面的中文可就麻煩了,畢竟中文本身進位相當大,那麼就需要進行大進位處理。
用統計學的方法,就是把數據平均分,然後分割成可以互相對齊的數據個體,然後統計這些數據個體各出現了多少次。
然後進行統計,把統計數據記錄下去。
也就是說,把大英百科全書的純文本內容用統計學的方式記錄下來,就能對應到大小寫英文字母+符號+空格+換行+換頁……
那麼就能夠統計出各英文字母出現過多少次,這導致的就是數據能夠很好把所有元素給還原出來,只是這些元素之間的排列組合,就隨著數據長度的變大而趨向更高運算量。
最簡單的方法,就是用三種統計方法:
如字母矩陣:
A C A E F H I O P Q R T T Y T
A S D K F J A S L K F D J L A
S K J F D A S D F S A D F A S
D F A S F A S D F A S F D A S
F D J H L K J H L K J H L K J H
為了快速得知每個數字的排列方式,可以進行統計校驗
每一行的第一列中出現A的次數為2次
每一行的第二列中出現A的次數為0次
第一行中出現A的次數為2次
第二行中出現A的次數為3次
A在整個文本中出現過12次
以此類推,就能使用數獨的方式,逆推出去掉了很多排列組合的有限數量的排列組合方式,然後這些排列組合就能通過其他校驗方式,比如MD5,比如SHA128和其他校驗方式快速找出正確的排列組合。
這種方式,就是使用小公式重複使用的方式,快速生成數據的片段,然後只需要把數據片段進行拼圖一樣的整理就行了,就能還原出源文件。
之前說的,只應用到階乘,N次方,無理數,都只適合於超級計算機的壓縮方式,而這次介紹的,則是相對來說,更適合個人計算機,以及單片機使用,本身就是以硬體上限有限時,如何獲得最高壓縮率,以及最快解壓縮。
同樣的,把數據進行片段化,然後使用特定進位的方式來進行統計,同樣可以統計出,然而還有一種特殊的進位轉換對齊校驗方式。
比如二進位的101010111010110111010001001101110010。
轉換為4進位(00=A)(01=B)(10=C)(11=D):CCCDCCDBDBABADBDAC
轉換為十進位:46,084,723,570
轉換為16進位:A BADD 1372
然後進行統計,比如,在4進位中,ABCD各出現過多少次;在二進位中0和1各出現過多少次;在十進位中0123456789各出現過多少次;在十六進位中0123456789ABCDEF各出現過多少次。
當然了,為了進位校驗的準確性,一般都是採用素數進位的方式來進行校驗(比如2進位,3進位,5進位,7進位,11進位,13進位……以此類推),然後通過進位之間的差異,來統計。
當然了,因為是為了給單片機使用的,所以本身就不會採用過高進位,比如高達億進位。
也就是把每一個數據片段,都除以各個進位數,然後得出餘數。
→噴子兼或破壁人:所以分解質因數都出現了是吧?你還能更敷衍一點麼?
→噴子兼或破壁人:直到現在,你都沒有給出使用多處理器來進行大數據壓縮和解壓縮的代碼實現,你在這給程式設計師用自然語言編程呢?
作者現在在自學C++語言,感覺可能用得上。