2018/07/26 《輕松學算法》 學習筆記(一)
讀
第一章《數組、集合、散列表》
總結
1:數組
- 什麽是數組?
- 把有限個數據類型一樣的元素按順序放在一起,用一個變量命名,通過編號可以訪問的一個有序集合。
- 特點:
- 想用就要提前想好。因為數組是 定長 的,多了浪費,少了尷尬。
- 順序訪問,也就是說,雖然在使用中可以通過下標訪問,但是在計算機處理當中,也是按照順序訪問的。
- 使用場景
- 因為數組的不變性,所以在不變的業務中,更適合使用數組。
2:集合
- 列表(有序集合[鏈表、隊列、棧 ......]、關聯數組......) 等等都是集合,概念比較寬泛......(了解)
- 特點
- 和它實現有關,那就是變長,變長是相對的,內部還是通過數組來實現。知識在數組不夠長時候的一種策略,把舊數組復制到新數組使用。
- 使用場景
- 會變得東西基本都會使用。
3:散列表
- 什麽是散列表(HashTable)?
- 可以通過給定的關鍵字直接訪問到具體對應值的一個數據結構。
- 就類似一個班上一共500個同學,每次找小明巨麻煩,需要一個一個問你是不是小明,效果很差。
為了可以快速定位,校長掐指一算(Hash計算),給小明(Value)定了一個學號(Key),並記在了一個小本子(散列表)上。
這樣我們每次就可以快速找到對應的同學了。
- 什麽是碰撞?
- 通過不同的Key可以訪問到同一個Value。
- 原因是 不同的 Key 在通過哈希函數計算時候,可能會得到同一個地址(Value)
- 如何解決碰撞問題?(了解)
- 開放地址法 (開放尋址法)
- 在發現該 Key 已經有值之後,可以往後移動一個地址,在檢測,如果沒有使用。則就是用這個地址。
- 在哈希法
- 再次計算哈希,缺點是增加了計算的時間。
- 鏈地址法
- 學習鏈表之後學習
- 散列的特點?
- 訪問速度快。快速定位。
- 空間換時間
- 無序。
- 可能產生碰撞。
- 散列的使用場景
- 由於散列的特性我們也知道,散列表適合快速查找等。
2018/07/26 《輕松學算法》 學習筆記(一)