letterList = ["a", 0, "b", 0, "c", 0, "d", 0, "e", 0, "f", 0, "g", 0, "h", 0, "i", 0, "j", 0, "k", 0, "l", 0, "m", 0, "n", 0, "o", 0, "p", 0, "q", 0, "r", 0, "s", 0, "t", 0, "u", 0, "v", 0, "w", 0, "x", 0, "y", 0, "z", 0]
letterCount = 0
wordList = [None]
wordCount = 0
Count = 0
wordIndex = [0]
itext = cleaner(raw_input("enter itext please")).split()
print itext
for iword in itext:
if iword in wordList:
Count += 1
for word in wordList:
if iword == word:
wordList[wordList.index(word)+1][0] += 1
wordList[wordList.index(word)+1] += [wordCount]
else:
pass
elif iword not in wordList:
wordList += [iword]
wordList += [[1, itext.index(iword)]]
else:
pass
wordCount += 1
print wordList
代码看起来很混乱,因为我在python和编程方面都是初学者。
任何人都可以帮我处理代码的时间复杂性吗?
答案 0 :(得分:6)
除格式不同外,print itext
之后的所有内容都可以替换为:
print collections.Counter(itext)
这有复杂性O(n)。
如果没有Counter,您可以使用dict而不是列表来更好地表达算法来存储单词计数:
word_counter = {}
for word in itext:
if word in word_counter:
word_counter[word] += 1
else:
word_counter[word] = 1
dict非常适合存储某些东西(这里是一个单词)和其他东西(这里是一个计数)之间的关联。一个交替的单词和计数对的列表比dict有很多缺点,但杀手是在列表中找到一个单词是O(N)而不是O(1)。
答案 1 :(得分:0)
第二个循环没用。
您只需要iword
中的wordlist
索引。
for iword in itext:
if iword in wordList:
i = wordList.index(iword)
wordList[i+1][0] += 1
wordList[i+1].append(wordCount)
Count +=1
else:
wordList.append(iword)
wordList.append([1, itext.index(iword)])
wordCount += 1
print wordList
这会产生与您的代码相同的输出,但说实话,我不清楚它是否真的符合您的期望......
答案 2 :(得分:0)
假设使用循环计数来实现复杂性。
首先,我们需要找到最坏的情况。第一次通过循环的复杂度为1,第二次通过时的最大复杂度为3.在第三次,如果第二次循环的复杂度为3,那么第三次的最大复杂度为3,总复杂度为7.如果你给第二个复杂度为1,你可以给第三个最大复杂度为5,但这仍然给你一个总复杂度为7.但是,在这一点上它变得很奇怪。第四次通过的最大复杂度是,如果您的复杂度为1,1,5和5,则总共为12. 5具有1,1,1,7和7 = 17. 6具有1,1 ,1,7,7和7 = 24. 1,1,1,1,9,9,9 = 31. 1,1,1,1,9,9,9,9 = 40.找到一般的最差案例场景真的有点难,但我会说最糟糕的情况是,当上半部分(无论你使用一半的楼层或天花板无关紧要)字符串是由新单词组成的,其余的字符串的一部分由最后添加的新单词组成。 “红绿蓝黄黄黄黄”是7个单词最坏情况的一个例子。把它放到数学术语中看起来有点像这样:
O(ceiling(n/2) + floor(n/2)*(ceiling(n/2)*2+1))
或者,python根据列表大小计算出复杂性:
from __future__ import division
import math
def complexity(n):
return math.ceil(n/2) + math.floor(n/2)*(math.ceil(n/2)*2+1)
那就是说,你的算法是可怕的,你应该用其他答案给出的其中一个代替它。