TAOCP-1.2.10_求极大值
1. 算法M(求极大值)
给定\(n\)个元素\(X[1], X[2], ..., X[n]\), 我们将求\(m\)和\(j\)使得:
\(m=X[j]=max_{1 \le i \le n}X[i]\),其中\(j\)是满足这个关系的最大下标。
M1. [初始化] 置 \(j \gets n, k \gets n - 1, m \gets X[n]\)。(在算法期间,我们将有\(m = X[j] = max_{k < i \le n}X[i]\)。)
M2. [全部试过了?] 如果\(k = 0\),则算法终止。
M3. [比较] 如果\(X[k] \le m\),则转到 M5。
M4. [改变m] 置\(j \gets k, m \gets X[k]\)。(这个m的值是一个新的当前的极大值。)
M5. [减少k] k 减 1 并返回 M2
1.1 C实现
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>#define ARRAY_SIZE 16int32_t cycles;int maximum(int x[], int n)
{int j, k, m;j = n;k = n - 1;m = x[n];while (k) {cycles++;//printf("x[%d] = %d, j = %d, k = %d, m = %d\n", k, x[k], j, k, m);if (x[k] <= m) {k--;if (k == 0)break;} else {j = k;m = x[k];}}return m;
}int main(void)
{int array[ARRAY_SIZE];int i;int ret;srand((unsigned)time(NULL));for (i = 0; i < ARRAY_SIZE; i++) {array[i] = random() % 1000;}ret = maximum(array, ARRAY_SIZE - 1);printf("Array is: \n");for (i = 0; i < ARRAY_SIZE; i++) {if ((i > 0) && (i % 8) == 0)printf("\n");printf("%d\t", array[i]);}printf("\n\nThe maximum of array is %d, cycles is %d\n", ret, cycles);return 0;
}
1.2 运行结果:
# make
gcc -Wall -O3 -g m.c -o m
# ./m
Array is:
540 475 412 567 458 974 837 205
461 958 227 659 105 658 110 110The maximum of array is 974, cycles is 18
1.3 性能分析
当n很大时,算法M的执行次数近似于\(\ln n\)
转载于:https://www.cnblogs.com/jelly-wd/p/4169912.html
TAOCP-1.2.10_求极大值相关推荐
- matlab极大值点个数,求一组数的极大值个数
已知一组数,如下所示,目标是求每行数的极大值个数,Matlab中有固有的函数求极大值个数吗?求各位大虾指点指点! 36 137 135 114 131 159 224 252 332 509 737 ...
- Python 求函数极小值、极大值点
目录 Python 求函数极小值.极大值点 一.求极小值 1.不含参数的函数 2.含参数的函数 二.求极大值 Python 求函数极小值.极大值点 一.求极小值 1.不含参数的函数 例:求f(x)=s ...
- hdu5105给你一个方程,让你求极值(直接暴力)
题意: 给你一个方程f[x] = abss(a * x * x * x + b * x * x + c * x + d); 然后给你各个参数还有x(-100<x<100)的取值 ...
- 如何用法向量求点到平面距离_支持向量机(SVM)
最近完成的一个项目用到了SVM,之前也一直有听说支持向量机,知道它是机器学习中一种非常厉害的算法.利用将近一个星期的时间学习了一下支持向量机,把原理推了一遍,感觉支持向量机确实挺厉害的,尤其是核函数变 ...
- 用计算机求最大似然估计,用Excel软件实现最大似然估计数值计算的方法_刘文卿.pdf...
用Excel软件实现最大似然估计数值计算的方法_刘文卿.pdf 2006 年 9 月 数理统计与管理 Sep , 2006 第 25 卷 第 5 期 Application of Statistics ...
- matlab零交叉块,[MATLAB基础] 关于心电信号奇异点与其小波变换模极大值对的零交叉点的关系?请教下面程序应该如何理解哈...
关于心电信号奇异点与其小波变换模极大值对的零交叉点的关系?请教下面程序应该如何理解哈 %**************************************求正负极大值对*********** ...
- 逻辑回归损失函数推导及求导
优点 实现简单: 分类时计算量非常小,速度很快,存储资源低: 缺点 容易欠拟合,一般准确度不太高 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分 损失函数 逻辑 ...
- matlab中如何检测极大值和极小值?
Matlab中sign函数: Matlab中已知自变量和因变量,怎么求极大值和极小值? 若diff(y)<0时,sign(diff(y))=-1,要想让y点为极大值,前面diff(y)要大于0, ...
- matlab求函数极值
如果求极大值,可以把原函数加个负号.
最新文章
- 【转】根据起止日期+时间取数
- CEO 赠书 | 节省 50% 的人生,终止“瞎忙”式勤奋
- kibana7.x操作
- 如何利用CNKI句子检索功能提高研究效率
- Python--day46--MySQL视图
- 图像工程CH4 频域图像增强
- java中布尔值做比较_Java中的三态布尔值
- mysql select in 不存在返回0_MySQL索引优化看这篇文章就够了!
- win7系统文件夹属性在哪打开
- java文件服务器_JavaWeb项目架构之NFS文件服务器
- linux中断调用spi函数,基于Linux的ARM与FPGA SPI驱动,中断函数调用spidev_sync_read(),出现异常...
- mysql ssh通道_详解如何通过SSH通道来访问MySQL
- iOS开发经验总结(上)
- 大学计算机基础发送邮件,东南大学《大学计算机基础》实验16邮件合并.pdf
- 苹果妙控鼠标二代(Magic Mouse 2 )如何连接到 Window 10系统
- 分析电脑控制的丹佛机场行李系统
- Dialog_xml制作——博客地址
- 红米note3android驱动,为何我的红米NOTE3 装不了USB驱动
- 内网穿透的概念及解决方案
- java 第三方接口安全性_提供接口给第三方使用,需要加上校验保证接口的安全性(rsa加密解密)...