插入排序节拍合并排序n< = 8logn,n的值

时间:2015-09-20 12:57:13

标签: algorithm sorting logarithm

我的数学很弱

n< = 8logn如何求解该等式得到n的值,

问题来自算法"对于大小为n的输入,插入排序以8n ^ 2步进行,而合并排序以64n lg n步进行; n的值是插入排序打败合并排序?

所以我想到......

8n^2<=64nlogn

N ^ 2&LT = 8nlogn N'LT = 8logn

但是如何从这里获得n的值,完整的数学将是有帮助的,并且任何学习基本对数数学的链接都是值得赞赏的。感谢

2 个答案:

答案 0 :(得分:1)

要确定n8n^264nlogn的值具有相同的值:

8n2 < 64nlogn
8n.n < 8n.8.logn
n < 8.logn
n/8 < logn

我们知道m = logaX因此a^m = x,因此

2^n/8 < n

算法分析以2 a = 2为基础。 要在Python中解决这个问题:

n = 2
while 2 ** (n / 8.0) < n:
   n +=1
print("Maximum value of n for which insertion sort beats merge sort is", n - 1)

有关此测验及其他测验的参考资料

  1. http://atekihcan.github.io/CLRS/
  2. https://github.com/gzc/CLRS

答案 1 :(得分:-1)

我们必须弄清楚,n8n^264nlogn的值具有相同的值。所以,

8n^2 = 64nlogn
=> n = 8logn
=> n = log (n^8)
=> 2^n = n^8

现在借助for循环,我们可以从n=2迭代到2^n = n^8的数字。

// language cpp
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    double n = 2;

    while(pow(2, n) < pow(n, 8)){
        cout << "n = " << n << endl;
        cout << "2^n = " << (long long) pow(2,n) << endl;
        cout << "n^8 = " << (long long) pow(n,8) << endl;
        cout << endl;
        n++;
    }

    cout << "n = " << n << endl;
    cout << "2^n = " << (long long) pow(2,n) << endl;
    cout << "n^8 = " << (long long) pow(n,8) << endl;

    return 0;
}

从输出中,我们看到值介于43和44之间。

有关对数的基本知识,您可以转到Khan Academy Lectures on Logarithm