簡體   English   中英

詞表的詞典排序

[英]Lexicographical Sorting of Word List

我需要按字典順序合並和排序 100,000 多個單詞的列表。 我目前使用稍微修改過的冒泡排序來完成它,但在 O(n^2) 時需要相當長的時間。 有沒有更快的算法來排序單詞列表? 我正在使用 Python,但如果有一種語言可以更好地處理這個問題,我願意接受建議。

使用內置的sort()列表方法:

>>> words = [ 'baloney', 'aardvark' ]
>>> words.sort()
>>> print words
['aardvark', 'baloney']

它使用O(n lg(n))排序1Timsort (我相信這是一種修改過的合並排序。它針對速度進行了高度調整。)。


1正如評論中所指出的,這里指的是元素比較的次數,而不是低級操作的次數。 由於本例中的元素是字符串,並且比較兩個字符串需要進行min{|S1|, |S2|}個字符比較,因此總復雜度為O(n lg(n) * |S|)其中|S| 是正在排序的最長字符串的長度。 然而,所有比較排序都是如此——真正的操作次數取決於被排序元素類型的元素比較 function 的成本。 由於所有比較排序都使用相同的比較 function,因此在相互比較這些排序的算法復雜性時,您可以忽略這一微妙之處。

任何O(nlogn) 排序算法都可能比冒泡排序做得更好,但它們將是O(nlogn * |S|)

但是,可以在O(n*|S|)中對字符串進行排序,其中|S| 是平均字符串的長度,使用trie和簡單的DFS

高級偽代碼:

1. create a trie from your collection.
2. do a DFS on the trie generated, and add each string 
   to the list when you reach terminal node.

暫無
暫無

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

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