→
オーダー記法の例)
このコードの計算量は??
# 1~n までの数の和を求める
n = int(input())
ans = 0
for i in range(1, n+1):
ans += i
print(ans)
このコードの計算量は??
# 1~n までの数の和を求める
n = int(input())
ans = 0
for i in range(1, n+1):
ans += i
print(ans)
→
↓
今回は代表的なものを 2 つ紹介します。
先ほどの
# 1~n までの数の和を求める
n = int(input())
ans = 0
for i in range(1, n+1):
ans += i
print(ans)
このコードは、
(
等差数列の和の公式を使えば…
# 1~n までの数の和を求める
n = int(input())
ans = n * (n + 1) // 2
print(ans)
なんと、53.7ナノ秒で終了!!
→ 約5 億倍の高速化(ちょっと極端な例ではあるけど)
→ もちろん余裕で間に合う
あるたい焼き屋さんでは 毎日、売れた個数を記録しています。
営業開始から
→
あるたい焼き屋さんでは、
営業開始から
このとき、以下の
各項を毎回足していくと、毎回のクエリで
よって、
→ 間に合わない!
そこで、
このとき、
つまり??
累積和配列の計算方法
累積和の計算量は?
→
よって
$$ \small \begin{array}{|c|c|c|c|c|c|c|} \hline i & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7\\ \hline A_i & - & 20 & 50 & 30 & 10 & 30 & 0 & 40\\ \hline S_i & 0 & 20 & 70 & 100 & 110 & 140 & 140 & 180\\ \hline \end{array} $$