第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++語言,感覺可能用得上。


章節目錄