Insertion Sort和Finger TreeSort的渐近运行时

时间:2012-05-21 21:50:53

标签: runtime asymptotic-complexity insertion-sort finger-tree

我在我的书中搜索过高低,以及互联网上的几个网站,但我对我的答案并不完全确定。

关于存在的反转次数,我需要给出InsertionSort和FingerTreeSort(基于RB-Trees)的渐近运行时间。 InsertionSort在O(n + INV)时间运行,FingerTreeSort在O(n + n * lg(INV / n + 1)中运行。 我需要为INV = 0,n,n ^ 1.5和n ^ 2/4提供渐近运行时。

我自己想出的是InsertionSort运行于:O(n),O(n),O(n ^ 2)和O(n ^ 2)

这是对的吗?为什么不? (我特别不确定INV = n和n ^ 1.5)

对于FingerTreeSort:O(n * lg(n)),O(n * lg(n)),O(n * lg(sqrt(n)))和O(n * lg(n ^ 2) )

我对FingerTreeSort中的所有内容都有疑问,但这些是我认为应该如何。 如何找到正确的渐近运行时? 例如对于FingerTreeSort和n ^ 1.5,我认为它会通过插入一般运行时给出O(n + n * lg(n ^ 1.5 / n + 1),并简化:O(n + n * lg) (sqrt(n)+1)并且看到它是渐近的,我可以忽略较低的数字,如+1和+ n给我O(n * lg(sqrt(n)))。这是正确的做法吗?

提前感谢那些回答这个问题的人。我非常赞赏它:)

PS。用java写作,并不重要。

1 个答案:

答案 0 :(得分:0)

插入排序:
公式:O(n + inv)
inv = 0: O(n)
inv = O(n):O(n + n)= O(n)
inv = O(n ^ 1.5):O(n + n ^ 1.5)= O(n ^ 1.5)
inv =(n ^ 2)/ 4:O(n + n ^ 2)= O(n ^ 2)

FingerTreeSort:
公式(使用OP提供的公式):O(n + n *(ln [(inv / n)+1]))
inv = 0: O(n)
inv = O(n):O(n + n *(ln [(O(n)/ n)+ 1]))= O(n + n *(ln [O(1)+1]))= <强> O(n)的
inv = O(n ^ 1.5):O(n + n *(ln [(O(n ^ 1.5)/ n)+ 1]))= O(n + n *(ln [c *(n ^ 0.5)) + 1]))=
 O(n + 0.5 * n * ln(n))= O(n * ln(n))
同样,对于inv = O(n ^ 2): O(n * ln(n))