這個問題可能不被嚴格限制在LZW算法,並可以覆蓋LZ77的其他實現和LZ78:LZW(Limpel - 謝夫 - 韋爾奇)字典編碼定界符問題
我一直想寫一個壓縮/涉及LZW字典編碼方案的解壓縮實用程序。 問題在於,我發現在編碼階段寫出每個代碼字(或「代碼」)後,必須包含一個分隔字符(空格)。 我一直在這樣做,因爲我不能假定輸出是直接傳輸到解碼器,並且可以存儲在一個壓縮文件中以後解碼(在這種情況下,解碼器需要一些方法來檢測什麼分隔碼字 - 分隔符)。
我最近被告知,這是不必要的,並且解碼器應該能夠動態地「找出」每次讀取的壓縮文件的大小,可能是基於先前讀取的代碼, 。這可以消除在每個代碼之後插入額外字節的(昂貴的)需求。
我只是不確定解碼器如何解決這個問題。也許有人瞭解它的工作原理可以向我解釋?謝謝。
編輯:
字典是一個哈希表映射「輸入字符串」到整數(代碼),並且建立了以通常方式隨着更多數據被讀出的輸入的代碼寫入了到壓縮文件。解碼器從壓縮文件中讀取每個代碼(整數),並查找其字典以輸出相關聯的字符串,或者如果沒有該代碼的條目,則它會以通常的方式計算出該字符串應該是什麼並更新它的字典。
「爲什麼文件流式傳輸或存儲會有所幫助?」 如果編碼器的輸出每次向解碼器傳輸一個代碼,則解碼器可以在接收到每個代碼時使用它。但是,如果編碼器將所有代碼寫入文件(壓縮文件),然後將該文件送入解碼器,那麼解碼器如何知道一個代碼的起始位置和另一個代碼的起始位置。該文件只是一個混合的數字序列。
例如: 分隔壓縮文件:127 32 45 22 228 122 209 .... 非分隔壓縮文件:127324522228122209 ...
-Rob
爲什麼會有所作爲,如果該文件流或存儲?你在哪裏放分隔符?我不明白你在做什麼。 – 2011-04-19 18:11:17