擅长:python、mysql、java
<p>以下是一个快速而肮脏的方法:</p>
<pre><code>import matplotlib.pyplot as plt
def f2(L):
sum = 0
i = 1
times = 0
while i < len(L):
sum = sum + L[i]
i = i * 2
times += 1 # track how many times the loop gets called
return times
def main():
i = range(1200)
f_i = [f2([1]*n) for n in i]
plt.plot(i, f_i)
if __name__=="__main__":
main()
</code></pre>
<p>。。。结果是</p>
<p><img src="https://i.stack.imgur.com/QAre5.png" alt="plot of function loops vs parameter size"/></p>
<p>水平轴是L的大小,垂直轴是函数循环的次数;从这里可以很明显地看到big-O。</p>