Complexity
Definition
一份程式的好壞有很多面向
如何評估?
手動計時 / 引用時間函式庫進行測量?
import time
time_start = time.time()
# 執行程式
time_end = time.time()
print(time_end - time_start)
變因過多(電腦效能等)
需要實際測量才能得知
假設「基礎運算」運行時間為一單位時間
a = 1;
a += 3;
將時間表示成相關因素(e.g. 輸入量)的函數 T(n)
考慮將 T(n) 以更簡單的方式描述
讓我們開啟 Geogebra 來觀察一下
它們在 x 很大時的表現如何
Algorithm Analysis
a = 0
for i in range(1, n + 1):
a += i
print(a)
a = 0
for i in range(1, 2 * n + 1):
a += i
print(a)
a = a * (a + 1) // 2
print(a)
a = n
while a != 1:
a //= 2
def fast_pow(a: int, n: int) -> int:
if n == 0:
return 1
temp = fast_pow(a, n // 2)
if n % 2 == 0:
return temp * temp
else
return a * temp * temp
a = int(input())
n = int(input())
print(a ** n)
a = float(input())
n = float(input())
print(a ** n)
一般來說, C++ 每秒可以跑 1e8 ~ 1e9 (約 3e8)
Python 可能 1e7 或以下(?
複雜度 | 範圍 |
---|---|
10~12 | |
20~23 | |
24~28 | |
500~600 | |
5000~6000 | |
5e3~1e4 |
複雜度 | 範圍 |
---|---|
1e5~5e5 | |
5e5~6e5 | |
1e6~2e6 | |
(輸入) | 1e6~1e7 |
(不含) | 1e7~3e8 |
1e18 |
實際上因為常數關係,經驗成分居多(
理論計算機科學