Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 词表的词典排序_Python_Algorithm_Sorting - Fatal编程技术网

Python 词表的词典排序

Python 词表的词典排序,python,algorithm,sorting,Python,Algorithm,Sorting,我需要按字典顺序对100000多个单词的列表进行合并和排序。我现在使用一个稍微修改过的冒泡排序,但是在O(n^2)时需要花费相当长的时间。有没有更快的算法对单词列表进行排序?我正在使用Python,但是如果有一种语言能够更好地处理这个问题,我愿意接受建议。使用内置的sort()list方法: >>> words = [ 'baloney', 'aardvark' ] >>> words.sort() >>> print words ['aar

我需要按字典顺序对100000多个单词的列表进行合并和排序。我现在使用一个稍微修改过的冒泡排序,但是在O(n^2)时需要花费相当长的时间。有没有更快的算法对单词列表进行排序?我正在使用Python,但是如果有一种语言能够更好地处理这个问题,我愿意接受建议。

使用内置的
sort()
list方法:

>>> words = [ 'baloney', 'aardvark' ]
>>> words.sort()
>>> print words
['aardvark', 'baloney']
它使用了一个
O(nlg(n))
sort1(我相信这是一种改进的合并排序,它对速度进行了高度调优)


1正如评论中指出的,这是指元素比较的数量,而不是低级操作的数量。由于本例中的元素是字符串,比较两个字符串需要
min{S1 |,| S2 |}
字符比较,因此总的复杂性是
O(n lg(n)*|S |)
其中
S |
是被排序的最长字符串的长度。但是,所有比较排序都是这样的——实际操作数取决于所排序元素类型的元素比较函数的成本。由于所有比较排序都使用相同的比较函数,因此在相互比较这些排序的算法复杂性时,您可以忽略这一微妙之处。

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

但是,可以在
O(n*| S |)
中对字符串进行排序,其中
|S |
是平均字符串的长度,使用a和简单的

高级伪代码:

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.

对于字符串,任何比较排序算法都是
O(nlogn*| S |)
,因为每个比较运算都不是
O(1)
@amit:True,尽管
|S |
通常比单词的
n
小。尝试是很好的,但是(有效地)构造它们是很困难的,而
sort()
是内置的。@amit:它们不必是;如果语言执行字符串实习,字符串相等测试可以在
O(1)
时间内完成。@ninjagecko:Sorts需要顺序比较,而不仅仅是“相等或不相等”。否则就没有办法判断胡扯是否应该继续土豚。实习只会影响重复的字符串。Cameron:我指的是你回答中的
O(nlogn)
语句,没有其他假设,这是不正确的。即使你假设S=O(logn),你也会得到O(n(logn)^2)。然而,我同意使用内置的是最简单的方法,但不是最快的,渐进的@ninjagecko:是用python完成的吗?怎样有参考资料吗?我很想读它。[这里不是讽刺,我真的很感兴趣!]*如果内存有限,你知道Python中有什么好的(有效的)trie实现吗?@Cameron:我不是一个真正的Python本地用户,所以我不知道。但我相信它是存在的,它太普遍了,而且python的应用太广泛了,以至于我不相信它在什么地方没有开源实现。