Algorithm 为文件中的每一行生成一行中所有词对的复杂性

Algorithm 为文件中的每一行生成一行中所有词对的复杂性,algorithm,time-complexity,Algorithm,Time Complexity,因此,我有一个文本文件,其中包含几行文本。我一行一行地读取文件,对于每一行,我生成所有可能的2对单词,其中顺序无关紧要。例如,给定行“你好吗”我生成的是[“你好吗”,“你好吗”,“你好吗”]。我的问题是,这件事的时间复杂度是多少?我知道读取文件中的每个单词需要O(n),生成对需要O(n^2),所以应该是O(n^3),因为我做的每一行O(n^2)工作量?假设你有n行,最大长度(单词数)是k。那么您的复杂性将是O(n*k^2)。区分行数和行长度很重要,因为通常情况下,文件往往有许多行,而行的长度通常

因此,我有一个文本文件,其中包含几行文本。我一行一行地读取文件,对于每一行,我生成所有可能的2对单词,其中顺序无关紧要。例如,给定行
“你好吗”
我生成的是
[“你好吗”,“你好吗”,“你好吗”]
。我的问题是,这件事的时间复杂度是多少?我知道读取文件中的每个单词需要
O(n)
,生成对需要
O(n^2)
,所以应该是
O(n^3)
,因为我做的每一行
O(n^2)
工作量?

假设你有
n
行,最大长度(单词数)是
k
。那么您的复杂性将是
O(n*k^2)
。区分行数和行长度很重要,因为通常情况下,文件往往有许多行,而行的长度通常很小


然而,假设你的长队很少。如果平均长度是
k'
,那么您可能会认为摊销运行时间是
O(n*k'^2)
。但是,当第一行的长度为<代码> n*k′/代码>时,考虑其余的长度<代码> 0 < /代码>。那么,您的摊销运行时间是
O(n^2*k'^2)
-不是您所期望的。您确实可以证明
O(n^2*k'^2)
是摊销运行时的界限。注意,在上述退化情况下,
O(n^2*k^2)
O(n*k^2)
有更好的界,因为
n*k^2
仅仅等于
n*(n*k')^2=n^3k'^2
。所以只要
n^2*k'^2
…生成所有排列…
。我看不出你在生成任何排列,你只是在生成对。标题有误导性。啊,我明白了。如果您不知道一行中的最大字数,并且每行的字数都不同,该怎么办?把每一行的长度概括为k可以吗?或者,我们会考虑每条线的平均长度,并有<代码> o(n avg(k))< /代码> @雷史密斯,这正是我要写的。