좋아요, 그래야 그래프에 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의 : 당신이 f(n)/n
음모 경우 크리스 테일러 (Chris Taylor)는 코멘트에 주목
for n in range(50000):
startTime = ...
## insert an element into the tree
stopTime = ...
## record the tuple (n, stopTime - startTime) for plotting
, 당신은 로그 그래프를 볼 수있다. log(n!)
에 대한 매우 긴밀한 근사값은 n*log(n)
입니다 (위키피디아 페이지 참조).
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