解决(solve)一个问题的多个不同算法在性能上的比较,主要方法是算法时间复杂度分析,输入数据元素数量为n时,算法的时间边界是O(n),O(nlgn),平方算法O(n#2)还是O(n#3)。然而算法效率是算法操作(operate)或处理(treat)数据的重复次数最小,“优化”算法时间边界。算法效率的研究目标是程序数据,与算法分析并不相同,而且可用在程序设计上。
例题选自《编程珠玑》第8章,算法设计技术。
这个问题是一维模式识别(人工智能)中的一个问题。
输入有n个元素的向量,输出连续子向量中的最大和。向量是数学的概念,用数组表示向量,输出连续元素序列和的最大值。问题的关键是元素允许负值,若不允许负值,最大和是数组,规定所有元素是负数时,子向量最大和定义为0。
一维数组d[0..9]={31,-41,59,26,-53,58,97,-93,-23,84}。子向量最大和d[2..6]的和,187。
需要解决的关键问题是明晰子向量d[i,,j]的边界(i,j),怎么将数组分组。因此不同的分组方法组成不同的算法。主要有三次方或二次方算法,分治法--树形数据算法,O(n)算法。
3.1 三次方与二次方算法
(1)三次方算法。对任意0 <= i <= j < n,(i,