2011-02-25 52 views

回答

2

維基百科解釋說得好:

http://en.wikipedia.org/wiki/Hash_table#Features

摘要:插入一般都是緩慢的,讀取比樹木快得多。對於Java:任何時候當你有一些讀/寫很多的鍵/值對,並且一切都很容易寫入RAM時,使用HashTable進行快速讀取訪問和難以置信的簡單代碼維護。

5

散列通常是一個常數時間的操作而二叉樹具有對數時間複雜度。

因爲散列不是基於要搜索的集合中,但關於該項目的項目的數量來計算集合的大小上有需要找到一個項目的時間沒有關係。然而,大多數散列算法會產生衝突,從而增加了時間複雜度,因此很難獲得完美的恆定時間查找。

用二叉樹,你必須做的最多log2N比較可以發現該項目之前。

+1

可是啊(log2(n))來確認項目不存在,而不是接近O(1)以進行有效的哈希查找。 – 2011-02-25 13:52:26

0

散列意味着使用一些函數或 算法將對象數據映射到一些代表性的整數值。這 所謂的散列碼(或簡稱爲散列) 可以被用來作爲一種尋找地圖中的 項目時縮小 了我們的搜索。

如果需要使用的算法的 快速用於查找信息 ,你需要那麼哈希表是 最合適的算法使用,因爲 它只是生成您 密鑰對象的哈希和使用那要訪問 的目標數據 - 它是O(1)。 其他是O(N)(大小爲 的鏈接列表N - 您必須逐個遍歷一個列表,平均爲N/2個)和O(log N)(二叉樹 - 您的 減半每次迭代 搜索空間 - 只有當樹 的平衡,這取決於你的 實現,一個不平衡的樹可以 具有性能顯著惡化)。

0

哈希表是最好的用於搜索(=)如果具有較低的插入和均勻的時隙分佈。時間複雜度爲O(n + k) - 線性。

他們不是一個好主意,如果你想要做的比較操作(<,>)

+0

...或有排序的集合。 – 2011-02-25 13:53:03

相關問題