Performance 字符串连接检查算法的运行时间
我编写了一个算法来检查字符串是否是数组中任意数量字符串的串联(同时能够多次使用字符串)。我很难弄清楚算法的运行时间到底是什么 我对照数组中的每个单词检查有问题的字符串,当我发现一个单词是从索引0开始的原始字符串的子字符串时,我也对照数组中的每个单词检查剩余的子字符串。所以我认为这是一个O(n^n),除非我遗漏了什么Performance 字符串连接检查算法的运行时间,performance,algorithm,runtime,Performance,Algorithm,Runtime,我编写了一个算法来检查字符串是否是数组中任意数量字符串的串联(同时能够多次使用字符串)。我很难弄清楚算法的运行时间到底是什么 我对照数组中的每个单词检查有问题的字符串,当我发现一个单词是从索引0开始的原始字符串的子字符串时,我也对照数组中的每个单词检查剩余的子字符串。所以我认为这是一个O(n^n),除非我遗漏了什么 def check_concat(str,substr,words) if substr == "" return false end words.each d
def check_concat(str,substr,words)
if substr == ""
return false
end
words.each do |word|
if word == substr && str != substr
return true
end
if substr.index(word) == 0
if check_concat(str,substr[word.length..-1],words)
return true
end
end
end
return false
end
假设主字符串包含
m个单词
,并且要搜索的数组中有n个单词
。在最坏的情况下,需要用数组中的每个单词检查主字符串中的每个单词,即mn
time。因此,函数的时间复杂度为O(mn)
例如,主字符串是
“Hello”
。要检查的数组包含以下单词“Hai”、“Fine”、“Hello”
。然后,该函数将需要总共15次比较。如果我正确理解了您的算法,那么它的复杂性是否应该用输入字符串的长度(比如m)和数组的大小(n)来表示呢?我明白了,我没有考虑到这一点,谢谢。这个例子确实让我们更容易思考,谢谢!