亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我們可以使用映射而不是二進制搜索來進行搜索嗎?

我們可以使用映射而不是二進制搜索來進行搜索嗎?

陪伴而非守候 2022-12-27 15:21:14
地圖提供 O(1) 查找。難道我們不能遍歷數組一次并構建一個對應于它的索引(數組的反面)的映射,當我們想要搜索我們可以調用map[VALUE]的東西時它會返回索引。它可能不適用于數組中的大值,但假設a[i]<10^5我們不能這樣做而不是二進制搜索嗎?然后,每個查詢將是 O(1)。PS:我的意思是無序地圖..
查看完整描述

3 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

哈希表,如Python 字典,將給出每次查找的攤銷常數平均成本。

對于大型數據集,這可能會成為二分查找的一個有趣的替代方法。

由于以下原因,某些算法可能絕對需要二分查找:

當查找值不在數據集中時,二分查找仍然可以以相同的O(logn)成本判斷出數據集中大于查找值的最小值和小于查找值的最大值。

對我來說,重復問題不是什么大問題,因為您可以在數組中存儲 (value, frequency) 或 (value, [payload1, payload2, ...]) 的元組,因此仍然使用哈希表。


查看完整回答
反對 回復 2022-12-27
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

以下是您可能要考慮的問題 -

  • 您不能在地圖中存儲具有相同值的多個元素

  • 查找時間是O(log(n))和不是O(1)

  • 地圖中發生的事情并不神奇,它讓我們可以在更短的時間內訪問它。有一個散列過程在后臺進行,unordered_mapO(1)也需要時間。所以,大 O 隱藏了一個很大的常數時間因素。標準map為您提供O(logn)查找,時間復雜度與數組中的二進制搜索相同。


你得到的搜索的平均時間復雜度是差不多的。在 C++ 中使用標準映射的主要問題是它無法保存具有相同值的多個元素。使用 map 可能獲得的一個優勢是刪除和插入時間將是O(logn).

因此,如果您知道您將要處理的數據集沒有重復元素和/或將頻繁添加/刪除元素,那么在這種情況下您肯定可以將 map 視為更好的選擇


查看完整回答
反對 回復 2022-12-27
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

由于確切的運行時間將取決于密鑰的長度和類型、它們的分布、它們的數量,因此建議為您的特定應用程序進行基準測試。



查看完整回答
反對 回復 2022-12-27
  • 3 回答
  • 0 關注
  • 92 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號