weiye wrote:對呀,有誰可以推薦一...(恕刪) 這個問題很有趣,我也有想過。但我不知道這樣是否可行 資料壓縮在電腦科學裡是非常重要得一個科目,我們常在用WinRar,Winzip。都是要靠資料壓縮的演算法理論基礎才能寫成我們用的這些很好用的程式。學術一點講他們都是屬於非破壞性的壓縮,也就是資料在被壓縮後是可以還原的。不會因為壓縮而少了一些資料,使得原資料-->壓縮後-->再解壓縮-->原資料。當然啦壓縮演算法大概都逃不出幾種範疇,例如huffman coding啦,統計式的計算,taken table等等。我這邊有一個很神奇的壓縮想法,但是我對這領域並不是很熟,所以如果我講錯了,就當你看了一次小叮噹漫畫吧。如果我們給定一串bitstring, s,也就是原資料,其長度為n。我們把他分為S1和S2,而S1 = {b0,b1,...b_{n/2-1}} and S2 = {b_{n/2},...bn}。在一般的情形S1是不會等於S2的,又我們是不是可以找到一個Boolean function, f。可以讓S2-->f--->S1。也就是可不可能有一個Boolean function, f可以讓S2對應到S1呢?如果我們可以找的到那很神奇的,我們已經把原資料s壓縮了50%,如果再做一次就有75%的壓縮率。換句話說這樣的壓縮想法如果可行,那將會把現在的壓縮程式大大的增強。(這對一些像是行星通訊或是衛星通訊很有用)。當然啦可以壓縮就要解壓縮,還要再找到一個Boolean function, z去把S1對應成S2(而且要唯一才行)。可能嗎,搞不好要找function f and z要花很多時間,不過我不太知道這樣的演算法有多少的complexity。看板上的大大有沒對這找boolean funcation有專業的?
caprice wrote:這個問題很有趣,我也.......搞不好要找function f and z要花很多時間....(恕刪) 除了要記錄下 S1, 也還要花檔案空間記錄下 f 的反函數喔,所以壓縮過後的檔案資料應該不會是原檔案資料的 50%(對了, 我上一篇的確是在開玩笑, 呵呵,因為小弟身邊有些朋友都以為只要透過壓縮軟體壓縮過後就"一定"會變小...如果真是這樣就世界大同了, 呵呵)其實我可以發明一種特殊的壓縮軟體,把 1GB 壓縮到 1Byte,只是你要用我特別設計過的解壓縮軟體,該解壓縮軟體包含了一個函數,直接把那個 1 Byte map to 那個 1 GB的資料,也就是那 1 GB 的資料藏在解壓縮軟體裡面,不過這樣的話,這解壓縮軟體應該會很大。呵呵 (好吧,這是另一個笑話==)
weiye wrote:其實我可以發明一種特殊的壓縮軟體,把 1GB 壓縮到 1Byte,只是你要用我特別設計過的解壓縮軟體,該解壓縮軟體包含了一個函數,直接把那個 1 Byte map to 那個 1 GB的資料,也就是那 1 GB 的資料藏在解壓縮軟體裡面,不過這樣的話,這解壓縮軟體應該會很大 其實應該可以壓到0的(code book只有一個entry, 機率100% XD)
boyman wrote:64k demo 跟壓縮是完全不同的技術,雖然也有用到壓縮,但不是64k demo的重點,別搞混了~ 沒錯,64k demo是另一回事…那是他們那些搞64k demo的人想盡一切辦法把把64k byte能存的資料塞進最多的東西。基本上就是把3d的東西,2d的東西想辦法用公式去算出來,例如木紋的貼圖其實只是一些程式去計算出來的。這些程式可能佔不到1k的容量,但是可以算出一張貼圖,這比直接存這一張圖要省空間很多! 雖然檔案只有64k,但是要執行它可能要好幾十,幾百mb的記憶體才行。 如果是真正的遊戲,沒有需要,也沒有必要在那麼限制的環境下做東西,玩這個東西算是純興趣…
其實有人幹過一件事,寫了一個超級神奇的壓縮軟體,可以把任何大小的資料壓成不可思議的大小!但是有人發現這個軟體只能解開自己電腦內壓縮的檔案,壓完的東西到別的電腦沒辦法解開!!原來這個程式把要壓的檔案改個名字隱藏起來,那個看起來像壓縮結果的檔案,其實只記錄了被隱藏的檔案在哪裏跟原來的名字而已.....