1. アルゴリズムの複雑さとは、アルゴリズムが実行可能プログラムに書き込まれた後、実行時に必要なリソース (時間リソースとメモリ リソースが含まれる) を指します。
2. アルゴリズムの複雑さには、時間計算量、空間計算量が含まれます。
3. 時間計算量: つまり、アルゴリズムの実行効率。アルゴリズムの実行時間とアルゴリズムの入力値の間の関係を指します。一般的にはbig Oで表されます。主に for\while ループに焦点を当てます。コードを記述するときは、ループを減らす方法を考慮する
def test1(n):
count=0 #a
for i in range(n):
count+=i #b
return count #c
# 如上,这个函数,运行时间包括 a,b,c三部分,
# 对于整个函数来说,a,c执行一次,可以忽略不计,b循环部分时间,由输入值n决定,会循环n次,是一个标准的O(n)的复杂度
4. 共通時間計算量: O(1)<O(logN)<O(N)<O(NlogN)<O(nの2乗)<O(2のn乗)<O(n! )
5. 時間計算量のケース:
5.1
# 案例O(1):无循环
def o1(n):
i=n
k=n*2
return i+k
5.2
# 案例O(logN):while循环
# i一直在变,那么while条件也一直在变,log2(n):log以2为底,n的对数
def o_log_n(n):
i=1 #a
while i<n:
i=i*2 #b
return i #c
5.3
# 案例O(N):for循环
# O(M+N)两个for循环
def OMN(n,m):
count=0
for i in range(m):
count +=i
for j in range(n):
count +=j
return count
5.4
# 案例:O(NlogN):for循环嵌套while循环
def ONLogN(m,n):
count=0
j=0
for i in range(m):
while j<n:
count +=i+j
j=j+2
return count
5.5
# 案例:O(n的平方):for循环嵌套for循环。
def ON2(n):
count=0
for i in range(n):
for j in range(n):
count=i+j
return count
6. 空間の複雑さ: アルゴリズムの記憶空間と入力値の関係
7. 共通空間の複雑さ: O(1)<O(N)
8. 空間の複雑さのケース:
8.1 int型のカウント変数を定義します。intは4バイトです。以下の例では、for ループを何度実行しても count の内容は変更され、count が占有する領域は変更されず、return count は 1 回だけ実行され、実行後に終了します。空間複雑度は O(1)
def test2(n):
count=0;
for i in range(n):
count+=i
return count
8.2 配列を定義し、値を追加せずにバイトを追加します。これは線形増加です。空間の複雑さは O(N)
def test3(n):
array=[]
for i in n:
array.append(i)
return array