簡體   English   中英

正確的數據結構以便快速插入和快速搜索?

[英]Correct data structure for fast insert and fast search?

我有一個數組,我需要盡可能快地在其中插入項目。 在添加項目之前,我需要查看它是否存在,因此我要進行全陣列掃描。 我無法使用二進制搜索,因為每次插入后都無法對數組進行排序。

這項工作是否有更有效的數據結構?

編輯 :在該數組上,我存儲字符串。 在每個字符串旁邊,我存儲一個4字節的哈希。 我首先比較散列,如果它們相同,則字符串。

通常以( hashtable )實現的std::unordered_map將為您提供最佳的插入/搜索時間(O(1)),但不保留也不提供任何順序。

std::map為您提供O(log(n))進行搜索和插入,因為它需要特定的順序(而不是您必須插入的順序),並且通常使用平衡樹來實現。

如果需要排序順序和快速(O(log n))插入/搜索,則自定義平衡搜索樹是另一種選擇。

如果O(n)可以接受插入時間,但您需要最小的內存占用和O(log n)搜索時間,則排序std::vector (以支持添加項的能力)是另一種選擇。 由於需要復制數組的其余部分,因此您需要以O(n)的排序順序插入項目。

如果您只需要使用數組('std :: vector'),則需要保留O(n)來進行插入/搜索,則需要保留原始順序。

除了“ std :: vector”之外,您還可以使用單獨的std::unordered_map / std::unordered_set添加“已經存在”檢查,以提高速度的速度實質上是2-3倍的內存空間,並且在添加時需要更新2個結構項目。 此數組+哈希表組合將為您提供O(n)插入和O(1)搜索。

暫無
暫無

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

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