はい、あなたのケースで* 1 文字列の連結をコピーするすべての文字を必要とし、これは(N及びMは、入力文字列のサイズである)O(N + M)動作です。同じ単語のM個の付加はO(M^2)時間になる。
あなたがstr.join()
を使用して、この二次現象を回避することができる:
word = ''.join(list_of_words)
のみO(N)(Nは出力の合計の長さ)とります。それとも、単一の文字を繰り返している場合は、あなたが使用することができます。
word = m * char
あなたはそれを逆転させる(またはO(1)前に付ける動作を取得するためにcollections.deque()
オブジェクトを使用して)、文字を付加ますが、最初のリストを作成していますあなたのO(N^2)の選択をここで簡単に打ち負かすことは、依然としてO(n)の複雑さです。 strA += strB
またはstrA = strA + strB
を使用した場合のPython 2.4のよう
* 1
は、CPythonの実装は、新しい文字列オブジェクトを作成することを回避するが、この最適化は、壊れやすく、ポータブルではないの両方です。
strA = strB + strA
(prepending)を使用しているため、最適化は適用されません。
何を数えますか:ウォルクロック時間、操作数?私は 'm'文字列の連結が' m'で二次的であることを疑う。 –
操作数。 n文字の文字列を割り振る必要があります。 – Generalbrus
長さ '2m'の文字列を割り当てるには、長さ' m'の文字列を割り当てる時間を2倍にするのはなぜですか? –