私は時間の複雑さの問題に全く新しいです。私は、Codilityの演習のためのPythonコードを書いています。私が書いたコードは、O(N * N)の時間複雑さを伴うタイムアウトエラーを返します。予想される時間の複雑さはO(N)です。整数A
のリストを考えるとPythonコードの時間の複雑さを理解する
、 私はA[0:i]
の合計と、すべてのインデックスA
でi
ためA[i:]
の合計との間の最小差を計算しようとしています。
はここに私のソリューションです:
def solution(A):
# write your code in Python 2.7
a=[]
for i in range(1,len(A)):
a.append(abs(sum(A[0:i])-sum(A[i:len(A)+1])))
return min(a)
pass
私はまだ同じ複雑さを取得するには、次
import sys
def solution(A):
# write your code in Python 2.7
a=sys.maxint
for i in range(1,len(A)):
temp=abs(sum(A[0:i])-sum(A[i:len(A)+1]))
if temp<a:
a=temp
return a
pass
を実装することで、コードを改善しようとしました。私はabs
ステップが計算に多くの時間を費やしていることを理解しています。このコードの時間の複雑さをどのように減らすのですか?時間の複雑さの問題を直観的に見る方法はありますか?ループの各反復で
フィードバックいただきありがとうございます。時間の複雑さを理解するためにお勧めする本はありますか? – Misha
@Misha私はこの優れた1ページの上部にあるPDFリンクをご覧ください。 https://codility.com/programmers/lessons/3-time_complexity/また、このページの演習を完了することをお勧めします。実際、ここでのすべての教訓は素晴らしく、すべてのプログラマーがそれらを通過する必要があります。 – janos