谁能教我怎么求数组里面的最大(最小值)

yzx714 2011-08-10 04:59:22
谁能教我怎么求数组里面的最大(最小值)?
分治可以O(logN),还有其他更快(至少一样快)的算法没有?
求高手…………
...全文
379 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
WizardOz 2011-08-10
  • 打赏
  • 举报
回复
分治不是一种算法……
懒得打字 2011-08-10
  • 打赏
  • 举报
回复
O(N)吧,这个可以数学证明的……
shyoshyo 2011-08-10
  • 打赏
  • 举报
回复
预处理不算时间,

那么对于回答询问最小的时间复杂度是多少
shyoshyo 2011-08-10
  • 打赏
  • 举报
回复
LZ 想说的其实是……

数组a[1..N]已知

有若干此询问区间 [L,R] 的最值
yzx714 2011-08-10
  • 打赏
  • 举报
回复
好吧我错的…………上面的分治确实是O(N)的
shyoshyo 2011-08-10
  • 打赏
  • 举报
回复
补充一下
pengzhixi 2011-08-10
  • 打赏
  • 举报
回复
你这里还分治干什么呢?直接遍历一遍就OK了。我就不信直接遍历一遍会比你这个更耗时。
fiveyes 2011-08-10
  • 打赏
  • 举报
回复
不过确实没有看到谁说过logN什么的,都是强调如果同时找最大值和最小值的话,分治法能够减少若干的比较次数。而如果仅找最大值,或者最小值,分治法似乎并没有明显的优势。
war10811 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 luciferisnotsatan 的回复:]
引用 8 楼 war10811 的回复:

引用 4 楼 luciferisnotsatan 的回复:
引用 3 楼 war10811 的回复:

引用 2 楼 luciferisnotsatan 的回复:
乱序的怎么做到logN??

有序的还用找么...

有序的是不用找
我问的是,无序的,不把每个数看一遍,怎么知道多大。
都看一遍就 O(n)了

LZ提到的分治法……
[/Quote]
好吧,想当然了,没有的
yzx714 2011-08-10
  • 打赏
  • 举报
回复
void find(int st, int ed, int &maxx, int &minn)
{
if(st == ed){
maxx = minn = cow[st];
return;
}
int maxl, maxr, minl, minr, m;
m = (st+ed)/2;
if(st<=m)
find(st, m, maxl, minl);
if(ed >= m+1)
find(m+1, ed, maxr, minr);
maxx = max(maxl, maxr);
minn = min(minl, minr);
}
这个方法会不会效率不够?
luciferisnotsatan 2011-08-10
  • 打赏
  • 举报
回复
或者给出算法名也行。自己google
luciferisnotsatan 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yzx714 的回复:]

引用 9 楼 babilife 的回复:

表3.1 本章所有算法的复杂度
-----------------------------------------------------------------
算 法 最好情况 平均情况 最坏情况
-----------------------------------------------------------……
[/Quote]
估计9楼想说的和我一样
给你个无序数组,怎么用logn的时间找到最大的
luciferisnotsatan 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 war10811 的回复:]

引用 4 楼 luciferisnotsatan 的回复:
引用 3 楼 war10811 的回复:

引用 2 楼 luciferisnotsatan 的回复:
乱序的怎么做到logN??

有序的还用找么...

有序的是不用找
我问的是,无序的,不把每个数看一遍,怎么知道多大。
都看一遍就 O(n)了

LZ提到的分治法就是o(logN)的
[/Quote]
那你说下过程吧。无序怎么用分治?
yzx714 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 babilife 的回复:]

表3.1 本章所有算法的复杂度
-----------------------------------------------------------------
算 法 最好情况 平均情况 最坏情况
-----------------------------------------------------------------
快速排序 ……
[/Quote]您的意思是先弄个nlogn(n,对于部分情况)的排序,然后二分查找?有创意!
至善者善之敌 2011-08-10
  • 打赏
  • 举报
回复
表3.1 本章所有算法的复杂度
-----------------------------------------------------------------
算 法 最好情况 平均情况 最坏情况
-----------------------------------------------------------------
快速排序 O(NlogN) O(NlogN) O(N2)
归并排序 O(N) O(NlogN) O(NlogN)
基数排序 O(N) O(N) O(N)
线性查找 O(N)
折半查找 O(NlogN)
哈希查找 O(N/M)*
健树查找 O(1)**
-----------------------------------------------------------------

貌似你想得到 比如有序的序列当中查找一个数字,折半查找的情况下的平均查找次数就是 O(logN)
war10811 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luciferisnotsatan 的回复:]
引用 3 楼 war10811 的回复:

引用 2 楼 luciferisnotsatan 的回复:
乱序的怎么做到logN??

有序的还用找么...

有序的是不用找
我问的是,无序的,不把每个数看一遍,怎么知道多大。
都看一遍就 O(n)了
[/Quote]
LZ提到的分治法就是o(logN)的
fiveyes 2011-08-10
  • 打赏
  • 举报
回复
太深奥了,说实话百度到的分治算法俺都看不太懂,学习了。
pengzhixi 2011-08-10
  • 打赏
  • 举报
回复
无序的至少是O(N).
Memory秀 2011-08-10
  • 打赏
  • 举报
回复
确实要遍历啊 不然怎么对比每个数!
luciferisnotsatan 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 war10811 的回复:]

引用 2 楼 luciferisnotsatan 的回复:
乱序的怎么做到logN??

有序的还用找么...
[/Quote]
有序的是不用找
我问的是,无序的,不把每个数看一遍,怎么知道多大。
都看一遍就 O(n)了
加载更多回复(3)

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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