原创 30、赫夫曼樹

1. 概念 赫夫曼樹: 給定n個權值作爲n個葉子節點,構造一棵二叉樹,若該樹的帶權路徑長度(wpl)達到最小,稱這樣的二叉樹爲最優二叉樹,也叫赫夫曼樹(Huffman Tree)。 路徑:從一個節點往下可以達到的孩子或者孫子節點之間的通路

原创 31、赫夫曼編碼

1、赫夫曼編碼概念 是一種編碼方式,屬於一種程序算法。 廣泛用於數據文件的壓縮,其壓縮率在20%~90%左右。 一般的編碼流程:字符穿 => ASCLL編碼 => 二進制 編碼發展過程:定長編碼(8位,不進行處理)=>變長編碼(減少長度,

原创 29、堆排序

思路: 1、首先是初始化堆,建立從小到大的升序堆,只需要保證父節點的值大於相鄰的子節點值即可 2、將數組收尾換位置,確保最大的元素在數組的尾部。 3、此時從頭部元素開始調整堆,使他滿足從小到大的序列,以此執行2-3步,直到執行n-1次(n

原创 26、二叉樹的應用

思路: 寫了樹節點類、樹類和測試類,並寫了前中後序遍歷和搜索,並寫了刪除函數。 相關代碼 package tree; public class BinaryTreeDemo { public static void main(

原创 28、線索二叉樹

1、前序和中序線索二叉樹 思路就是構建個pre指針,在交換時,注意pre和curNode節點的指針指向問題 代碼: package tree; import javax.xml.soap.Node; public class Thr

原创 27、數組存儲完全二叉樹

思路: 簡單介紹了用數組存儲完全二叉樹的問題,重點就是找到父節點和子節點的關係(Node = 2leftNode+1,Node = 2rightNode+1 ) 下面的代碼就是二叉樹用數組存儲後,怎麼對數組進行前中後遍歷的問題。 代

原创 25、哈希表的應用

  引入 谷歌問題:添加公司員工的個人信息(id、姓名),並且,能通過id查詢該員工的信息。 要求:不使用數據庫、速度越快越好=》哈希表(散列) 思路:建立三個類:員工信息節點類、單鏈表類、哈希表類 代碼: package Hash

原创 位運算有什麼奇技淫巧?

計算機中的數在內存中都是以二進制形式進行存儲的,用位運算就是直接對整數在內存中的二進制位進行操作,因此其執行效率非常高,在程序中儘量使用位運算進行操作,這會大大提高程序的性能。 位操作符 & 與運算 兩個位都是 1 時,結果才爲 1,否則

原创 24、查找算法:斐波那契查找算法

鋪墊知識: 黃金分割點: 黃金分割點是指把一條線段(長度爲H)分割成兩部分A和B,其中A/H=B/A, 取前三位近似值爲0.618,由於按照這個比例設計的造型十分美麗,所以稱作 **黃金分割**,也叫**中外比**。     斐波那契

原创 23、查找算法:差值查找(二分查找優化)

思路: 針對二分查找算法中的mid定義, 我們可以優化些,二分查找中,mid = (left + right)/2 我們可以寫成mid = left + (right - left)/2 針對除數2,我們可以有個優化, 用(targe

原创 21、排序方法總結

列出各種排序的時間複雜度、空間複雜度、是否穩定等屬性。 標題   其中,基數排序應該是O(d*(len+len)),其中d爲元素最大的位數,len爲元素數量。簡稱O(n*k)

原创 22、查找算法:順序查找+二分查找

1、順序查找過於簡單,此處就不再贅述。 2、二分查找(適用於有序數組) 思路: 要找的元素爲targe,數組爲arr: 1、首先定義left和right(left:數組最左邊的index,right:數組左右最右邊的index) 2、定

原创 20、基數排序

思想: 用空間換時間,他用一個二維數組(10*n)和一位數組(1*10),用於排序的道具,該排序不是依據的傳統的比較的思想,她是採用,先讓所有元素按照個位的數字,放在二維數組中(二維數組中,第一維:個位、十位、百位...,第二位用於盛放

原创 19、歸併排序

思想: 歸併排序個人理解的是==分治==思想,先把整體一直遞歸的劃分成單獨的最小單元(只含有一個元素的單獨個體),然後回溯將單個個體排序,組成有序的小個體,然後對這些有序的小個體進行排序 代碼: package Sort; impo

原创 CPU32和CPU64區別

1. cpu32位和64位的區別: 操作系統方面: 1、32位CPU一次可以處理32位(單位:bit)二進制,只能安裝32位操作系統; 2、64位CPU則一次可以處理64位二進制數,可以安裝32位系統和64位系統(大牛拉小車)。 運算速