我寫哈夫曼樹的一點心得及改進

2021-07-09 22:12:44 字數 913 閱讀 4172

一:首先,討論並比較基於字元的壓縮與基於單詞的壓縮

1.     基於字元的壓縮所用的儲存空間固定,但由於每個字元都要編碼,相比基於單詞的壓縮在文章字數較少時更加適用;

3.     對於不同的文章,應綜合考慮,或者在大量統計的基礎上得出普適規律

4.     無論是基於字元的壓縮還是基於單詞的壓縮如果應用k叉樹,則空間利用率都會提高,而應用最優堆則會使時間複雜度降低

二:系統不足

不足:1. 沒有考慮優化問題,如果應用k叉樹,平均編碼長度就會減少很多,整體的哈夫曼編碼會變得簡短;

2. 在建立哈夫曼樹的過程中,無論是插入結點還是尋找最小結點,他們整體的時間複雜度都是o(n2)。如果考慮用最小堆問題,尋找最小結點的時間複雜度變為o(logn),整體的複雜度就減少為o(n·logn)。

三:實驗心得

這次最突出的問題是:**的復用問題,因為之前建立結構體陣列用的是全域性變數,本以為在函式操作中會簡單,到後來在建立基於單詞壓縮方法時就出現了復用問題,後來是自己動手改了每個函式引數之間的傳遞。我覺得這對我是一次警告,警告我以後程式設計序時要充分考慮**復用性及函式的封裝性。

還有乙個地方,是方法的選擇問題,在尋找權值最小的兩個結點時,我面臨很多方法,可以用實驗一用過的插入排序把陣列按權值排序後直接取前兩個,也可以直接遍歷兩次尋找到最小的,然而這兩種方法的時間複雜度都是o(n),如果再進一步考慮,思考老師給的後面的加分題,完全可以想到用最小堆來優化使時間複雜度降為o(logn),這也是剛學過的知識。

上面的兩個問題讓我意識到對知識的應用和對程式優化的重要性,對已經實現出來的功能從時間複雜度和空間複雜度兩個方面優化,並加強他的復用性,使方法可以再更多情況下使用而不是僅僅侷限於當前命題,是我要學習的方向之一。

實驗是基礎的哈夫曼樹,在尋找資料的過程中無意接觸到了計算機學科對自然語言的處理這一領域,做為興趣決定會去多多接觸一下,就拿哈夫曼樹當入門了。

我的一點心得

放假的兩個多月來我結識了學多的朋友,學到了許多書上沒有的東西,在此一併謝謝。我的技術並不好,但是我也有自己的一些體會,如果有不正確的學習方法希望各位給我指出,讓我與你一同進步。我的思想是首先要學會做人,只有學會了做人才能學會做事。我認為學習計算機技術應該要有冷靜的頭腦,不要看見有什麼新的漏洞就去下個...

寫資料庫測試工具的一點心得

寫乙個好用,持續可用的測試工具,需要滿足如下幾個特徵 完備 封閉 自排程結果可評價 易回歸case 所需要的資料都來自測試工具本身,不需要外部人工準備。例如做乙個大查詢測試工具,大查詢的資料應該由工具本身插入。違反這個要求時,部署測試就會十分麻煩,容易出錯。乙個複雜的測試可能需要多個邏輯相關的先後步...

哈夫曼樹及WPL計算的一種實現

主要思路寫在注釋裡了,用了兩個陣列,乙個作為堆,乙個作為儲存最後樹狀結構位址的陣列。我自己感覺可能有點複雜了,下次可以試試用結構體而不是二維陣列來實現同樣的功能。使用code block 17.12編譯 include include typedef struct haffmantreehaff t...