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

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)。
但这两个算法哪个更好些?
...全文
126 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
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)层,虽然时间复杂度是一样的,空间复杂度第二个好.

33,006

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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