この質問について助けが必要です。時間計算量は O(n) だと思いますが、私の友人はこれが O(n^2) だと主張しています。理由の1つはfn = fn[index+1 ::]
#filename: string_expression_matcher.cc
#string: stxpm.c
#should return
import sys
string = "string_expression_matcher.cc"
subStr = "stxpm.c"
fn = list(string)
for i in subStr:
try:
index = fn.index(i)
fn = fn[index+1 ::]
except:
print ("can't dup")
sys.exit()
print ("found")
これが私のアルゴリズムです:
- subStr の s:
- ループは「string_expression_matcher.cc」から始まります。
- このステップの残りの文字列出力は「tring_expression_matcher.cc」です。
- subStr の t
- ループは「tring_expression_matcher.cc」から始まります。
- 残りは「ring_expression_matcher.cc」です。
- x in subStr
- ループは「ring_expression_matcher.cc」から始まります。
- 残りは「pression_matcher.cc」
- p in subStr
- ループは「pression_matcher.cc」から始まります。
- 残りは「resion_matcher.cc」です。
最後のステップまで続きます。
与えられた:
n = len(subStr)
m = len(string)`
このプログラムの時間計算量は? みんなありがとう、でも私は本当にO(n)かO(n^2)か知りたい。コードが完璧ではないことはわかっていますが、時間の複雑さに注意してください..どうもありがとう
Python文字列コピーの仕組みを知っている人はいますか? fn = fn[index+1 ::] を実行するとどうなりますか?
特級エンジニアに聞いてみました。彼は、結果は O(m*n) であると言いました。君はどうでしょう?