[JAVA]動態規劃演算法(Dynamic Programming):背包問題

一個簡單的0-1背包問題;規定背包的最大容量是4公斤;並且放入背包的物品不能重複,怎麼樣讓背包的物品價值量最大化?

物品重量價值
吉他(G)11500
音響(S)43000
筆記型電腦(L)32000

動態規劃算法的思想也是將復雜問題規劃分解為小問題,但是和分治算法不同的地方是,
動態規劃算法分解得到的子問題有遞進關係;子問題的最優解會成為最終的解;
可以這麼看;分解得到的子問題的求解是建立在上一個階段子問題的求解基礎上;這些子問題不是相互獨立的。
 

...繼續閱讀 »

[JAVA]自平衡二元搜尋樹(AVL樹)

AVL樹的原理與BST原理大致相同,主要目的是讓樹的左右子樹達到平衡;
兩邊的高度差不超過1(平衡),即為AVL樹。

平衡左右子樹的時機,在新增結點後,需檢查樹是否平衡,
不平衡,即進行左旋轉或右旋轉。

資料來源:尚硅谷算法youtube
...繼續閱讀 »

[JAVA]Huffman Tree:實現文件壓縮與解壓(編碼encode到decode)

  1. 透過建立的huffman tree,以遞迴的方式從根結點走向葉子結點;
    藉由紀錄走訪過程向左為0、向右為1,恰巧符合二進制,
    走過的路徑就成了葉子結點編碼(encode),而有了encode編碼表。
  2. 將1.取得的二進制字串轉成byte(8 bits一個單位)進行減少體積 => 壓縮
  3. 最後在進行解壓縮的一系列過程。
...繼續閱讀 »