算法运行时间1、logN、N、NlogN 、N^2、N^3、2^n之间的比较

排序算法中,常常要求我们估算出最坏情况运行时间平均情况/期望运行时间。在估算运行时间时,我们常用到下面一些时间量:

 1 大部分程序的大部分指令之执行一次,或者最多几次。如果一个程序的所有指令都具有这样的性质,我们说这个程序的执行时间是常数。
 logN  如果一个程序的运行时间是对数级的,则随着N的增大程序会渐渐慢下来,如果一个程序将一个大的问题分解成一系列更小的问题,每一步都将问题的规 模缩减成几分之一 ,一般就会出现这样的运行时间函数。在我们所关心的范围内,可以认为运行时间小于一个大的常数。对数的基数会影响这个常数,但改变不会太 大:当N=1000时,如果基数是10,logN等于3;如果基数是2,logN约等于10.当N=1 00 000,logN只是前值的两倍。当N时原来的两倍,logN只增长了一个常数因子:仅当从N增长到N平方时,logN才会增长到原来的两倍。
 N 如果程序的运行时间的线性的,很可能是这样的情况:对每个输入的元素都做了少量的处理。当N=1 000 000时,运行时间大概也就是这个数值;当N增长到原来的两倍时,运行时间大概也增长到原来的两倍。如果一个算法必须处理N个输入(或者产生N个输出), 那么这种情况是最优的。
 NlogN 如果某个算法将问题分解成更小的子问题,独立地解决各个子问题,最后将结果综合起来 (如归并排序,堆排序),运行时间一般就是NlogN。我们找不到一个更好的形容, 就暂且将这样的算法运行时间叫做NlogN。当N=1 000 000时,NlogN大约是20 000 000。当N增长到原来的两倍,运行时间超过原来的两倍,但超过不是太多。
 
N平方
 如果一个算法的运行时间是二次的(quadratic),那么它一般只能用于一些规模较小的问题。这样的运行时间通常存在于需要处理每一对输入 数据项的算法(在程序中很可能表现为一个嵌套循环)中,当N=1000时,运行时间是1 000 000;如果N增长到原来的两倍,则运行时间将增长到原来的四倍。
 N三次方 类似的,如果一个算法需要处理输入数据想的三元组(很可能表现为三重嵌套循环),其运行时间一般就是三次的,只能用于一些规模较小的问题。当N=100时,运行时间就是1 000 000;如果N增长到原来的两倍,运行时间将会增长到原来的八倍。
 2的N次方 如果一个算法的运行时间是指数级的(exponential),一般它很难在实践中使用,即使这样的算法通常是对问题的直接求解。当N=20时,运行时间是1 000 000;如果增长到原来的两倍时,运行时间将是原时间的平方!

 

常见排序算法运行时间比较:

算法最坏情况运行时间平均情况/期望运行时间
插入算法O(n^2)O(n^2)
快速排序O(n^2)O(nlogn)【期望】
归并排序O(nlogn)O(nlogn)
堆排序O(nlogn)O(1)
希尔排序O(n^2)O(n^(3/2))
桶排序O(n^2)O(n)【平均情况】

 

1KB=2^10=1024

1MB=2^20=2^10*2^10=1024*1024约等于1 000 000(百万)

1GB=2^30=2^10*2^10*2^10=1024*1024*1024约等于1 000 000 000 (十亿)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: nlogn的时间复杂度通常用于排序算法中,例如快速排序和归并排序。对于n=100,000的情况,快速排序和归并排序的时间复杂度都是O(nlogn)级别的。 在实际应用中,CPU时间的消耗取决于很多因素,例如CPU的性能、内存带宽、硬盘读写速度等等。因此,很难给出一个准确的估计值。但是可以通过一些经验公式来大致估算。 假设快速排序或归并排序在n=100,000时的CPU时间为t秒,则可以使用下面的公式进行估算: n1logn1 / n2logn2 = t1 / t2 其中,n1和n2分别是两个不同的n值,t1和t2分别是它们对应的CPU时间。假设我们知道n1=100,000时的CPU时间t1是1秒,那么当n2=1,000,000时,可以通过上面的公式估算得到CPU时间t2大约是11.4秒。 需要注意的是,这个估算仅仅是一个大致的值,实际的CPU时间可能会有很大的差异。 ### 回答2: nlogn的复杂度是一种常见的算法时间复杂度,表示算法的执行时间与问题规模n以及n的对数之积成正比。 当n=100,000时,我们可以通过计算来估算大致需要的CPU时间。 nlogn的复杂度意味着执行时间与100,000乘以其对数之积成正比。我们可以使用对数函数的近似值来计算。 首先,计算n的对数值,即log100,000 ≈ 11.51。 然后,将n乘以对数值,即100,000 × 11.51 ≈ 1,151,000。 因此,当n=100,000时,大致需要1,151,000个单位的CPU时间。 需要注意的是,这只是一个粗略的估算,实际的执行时间可能会受到各种因素的影响,如计算机的硬件性能、算法的具体实现等。而且,对于不同的算法,即使具有相同的时间复杂度,实际执行时间也可能有所不同。因此,这个估算只能作为大致参考。 ### 回答3: nlogn的时间复杂度是一种经典的算法复杂度,表示随着输入规模增大,算法运行时间将按照nlogn的比率增长。 假设n=100,000时,我们要估计nlogn的时间复杂度所需要的CPU时间。为了便于计算,我们可以采用近似的方法来估计,即将n取一个较大的底数,如2。这样,我们可以将100,000表示成2的多少次方。 通过计算,我们知道100,000约等于2的17次方。所以,nlogn的复杂度可以近似地看作17 * 100,000 = 1,700,000。 因此,当n=100,000时,大概需要1,700,000个时间单位的CPU时间来运行nlogn复杂度的算法。请注意,时间单位的具体数值取决于CPU的速度和执行环境,上述结果只是一个粗略的估计。 需要注意的是,这只是一个大概的估计值,在实际情况下,可能由于算法的实现方式、编程语言的不同、硬件性能等因素,实际所需要的CPU时间会有所变化。因此,在进行实际应用时,需要根据具体的情况进行实际测试和评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值