まず、アルゴリズムが導入され、
import time
start_time = time.time()
for a in range(0, 1001):
for b in range(0, 1001):
for c in range(0, 1001):
if a**2 + b**2 == c**2 and a+b+c == 1000:
print("a, b, c: %d, %d, %d" % (a, b, c))
end_time = time.time()
print("elapsed: %f" % (end_time - start_time))
print("complete!")
a, b, c: 0, 500, 500
a, b, c: 200, 375, 425
a, b, c: 375, 200, 425
a, b, c: 500, 0, 500
elapsed: 214.583347
complete!
依据三个变量之间的关系,减少一个变量,降低维度
import time
start_time = time.time()
for a in range(0, 1001):
for b in range(0, 1001):
c = 1000-a-b
if a**2 + b**2 == c**2:
print("a, b, c:%d, %d, %d" % (a, b, c))
end_time = time.time()
print("times:%d" % (end_time - start_time))
a, b, c:0, 500, 500
a, b, c:200, 375, 425
a, b, c:375, 200, 425
a, b, c:500, 0, 500
times:1
第二に、時間の複雑さ
1.なぜ私たちはの複雑さが必要なのか
事后统计法:把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。
- テスト結果は非常に依存してテスト環境です
試験結果は、大規模なデータによって影響を受ける
おおよそ推定することができるアルゴリズムの効率に方法をテストするために、特定のテストデータなしニーズ。2、複雑性O記法の大きい程度
すべてのコードが実行される時間T(n)はn個のコードの各ラインの周波数に比例します。
また、漸近的時間計算、短時間複雑と呼ばれるデータの増加傾向の尺度と実行時間を示す符号のビッグOタイム複雑。時間の複雑性解析
コードまでのサイクル数にのみ関心
のコードの大部分の大きさに等しい全体的な複雑さの複雑:付加ルール
乗算ルール:内側および外側の入れ子にされたコードの複雑さに等しい、ネストされたコードの複雑さ3、ケーススタディのいくつかの一般的な時間複雑
- (1)O
、一般的には、限りループとして、再帰アルゴリズムステートメントは、コードの行数千があっても、時間複雑度はO(1)であり、存在しません。 - O(LOGN)、O(nlogn )
大タグの複雑さOを使用する場合、係数は無視することができる、すなわちO(CF(N))= O(F(N)) (M + N)O、O (M * n)が
コードの複雑さは、二つのデータのサイズによって決定されます4、スペースの複雑さの解析
漸近空間複雑:ストレージアルゴリズム及びデータ規模の成長との関係という。
5、可能性の時間複雑:
作業を完了するためのアルゴリズムは、基本的な操作の最小数は、それが最適な時間複雑である必要があり
、基本的な算術演算は、仕事を取るどのくらい、それは最悪の時間複雑さ
の作業を完了するためのアルゴリズムは、基本的な操作、すなわち平均時間の複雑さの平均数を必要と