如何在任何给定时间点从给定字符串中查找前10个单词。python
假设我有一个字符串如何在任何给定时间点从给定字符串中查找前10个单词。python,python,algorithm,data-structures,Python,Algorithm,Data Structures,假设我有一个字符串s,并且单词在任何给定的时间点都会不断添加到字符串中。现在,我必须在任何给定的时间点保持前10个重复出现的单词 我的方法是创建一个具有键值对的字典,如下所示 dic = {} for i in s: if i in dic: dic[i] +=1 else: dic[i] = 1 现在我想保持上述词典中前10个单词的频率。 我可以通过以下方式执行上述操作: 我可以在每次迭代后对字典进行排序,但它会导致很高的复杂性,因为字典可能包含数百万条记
s
,并且单词在任何给定的时间点都会不断添加到字符串中。现在,我必须在任何给定的时间点保持前10个重复出现的单词
我的方法是创建一个具有键值对的字典,如下所示
dic = {}
for i in s:
if i in dic:
dic[i] +=1
else:
dic[i] = 1
现在我想保持上述词典中前10个单词的频率。
我可以通过以下方式执行上述操作:
我想上面的程序在线性时间工作。我知道以前有人问过上述问题,但我无法找到线性解。您不必每次都对整个dict进行排序。只需检查递增的值现在是否大于现有的第十大值。这就是我如何实现我所要求的
file = open('read.txt','r')
text = file.read().split()
word_cout = {}
top_words = {}
for i in text:
if i in word_cout:
word_cout[i] +=1
else:
word_cout[i] = 1
if i not in top_words:
for key in top_words.copy():
if top_words[key] < word_cout[i]:
top_words.pop(key)
top_words[i] = word_cout[i]
break
if(len(top_words) < 10):
top_words[i] = word_cout[i]
# print(word_cout)
print((top_words))
file=open('read.txt','r')
text=file.read().split()
单词cout={}
top_单词={}
对于文本中的i:
如果我在word中无法:
单词_cout[i]+=1
其他:
单词cout[i]=1
如果我不是用最上面的话:
输入最上面的单词。复制():
如果上面的单词[关键字]
如果第十大值增加了怎么办?您需要检查它的顶部。如果递增的值已经在前10名中,则无需更改,因为它仍然在前10名中。即使你想在前10名中排序,每次都是O(1),因为你只排序前10名,而不是其余的,所以总体上是O(N)。是的,但它可能会变成#9,所以你需要交换#9和#10。同意,我的问题仍然是O(1)@JohnZwinck,如何保持前10名的排序。我可以保持第十名的位置,但如何保持?你能用代码解释一下吗,因为这就是我要找的。@NikhilGupta:把它们分类就行了。对10个数字进行排序是O(1)。我不知道你所说的“如何”是什么意思。你可以用冒泡排序作为例子。