我正在使用defaultdict在Python中进行简单的算法排序,创建一个用作键的哈希值,然后只是通过字典然后打印出具有多个值的任何内容。
最初是通过使用:
创建排序字符串来创建哈希def createHashFromFile(fileName):
with open(fileName) as fileObj:
for line in fileObj:
line = line.lower()
aHash = ("").join(sorted(line.strip()))
aSorter[aHash].append(line.strip())
但是,因为sorted()函数是O(n ^ 2),所以建议通过素数因子分解来创建哈希。我创建了一个字典,将所有小写字母映射到素数,然后完成:
def keyHash(word):
mulValue = 1
for letter in word:
letter = letter.lower()
mulValue = mulValue * primeDict[letter]
return mulValue
在300k字上,字符串散列运行在0.75秒内,主散列运行在1秒内。我一直在读这篇文章,但是我无法确定我是否错过了这个或为什么它运行得更慢。
就家庭作业而言,这已经完成但我想了解我在这里失踪的原因或原因。
答案 0 :(得分:2)
这里有很多因素:
sorted
是O(n log n)平均情况而不是O(n ^ 2)。最糟糕的排序几乎与真实程序无关。n
很小,因此实施细节比复杂性更重要。sorted
内置并以C语言编写。实施已经过多年调整。你的素数乘法代码是用Python编写的。