这两个算法哪个的速度快?

transposon 2008-01-08 09:44:18
已知有实现同一功能的两个算法,其时间复杂度分别为O(2^n)和O(n^10),假设现实计算机可连续运行的时间为100天,又每秒可执行基本操作为10^5次。试问在此条件下,这两个算法可解决问题的规模(即n的范围)各为多少?哪个算法更合适?试说明理由

不能用电脑和计算器,这题该咋做?
...全文
192 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dan1980 2008-01-09
  • 打赏
  • 举报
回复
动笔算一算就出来了:

100天=100*24*60*60秒
又,一秒钟可执行的基本操作为10^5次
则,100天可执行的基本操作为100*24*60*60*(10^5)=864000000000次

分别解方程:

2^x=864000000000 ---- (1)

x^10=864000000000-----(2)

由方程(1)可估计出x在39-40之间,所以算法的最大规模为39
由方程(2)可估计出x在15-16之间,所以算法的最大规模为15

所以在当前条件下,用算法一更好。

但是,算法一的复杂度是指数级的,算法二的复杂度是乘方级(10次方)的,通常指数级的增长速度快于乘方级,虽然2^n一开始增长较慢,但速度更快,所以一旦n增长到某个临界点之上,算法一耗费的时间最终将更多。至于这个临界点是多少,算起来太麻烦了,可能要借助计算机。
老紫竹 2008-01-09
  • 打赏
  • 举报
回复
问题关键在于,
1 2^n 和 n^10 复杂度相同的点在哪里?
2 给定的时间内,是不是到了那个复杂度了。
DirectRay 2008-01-08
  • 打赏
  • 举报
回复
肯定是后面一个好啊。你随着n的取值的增长,一旦超过10,那么空间复杂度就上去了啊。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧