求最大和最小元素

ernestm 2006-04-06 10:19:33
用非递归写算法,对n个元素求最大最小值,要求该算法再最坏情况下时间复杂度<=3n/2,辅助空间O(1),谢谢!
...全文
471 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ernestm 2006-04-11
  • 打赏
  • 举报
回复
ok!谢谢
寻开心 2006-04-10
  • 打赏
  • 举报
回复
何谓分治, 把一个大问题,归结成为相同的子问题,分别解决

如果数据是偶数,先比较前两个,然后初始化nMax和nMin, index=2
如果数据是奇数,把nMax和nMin都初始化成第一个数据就是了, index=1

for (; index<maxlen; index+=2 )
{
a = array[index];
b = array[index+1]
if ( a>b ) ...
else ....
}

你可以把这个解法也当作是分治,算法重要的是思想,而不是形式
上面的方法当中,把大问题拆解成为22一堆的小问题,也可以说是分治

分治不等于一定是折半查找似的递归方式, 方式可以多种多样的

ernestm 2006-04-08
  • 打赏
  • 举报
回复
分治法也可以不用递归的方法的呀,那样是不是可以不超过O(1),我也只是想知道这个
treeroot 2006-04-07
  • 打赏
  • 举报
回复
时间复杂度 3n/2的常数没有意思也就是 o(n) 及时比较2n次也不会影响复杂度
LoveCreatesBeauty 2006-04-07
  • 打赏
  • 举报
回复
楼上的朋友说的不错,学习楼上的知识。
寻开心 2006-04-07
  • 打赏
  • 举报
回复
把n个数字,遍历一遍
每次拿出两个,比较大小 这样的比较用了 n/2 次
然后把大的数,用来相互比较出最大值
把小的数,用来相互比较出最小值
这个比较就是n次

合计就是3n/2次

O(1)是指用固定的空间实现,不是说只用1个空间
在上述算法当中,只需要临时变量保存当前的最大和最小数值而已
treeroot 2006-04-07
  • 打赏
  • 举报
回复
应该不难吧,遍历一下不就可以了
jp1984 2006-04-07
  • 打赏
  • 举报
回复
查以前的帖子..讨论过n次了
phoenixinter 2006-04-07
  • 打赏
  • 举报
回复
happy_888说的完全正确
jp1984 2006-04-07
  • 打赏
  • 举报
回复
分治怎么可能不超过O(1).递归要考虑栈空间.
ernestm 2006-04-07
  • 打赏
  • 举报
回复
分治法的思想我也知道,你说的这些我也知道,也可以把递归的改成非递归的,但就是辅助空间我还没有想好怎么不超过(O(1))。
不知道你有什么好的方法,很高兴和你讨论问题。谢谢
寻开心 2006-04-07
  • 打赏
  • 举报
回复
分治法也是一样的

把数分成两队,各自找出最大最小的, 然后大和大比大,得到最大;小和小比小,找到最小
对于分开的每个对,用同样的方法
这个是一个递归的过程,(可以写成非递归的形式),然后计算各个部分的计算量,结果是一样的
ernestm 2006-04-07
  • 打赏
  • 举报
回复
你这种是对的,这样比较次数刚好是3n/2
再请问一下你能不能用分治法呢,同时也要满足上面的要求 
谢谢了
寻开心 2006-04-07
  • 打赏
  • 举报
回复


假定当前的最大数值是nMax,最小数值是nMin, 这两个是临时变量

以后每从数组当中拿出两个数,a和b
如果 a>b 这种比较是 n/2 次
如果 a>nMax 那么 nMax = a; 这里直接和临时的最大最小数值比较,不需要其他空间保存
如果 b<nMin 那么 nMin = b;
else
如果 b>nMax 那么 nMax = b;
如果 a<nMin 那么 nMin = a;
ernestm 2006-04-07
  • 打赏
  • 举报
回复
把n个数字,遍历一遍
每次拿出两个,比较大小 这样的比较用了 n/2 次 //这样不就有n/2个最大值保存吗?
然后把大的数,用来相互比较出最大值 //你说怎么保存这些最大值和最小值哪?
把小的数,用来相互比较出最小值
这个比较就是n次

合计就是3n/2次

O(1)是指用固定的空间实现,不是说只用1个空间 //这个我知道,但直接按你上面的方法要临时变量就不是O(1)了吧?
在上述算法当中,只需要临时变量保存当前的最大和最小数值而已

33,008

社区成员

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

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