[英]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.