算法时间复杂度比较:根号n与logn相比哪个更优?优多少?试根据下图猜想其算法?
举个栗子:log100万=20,根号100万 = 1000,差距已经很大了。
米勒罗宾是logn的算法,但是实际应用上它并不稳定,一般在范围较大(int64范围)才会用,一般的情况用的都是sqrt(n)的算法,但是在需要判断大量素数的情况下(假设判断次数为m),一般是比较m*sqrt(n)和n的大小,如果前者小就暴力判断,否则用筛法会更快。
然后比较,在不考虑常数的情况下是logn更优,但是算法常数导致在数据较小的一些情况下sqrt(n)反而更快。
第一个根号n的:
#include
inline bool isprime(int x) {
if (x == 2) { return true; }
if (x < 2) { return false; }
int pos = int(sqrt(x)) 1;
for (int i = 2; i <= pos; i) {
if (x % i == 0) { return false; }
}
return true;
}
然后logn的米勒罗宾你可以看下博客网页链接
然后提供一个筛法的代码(stl版本)
#include
bool vis[maxnum];//maxnum就是最大数字
std::vectorprimes;//储存素数
inline void getprimes(int maxn) {
for (int i = 2; i <= maxn; i) {
if (!vis[i]) { primes.push_back(i); }
for (size_t j = 0; j < primes.size() && primes[j] * i <= maxn; j) {
vis[primes[j] * i] = true;
}
}
}
实际应用一般用筛法或者sqrt(n)算法,只有大数据才会用米勒罗宾
对log(n)/sqrt(n)求n趋于无穷的极限,用洛必达法则得到0。拓展一下o(n^k)>o(log n)在k>0时恒成立。指数的复杂度永远比log大,而且不是一个量级的。
算法时间复杂度比较:根号n与logn相比哪个更优?优多少?试根据下图猜想其...
答:必须是logn更优。你看看他们的反函数,根号n的反函数是n^2,logn的反函数是2^n。后者增长远快于前者,所以logn的增长远慢于根号n。举个栗子:log100万=20,根号100万 = 1000,差距已经很大了。
答:这个程序的意思是找到最小的i满足1 2 ... i >= n 因为1 2 ... i = (i 1) * i / 2,i每次增加1的话只需要根号n次就能够得到得到结果 所以复杂度是o(根号n)的
答:时间复杂度为o(n^0.5),即根号n的数量级。该程序求解的是:s=1 3 5 7 ... (2k 1),且使得s-(2k 1)
答:1. i = 1, s = 1 2. i = 2, s = 3 3. i = 3, s = 6 4. i = 4, s = 10 5. i = 5, s = 15 ...不难得出s的公式 s = 1 2 ... i = n * (n 1) / 2 所以虽然o(n)并不错, 但是更为近似和精确的结论应该是 o(根号n),这应该是标答。抱歉,...
答:s=s i?少了一个加号或者多了一个加号吧 若s=s i 你会发现 s0=0 1;s1=1 3;s2=4 5;s3=9 7 发现s0=1;s1=4;s2=9;s3=16 为0,1,2,3,4的平方 当n->无穷的时候 while至多运行根号n的下限次,所以复杂度是根号n
答:如果你把while(y*y<=n)改成while(y<=sqrt(n));sqrt(n)表示求n的算术平方根就明白了
13971814526&&算法时间复杂度比较:根号n与logn相比哪个更优?优多少?试根据下图猜想其算法? - 》》》[答案] 必须是logn更优.你看看他们的反函数,根号n的反函数是n^2,logn的反函数是2^n.后者增长远快于前者,所以logn的增长远慢于根号n. 举个栗子:log100万=20,根号100万 = 1000,差距已经很大了.
13971814526&&c 中的时间复杂度o(1)与o(n)有什么区别 - 》》》 c 中的时间复杂度o(1)与o(n)的主要区别在于: 1、时间复杂度o(1)是常数阶,其基本操作重复执行的次数是一个固定的常数,执行次数不存在变化; 2、而时间复杂度o(n)是线性阶,其基本操作重复执行的次数是与模块n成线性相关的,其值...
13971814526&&时间复杂度更(n2)比(n)更优吗 - 》》》 这个首先要明确一点,只用到比较的排序算法最低时间复杂度是o(nlogn),而像桶排这样的只需要o(r)(r为桶的大小) 为了证明只用到比较的排序算法最低时间复杂度是o(nlogn),首先要引入决策树.首先决策树是一颗二叉树,每个节点表示元...
13971814526&&【数据结构】怎么比较哪个算法的时间复杂度更优? - 》》》 我们一般用时间复杂度和空间复杂度来比较算法的优劣时间复杂度的定义是当数据规模为n的时候时间的几何增长函数程度(不包括系数)一般而言o(log2n)优于o(n)优于o(nlog2n)优于o(n^2)......
13971814526&&数据结构 时间复杂度 》》》 该函数的功能是:判断一个整数是否为素数,是素数返回1,不是素数返回0 算法流程: 参数为整数n 对n开平的方并取整后赋值给整型变量x 循环判断:令i从2开始递增,一直到i<=x不成立 在循环体中判断n能不能被i整除,一旦有一个i能整除就说明不是素数,就提前跳出循环 最后判断i是否大于x,(如果没有提前跳出循环,则最后i会等于x 1) 如果i>x则n是素数,返回1,否则返回0 【时间复杂度】最大时间复杂度为(根号n) 因为在上面的算法中最多循环x次,即根号n
13971814526&&一道计算时间复杂度的题!!!!! - 》》》 你这个没给出y的情况,我猜测是y以默认初始值为0 ,那么,你要看时间复杂度,就看这段时间内都做了什么计算,这里就是2个(y 1)动作,一次乘法操作,一次y 操作 (这是在条件为真的情况下),再外加一次判断条件为假的情况,就是2次(y 1) 和一次 乘法(y 1)(y 1) 接下来就看循环几次了,因为是判断(y 1)*(y 1)和n 的大小关心,其实就是看小于n的完全平方数是什么,那么,这个值肯定<= 根号下n (因为根号下n 对应的是他是第几个完全平方数,这是很简单的数学问题)所以计算次数是(4倍根号下n ) 3 所以时间复杂度是o(n的1/2次方) 这里数学符号不太好表示,但是我觉得我应该解释清楚了..
13971814526&&【查找技术】顺序查找的时间复杂度o(n),请问o(n)什么意思啊? - 》》》 算法执行时间与问题规模的函数关系,因为有n个关键码,顺序查找一般平均需要比较(n 1)/2次,于是时间复杂度就是(n 1)/2,当n->无穷大时,该表达式与n为同阶无穷大,记为o(n),这是高等数学里就有的表示法
13971814526&&有关算法的时间复杂度 - 》》》 n的3次方是指这里举的例子:“两个n阶矩阵相乘”而言. 它说,这个问题的“规模”等于矩阵的阶数 n . 两个n阶矩阵相乘的基本运算(两个实数的乘法)次数正好是阶数的三次方. f (n) = n ^ 3 . 矩阵乘法程序见: http://zhidao.baidu.com/question/9394030.html 别的算法的时间复杂度=算法的工作量=f (n) f (n) 是什么,要看算什么,怎么算,才知道.未必是n的3次方.
13971814526&&c语言,数据结构中 算法的时间复杂度 - 》》》 看看循环体的个数,一般来说循环体越多 时间复杂度越高 例如for(i:0->n) for(j: 0 -> m){ m = n; } 这段代码的操作执行次数是n*m 如果n和m之间有函数关系,如 n = 2m.基本操作次数就是2m^2,时间复杂度中只取最高次幂项且忽略系数,所以时间复杂度为:o(m^2) 当然也可以西城o(n^2).
13971814526&&c语言,时间复杂度与空间复杂度,算法时间公式t(n)=o(f(n)),与空间公式s(n)=o(f(n)) - 》》》 算法的时间复杂度:为了便于比较同一问题的不同算法,通常从算法中抽取一种或者多种有代表性的基本操作,再以这些基本操作重复执行的次数与问题规模的关系t(n) 作为算法的时间性量度.如果t(n) 和 f(n) 是n 的函数,当n →∞ 时,有t(n) / ...