我需要按照字典順序對100,000多個單詞的列表進行合併和排序。我現在用一個稍微修改過的冒泡排序來做,但是在O(n^2)它需要很長時間。有沒有更快的算法來排序單詞列表?我使用Python,但是如果有一種語言可以更好地處理這個問題,我很樂意提供建議。字詞列表的字典排序
回答
任何O(nlogn)
sorting algorithm可能會做的更好,然後冒泡排序,但他們會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.
使用內置sort()
列表方法:
>>> words = [ 'baloney', 'aardvark' ]
>>> words.sort()
>>> print words
['aardvark', 'baloney']
它採用了O(n lg(n))
排序的Timsort(。這是一個修改合併排序,我認爲這是非常適應的速度) 。
如在評論中指出,這是指元件的比較的數量,而不是低級別的操作的數量。由於這種情況下的元素是字符串,並且比較兩個字符串需要min{|S1|, |S2|}
個字符比較,所以總複雜度爲O(n lg(n) * |S|)
,其中|S|
是要排序的最長字符串的長度。但是,所有比較排序都是如此 - 操作的真實數量取決於要排序的元素類型的元素比較函數的成本。由於所有比較排序都使用相同的比較函數,所以在比較這些排序的算法複雜性時,您可以忽略這種細微差別。
任何比較對於字符串,排序算法都是'O(nlogn * | S |)',因爲每個比較操作不是'O(1)' – amit 2012-04-07 19:21:26
@amit:True,儘管「| S |」與單詞「n」相比通常很小。嘗試很棒,但構建它們(高效)很棘手,而'sort()'是一個內置的。 – Cameron 2012-04-07 19:26:13
@amit:他們不一定是;如果語言執行字符串interning,字符串相等性測試可以在'O(1)'時間完成。 – ninjagecko 2012-04-07 19:26:31
- 1. 排序詞典列表值
- 2. Python:排序列表字典
- 3. 排序Python字典列表
- 4. 詞典中的NSDates對字典排序
- 5. 按字典排序詞典的字典值
- 6. 轉換詞典列表的字典
- 7. 排序列表中的python字典值
- 8. 獲取按字典鍵排序的字典元素列表
- 9. 轉換詞典的詞典列表的字典
- 10. 排序列表字典由字典裏面字典的關鍵在Python
- 11. 通過詞典列表高效排序?
- 12. Python:按元素排序列表字典
- 13. Python按鍵排序字典列表
- 14. 排序字典列出
- 15. 排序字典陣列
- 16. 按字典順序排列的字符串列表
- 17. 排序字典
- 18. 排序字典
- 19. 詞典鍵(C#)字典組列表字典
- 20. 如何按值列表整理此列表的字典詞典?
- 21. 按字典的數值排序字典
- 22. 分配排序字典的新字典
- 23. 排序字典內的Python字典
- 24. python:排序字典上的字典
- 25. 使用番石榴的字符串列表的字典排序
- 26. 字典詞典
- 27. 按照Python中其他字典的值排序詞典
- 28. 最簡單的方式來按字號排序字詞列表
- 29. Python按列表中字典的值對列表進行排序
- 30. 排序打印輸出列表的字典,按字母順序排列的列表的索引0
任何形式將盡。 – soulcheck 2012-04-07 19:19:43
*如果內存受限,就地訪問 – soulcheck 2012-04-07 19:31:08