簡體   English   中英

一個散列集可以找到帶有O(1)的最小或最大元素?

[英]a hash set can find the smallest or largest element with O(1)?

我需要非常了解哈希集的體系結構和功能。

與STL :: set相比,哈希集與STL :: set相比有什么優勢? 我認為O(1)時間可以進行搜索。 如果是這樣,為什么不使用哈希表呢? 他們的區別是重復元素嗎? 還是其他?

對於STL :: set,最小/最大的搜索時間也是O(1),因為它已被訂購。

哈希集不是二叉搜索樹,如何用O(1)查找最小或最大元素?

閱讀完C ++ STL中的set和hashset有什么區別?

我找不到答案。

我的點子:

什么時候應該使用哈希集而不是哈希表?

STL :: set是有序集。 因此,獲得最小/最大元素為O(1)。

如果是哈希集怎么辦? 它是命令的嗎?

謝謝

哈希集不是二叉搜索樹,如何用O(1)查找最小或最大元素?

這恰恰是關鍵區別之一:您無法在恆定時間內找到哈希集中的最小/最大元素。 您當然可以通過掃描整個集合在O(n)時間內完成此操作。

另一個主要區別是,遍歷哈希集不會按排序順序返回元素。

哈希集基本上是沒有存儲值(僅鍵)的哈希表,C ++中的std::set被實現為平衡的二進制搜索樹。

您應該閱讀一些算法/計算機科學書中的差異,因為您似乎有一些基本的誤解,例如,在二叉搜索樹中,找到最小/最大元素的代價是對數O(log N) ,而不是常數O(1)

根據您最需要執行的操作,這兩種數據結構都會更合適。 如果您需要經常查找最小的元素,則std::set將在O(log N)執行該操作,但是對於哈希表,您將需要檢查所有元素,這意味着線性時間O(N) 另一方面,如果該操作不常見並且常規查找(集合中的元素a是否更常見),則哈希集的恆定時間查找將比集合中的O(log N)查找更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM