いいえ、グラフには、n
要素をツリーに挿入するためのコストの測定値が表示されます。ここで、x軸は挿入した要素の数であり、y軸は合計時間です。
n個の要素をツリーに挿入するのに必要な時間を合計する関数を呼び出してみましょう。f(n)
その後、我々はf
がどのように見えるかの大まかなアイデアを得ることができます。
f(1) < k*log(1) for some constant k.
f(2) < k*log(1) + k*log(2) for some constant k
...
f(n) < k * [log(1) + log(2) + ... + log(n)] for some constant k.
によりログがどのように機能するかには、我々はlog(1) + ... + log(n)
を折りたたむことができます。
f(n) < k * [log(1*2*3*...*n)] for some constant k
f(n) < k * log(n!) for some constant k
我々はウィキペディアを見てみることができますどのlog(n!)
のように見えるのgraphを参照してください。記事のグラフを見てください。あなたにはよく知られているはずです。:)です
は
、私はあなたが事故でこれをやったと思う:
for n in (5000, 50000, 500000):
startTime = ...
## .. make a fresh tree
## insert n elements into the tree
stopTime = ...
## record the tuple (n, stopTime - startTime) for plotting
むしろ木に一つの要素を挿入する個々のコストよりも、サイズnのツリーを構築するための総時間をプロットしましたサイズのN:
for n in range(50000):
startTime = ...
## insert an element into the tree
stopTime = ...
## record the tuple (n, stopTime - startTime) for plotting
クリス・テイラーは、あなたがf(n)/n
をプロットすると、ログのグラフが表示されますことをコメントで指摘しています。 log(n!)
とかなり近似しているのはn*log(n)
です(Wikipediaのページを参照)。
f(n) < k * log(n!) for some constant k
をしてもらう:だから私たちは私たちのバウンドに戻ることができ
f(n) < k * n * log(n) for some constant k
をそして今、あなたがn
でf(n)
を分割する場合は、あなたのグラフはによって上記有界されることを確認するために簡単なはずです対数の形。
コードを投稿してください。 –
http://paste.pocoo.org/show/559501/ – Zack