參考 題型範例 - 全國高級中等學校技藝競賽平台 工業類
題目:英文字串壓縮程式
問題描述
本英文字串壓縮程式將依哈夫曼編碼檔( huffman.json) 對每一個英文字母進行編碼,如右圖所示,字母 s 編碼成 0000、字母 e 編碼成 001、字母 r 編碼成 11111。此 huffman.json 的編碼是依 Jane Austen 所寫的《傲慢與偏見》一書的 ASCII 文件,其原始文字的檔案大小為 704,175 字元(字母),相當於 5,633,400 位元。統計完所有字元 (含大小寫英文字母、數字及符號) 的頻率後,得到了本題使用的哈夫曼編碼檔;頻率高的字元編碼較短,頻率低的字元編碼較長;本程式只對 88 個字元進行編碼,英文字串中若頻率高的字元居多就有較好的壓縮比。
程式執行狀態:程式不用處理輸入錯誤的問題 (如輸入中文字或符號),將 txt 檔與 exe 執行檔放在同一資料夾內。
  • 輸入檔名:程式一開始要求使用者 (你) 輸入一個 "內文為英文的檔名(.t×t)",如右圖所示,輸入 s04.txt檔;
  • 顯示該輸入檔的內容:其內容為 ship;
  • 壓縮後的編碼:依 huffman.json 檔,輸入檔內容的編碼為 00000001 01000110 00;
  • 壓縮比:為 0.75 (壓縮後儲存的總 Byte 數 / 壓縮前儲存的總 Byte 數 = 3/4);
  • 最後不足 8 bit,仍以 1Byte 計。本例子壓縮後的編碼檔 (.bin) 為 00000001 01000110 00111101。
  • 儲存壓縮檔:最後將壓縮後的 18bit 存入 s04.bin 中;其主檔名須相同於輸入檔的主檔名。


繳交檢查時,除源碼檔外,請同時提供 .exe 執行檔,測試資料不限所附 3 個 .txt 檔案。

因為題意不夠明確,在不影響題目情況下,略作補充。
補充資料:
  1. 將題目所附贈的 huffman.json 檔案加入專案中。
  2. 作法:
    • 在上面功能選單上選擇【專案】,再選擇【加入現有項目】。
    • 選擇 huffman.json,並將其加入專案。
    • 結果會在出現 huffman.json 檔。


  3. 輸入資料最好能顯示目前讀檔的路徑在哪裡。
  4. 因為版本不同,路徑也會有些微不同。使用 string currentDirectory = Directory.GetCurrentDirectory(); 找到目前執行檔路徑, 再將 huffman.json 放到該路徑,或是使用 Directory.GetParent(currentDirectory).FullName 往上移動目前存取的路徑。
  5. 可以參考我的解答。
  6. 輸出碼時,按照題目畫面,應該每 8 bits 要隔一個空白。
  7. 壓縮比取至小數第二位,不足後位補零。

範例一:


範例二:


範例三:


     程式碼下載