[英]Easiest to implement online sorted data structure in C
我正在掃描一個大型數據源,目前大約有800萬個條目,每個條目的字符串都按字母順序提取。
Currenlty我將它們放在一個數組中,然后使用qsort()
對它們排序一個索引,效果很好。
但是出於好奇,我正在考慮將每個字符串插入一個數據結構中,以便在我從數據源掃描它們時按字母順序維護它們,部分是為了實現一個體驗,部分是因為無需等待,它會感覺更快掃描完成后要完成的排序(-:
哪種數據結構最容易在C中實現?
更新
為了明確起見,我唯一需要執行的操作是插入一個項目並在完成后轉儲索引,這意味着對於原始訂單中的每個項目,轉儲一個表示排序后的順序的整數。
摘要
二進制搜索樹。 或自平衡搜索樹。 但是,不要指望那些比正確執行的動態數組更快,因為陣列具有比參考指針結構更好的地方。 此外,不平衡BSTS可以“走直線”,讓你的整個算法變成為O(n²),就像快速排序。
您已經在使用最佳方法。 最后的排序將比維護在線排序的數據結構便宜得多。 您可以使用rb-tree獲得相同的O(logN),但常量會更糟,更不用說顯着的空間開銷了。
就是說,如果您不需要支持刪除,AVL樹和rb-tree的實現要簡單得多。 左傾rb樹可以容納50行左右的代碼。 參見http://www.cs.princeton.edu/~rs/talks/LLRB/(Sedgewick撰寫)
您可以實現最快速的排序算法,例如Timsort或其他使用nlog(n)最壞情況的排序算法,並僅使用Binary搜索對其進行搜索,因為如果對列表進行排序,它會更快。
您應該看看Trie數據結構Wikilink,我認為這將滿足您的需求
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.