我的数学很弱
n< = 8logn如何求解该等式得到n的值,
问题来自算法"对于大小为n的输入,插入排序以8n ^ 2步进行,而合并排序以64n lg n步进行; n的值是插入排序打败合并排序?
所以我想到......
8n^2<=64nlogn
N ^ 2&LT = 8nlogn N'LT = 8logn
但是如何从这里获得n的值,完整的数学将是有帮助的,并且任何学习基本对数数学的链接都是值得赞赏的。感谢
答案 0 :(得分:1)
要确定n
,8n^2
和64nlogn
的值具有相同的值:
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 :(得分:-1)
我们必须弄清楚,n
,8n^2
和64nlogn
的值具有相同的值。所以,
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。