算法_分治策略_找到最大值与最小值
来源:互联网 发布:c#集合和数组的区别 编辑:程序博客网 时间:2024/05/19 15:24
可以用分治算法来解决一个简单的问题。就是从n个元素中找到最大值和最小值。一个最直观的算法是
void StraightMaxMin(Type a[],int n,Type &max,Type &min){ max = min = a[1]; for(int i = 2; i <= n;i++) { if(max < a[i]) max = a[i]; if(min >a[i]) min = a[i]; }}
可以改进一下就是
if(max < a[i]) max = a[i];else if(min >a[i]) min = a[i];
这样就减少了比较次数
分治的概率是将问题不断的分解为规模更小,但实际相同的子问题 所以递归调用是符合这种思想的
比如下面这个算法
void MaxMin(int i,int j,Type &Max,Type &Min){ if(i == j) max = min = a[i]; else if(i = j - 1){ if(a[i]<a[j]) { Max = a[j]; Min = a[i]; } else { Max = a[j]; Min = a[i]; } } else { //如果p不是最小问题 ,就将它分割成最小问题 int mid = (i + j )/2;Type Max1,Min1; MaxMin(i,mid,Max1,Min1); MaxMin(i,mid,Max,Min); if(Max < Max1) Max = Max1; if(Min > Min) Min = Min; } }
那么问题来了?如何将上面这个递归改成非递归的形式呢?
计算机算法C++描述
阅读全文
0 0
- 算法_分治策略_找到最大值与最小值
- 求解最大值与最小值-分治算法
- 分治_数列最大值
- 算法导论_第四章_分治策略
- STL_算法_最小值和最大值(min_element、max_element)
- 高效算法设计_递归与分治(贷款,最大值最小化)
- 分治算法求数组的最大值最小值
- 算法导论_最大子数组问题(分治策略)
- 算法导论_最大子数组问题(分治策略)
- 分治与递归策略_整数划分问题
- 分治与递归策略_二分搜索法
- java基础_day0018_数组_ArrayUtil_最大值_最小值_交换_复制_平均值_求和
- 一、算法_分治算法
- 遗传算法_求最大值
- 算法学习_分治法
- 寻找数组中最大值和最小值—分治算法
- 同时求数组的最大值和最小值的分治算法
- 棋盘覆盖_分治策略_java实现
- 关于金额转化为大写的小程序
- 《 软件工程(C编码实践篇)》心得
- React虚拟DOM的原理&&为什么使用虚拟DOM
- CF
- caffe配置
- 算法_分治策略_找到最大值与最小值
- 关于unity c#脚本中将string字符串进行分割
- Qt 中获取摄像头图像数据的方法
- CRC校验
- Nlog配置会话和文件同时写入
- 最新Windows远程可被利用漏洞Nessus检查插件
- 218.m1多种颜色显示排行
- 如何做到4小时以上的长时间精神专注?
- Educational Codeforces Round 23 F. MEX Queries(离散化+线段树)