對Set Map與Hash的理解

2021-10-02 04:19:19 字數 466 閱讀 1609

以c++的set、map來舉例。

set 是乙個完全二叉樹,並且自帶排序功能,不能帶有相同元素。 例如:排序演算法,插入的數都是左節點小於自己,右節點大於自己。

複雜度:

map也是樹,簡單理解就是:它是以set來存所有節點,以節點的key做為頭來排序,而乙個節點自帶key、value。所以查詢也非常快。

複雜度:

hash是一種演算法,是把任意【長度(資料)】的【輸入(又叫做預對映pre-image)】通過雜湊演算法變換成【固定長度】的【輸出】。

要提hash set 與 hash map 就必須要提一下hash table。hash table是通過乙個雜湊函式得到乙個陣列索引,即hash(key) = index,雜湊函式輸入乙個key,得到乙個陣列的索引,當然可能會出現衝突,這就需要解決衝突,這不在本文討論範圍。所以hash table的複雜度很低,特別是大資料,基本是o(1)。多的一點就是hash(key)的複雜度了。

hash表的理解

hash演算法可以把檔案轉換成一行字串,而且每個檔案有單獨的hash值,基本不會重複,這樣通過計算兩個檔案的hash值可以很快的確定兩個檔案是否相同。hash的運算只能從檔案到hash值,但是從hash值到檔案是幾乎不可能的。修改檔案和字尾名不會改變檔案的hash值。常用的hash演算法有md5和s...

對一致性hash演算法的理解

首先說明其用途,目前主要用在分布式快取中。為什麼使用一致性hash 假設有n個快取伺服器,普通的快取策略是hash obj n,當其中乙個伺服器掛掉,或者伺服器不夠而需要新增伺服器時,快取策略需要改變成hash onj n 1 或 n 1 這也就意味著所有的快取全部失效,那所有的訪問都會到後台伺服器...

對RESTful Web API的理解與設計思路

眾所周知,http有四個方法,get post put和delete,分別對應資料庫的select insert update和delete,一般的教程說到這裡也就over了,其實光是知道這個還不夠,還不足以把各種業務操作轉變為這四個方法。下面我給出一些設計思路,這是我自行實踐的總結,如有謬誤,請不...