簡體   English   中英

最容易在C中實現在線排序的數據結構

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

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