• 全部
  • 问答

大家来看看哪个算法比较好?

claudehotline 四川旷谷信息工程有限公司 服务器端工程师  2008-04-03 01:57:41
Algorithm bla1(int[] a, n)
// a是拥有n个元素的整型数组
if (n=1) return a[0]
else
{
tmp = bla1(a, n-1);
if tmp <= a[n-1] return tmp
else return a[n-1]
}

Algorithm bla2(int[] a, l, r)
// a是拥有n个元素的整型数组
if (l=r) return a[l]
else
{
tmp1 = bla2(a, l, floor((l+r)/2));
tmp2 = bla2(a, floor((l+r)/2)+1, r);
if tmp1 < tmp2 return tmp1
else return tmp2
}

这两个算法都是从数组中选出一个最小的数, 时间复杂度都是O(N)。
但这两个算法哪个更好些?
...全文
88 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
claudehotline 2008-04-07
楼上的答案是对的
回复
CodeSpy 2008-04-03
第一个好。因为第2个比第1个多近一倍的自身调用次数,而且第2个在分割数组的时候还要耗费些时间。
回复
medie2005 2008-04-03
第2个。
回复
claudehotline 2008-04-03
两位高手到底哪个好啊?
回复
medie2005 2008-04-03
to fire_woods:
事实确实是那样。但我觉得这两个算法的空间复杂度应该是一样的,当然在实际中,算法2的空间使用应该还是O(log(n))。

算法2是一个DFS过程,递归树的高度最大就是O(log(n)).
回复
claudehotline 2008-04-03
不太理解递归是怎么占用堆栈的,第二个算法的两个recursive call是用一个堆栈呢还是分别各用一个?
回复
fire_woods 2008-04-03
但是递归退出后,对应的节点空间就被释放了.
实际上递归就是一个堆栈,第二种方法栈的深度是log(n)的.
回复
claudehotline 2008-04-03
我也觉得两个算法的空间复杂度是一样的~~
回复
medie2005 2008-04-03
都是差不多的吧.
第二个算法的递归树的高度虽然是O(log(n)),因此,递归树的节点就有O(n)个,于是,空间复杂度也是O(n)的.
回复
fire_woods 2008-04-03
第二个算法好,
第一个算法递归 n层, 第二个算法只要c*log(n)层,虽然时间复杂度是一样的,空间复杂度第二个好.
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-03 01:57
社区公告
暂无公告