我有4种排序算法(线性,频率,二进制和哈希表),用于排序单词列表。
我需要分析每个比较的数量,给出 n 单词的列表并将它们相互比较。为此,我将计算每种算法在不同大小的列表上执行的比较。
我的方法是用整数模拟单词(这应该减少比较时间并使我的测试功能更容易生成范围)。我目前假设文本的平均词汇量是300字。以合理的频率重复20%,30%不太常见,剩下的50%是稀有的。
这种方法是否公平合理?即:它(合理地)将准确地表示从典型文本块复制的典型单词列表。
我用来模拟文本中单词列表的代码如下:
from random import randint, shuffle
def get_list(size):
'''return list of psuedo random integers
in a list of length size, to represent
a typical block of text'''
my_list = []
#percent of words that are typically most common, common, rare
most_common = 20
common = 30
rare = 50
vocab = 300
for word in range(0, int(size * (most_common / 100))):
my_list.append(randint(0, 5))
for word in range(0, int(size * (common / 100))):
my_list.append(randint(0, 20))
for word in range(0, int(size * (rare / 100))):
my_list.append(randint(0, vocab))
shuffle(my_list)
return my_list
由于
答案 0 :(得分:1)
总数为300时,您将无法看到性能上的任何显着差异。我相信你应该增加5000以上单词的输入数量。
通常,对于排序单词,您可以使用HashTable,因为它更有效并且可以节省空间。
如果您有预测文本的用例,您也可以查找“尝试”数据结构。