社区
数据结构与算法
帖子详情
求最大和最小元素
ernestm
2006-04-06 10:19:33
用非递归写算法,对n个元素求最大最小值,要求该算法再最坏情况下时间复杂度<=3n/2,辅助空间O(1),谢谢!
...全文
487
15
打赏
收藏
求最大和最小元素
用非递归写算法,对n个元素求最大最小值,要求该算法再最坏情况下时间复杂度<=3n/2,辅助空间O(1),谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)了吧?
在上述算法当中,只需要临时变量保存当前的最大和最小数值而已
JAVA近百种算法大全
最近找到的JAVA近百种算法大全 分享一下 java算法大全,有近100多种常见算法的源代码,是学习JAVA算法的难得资料,需要的童鞋来下载吧!
利用分治算法
求
数组的
最大
元素
和
最小
元素
【问题描述】利用分治算法
求
一个n运算数组的
最大
元素
和
最小
元素
【输入形式】输入两行,第一行为一个整数n,第二行为数组的n个
元素
; 【输出形式】输出两个数,一个是数组
最大
元素
的值,一个是数组
最小
元素
的值,中间用空格隔开 【样例输入】 8 8 3 2 9 7 1 5 4 【样例输出】 9 1 【样例说明】 数组中有8个
元素
,
最大
值为9,
最小
值为1
【算法分析与设计】
求
最大
、
最小
元素
的平均比较次数
上机实验–
求
最大
、
最小
元素
的的平均比较次数 编写一个程序,随机产生20以内的10个整数,设计一个高效算法寻找其中
最大
最小
元素
,统计
元素
间比较次数。并调用该算法执行10次并
求
元素
的平均比较次数。 #include<stdio.h> #include<stdlib.h> #include<time.h> #define MAXN 10 void randa(int ...
算法设计与分析 李春葆 1_5_1 统计
求
最大
、
最小
元素
的平均比较次数
算法设计与分析 李春葆 1_5_1 统计
求
最大
、
最小
元素
的平均比较次数 题目要
求
题目分析功能代码(C++) 题目要
求
编写一个实验程序,随机产生10个1~20的整数,设计一个高效算法找其中的
最大
元素
和
最小
元素
,并统计
元素
之间的比较次数。 调用该算法执行十次并
求
元素
的平均比较次数。 题目分析 开辟一个大小为11的数组,然后利用rand()函数生成随机数存入数组,从1号地址空间开始存,0号地址单元做检查哨。 可以利用if…else…结构只比较次数,而不排序,我是用来排序算法,将数组进行升序排序,即可得到
最大
编写一组
求
数组中
最大
最小
元素
的函数
题目内容:编写一组
求
数组中
最大
最小
元素
的函数。该组函数的原型为int imax(int array[], int count); //
求
整型数组的
最大
元素
int imin(int array[], int count); //
求
整型数组的
最小
元素
其中参数count为数组中的
元素
个数,函数的返回值即为
求
得的
最大
或
最小
元素
之值。要
求
同时编写出主函数进行验证。输入格式:第一个数为数组
元素
的个数(1-...
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章