摘要: 关于最大字段和,已有4中方法对其进行求解,现对其进行扩展,得到两个扩展的问题: 一、最大子矩阵问题 1、问题描述:给定一个m行n列的子矩阵A,试求出矩阵A的一个子矩阵,使其各元素之和为最大。 2、求解策略:对该问题,如果用穷举法求解,时间复杂度将为O(m2n2),利用其为最大字段和问题的扩展,将其划归成最大字段和问题,然后再用最大字段和的最优方法进行求解,则可降低时间复杂到O(m2n) 。即先长度为m的维度上求出第i行到第j行每一个的元素和存储到一个n维的数组中,再对该数组进行最大字段和的动态规划法求解,求出结果。 3、程序如下所示:float maxSum2(float (*a)... 阅读全文
posted @ 2013-04-22 15:39 busyfruit 阅读(1611) 评论(0) 推荐(0) 编辑
摘要: 一、对于最接近0的字段和求解1、最接近0就相当于字段和的绝对值最小,此时问题等价于求绝对值最下的字段和。针对此,可以设置一个绝对值结构体,结构如下:struct absVal { float value; //绝对值 bool flag; //标志位,true表示为非负数,否则为负数}; 这样,可以将最简单的扫描算法改写成如下:简单法求最接近0的字段和float maxSum_easy(int n, int* a, int& besti, int& bestj) //最简单的方法,复杂度为O(n^3){ int i = 0, j = 0, k = 0, sum =... 阅读全文
posted @ 2013-04-17 15:19 busyfruit 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 求最大字段和的算法很好的讲解了算法设计技术。根据《编程珠玑》上的描述,简单实现各种不同的算法。如下:1、最简单的方法:对所有满足0≤i≤j<n的(i,j)整数进行迭代。对每个整数对,都计算x[i..j]的总和:简单方法int maxSum_easy(int n, int* a, int& besti, int& bestj) //最简单的方法,复杂度为O(n^3){ int maxSoFar = 0, i = 0, j = 0, k = 0, sum = 0; for (i = 0; i < n; ++i) for ( j = i; j < n; ++j) . 阅读全文
posted @ 2013-04-15 00:27 busyfruit 阅读(468) 评论(0) 推荐(1) 编辑
摘要: 时间限制: 1000ms 内存限制: 256MB描述Alice和Bob还有其他几位好朋友在一起玩传话游戏。这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位。然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位……以此类推,直到倒数第二位告诉Bob。两位游戏者在传话中,不能让其他人听到,也不能使用肢体动作来解释。最后,Bob把他所听到的话告诉大家,Alice也把她原本所想的话告诉大家。由于传话过程中可能出现一些偏差,游戏者越多,Bob最后听到的话就与Alice所想的越不同。Bob听到的话往往会变成一些很搞笑的东 阅读全文
posted @ 2013-04-09 20:19 busyfruit 阅读(818) 评论(0) 推荐(0) 编辑
摘要: 希尔排序(Shell's Sort)又称缩小增量排序,类属于插入排序。考虑到直接插入排序得一下特点: (1)在待排序数基本有序情况下排序效率大大提高; (2)在n很小时,其排序效率也很高。 基于以上考虑,对直接插入排序进行改进,并得出希尔排序。其基本思想为:先将整个待排序记录序列分割成若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序时”,再对全体记录进行一次插入排序。 这里的子序列是通过一个增量得到的,每一次赋予不同的增量,则得到不同的子序列组(分别对子序列进行直接插入排序就称作一次希尔插入排序,注意,实际代码中并不是依次排好一个自序列之后再排下一个这样效... 阅读全文
posted @ 2013-04-07 11:11 busyfruit 阅读(576) 评论(0) 推荐(0) 编辑
摘要: 做实验需要大量数据,便用C内置的rand()伪随机数生成函数生成了一定的伪随机数。现在的问题是对于超大范围的随机数生成还是一个问题。留待以后解决。代码如下:#include <iostream>#include <time.h>#include <math.h>#include <cstdlib>#include <fstream>using namespace std;int main(){ srand(time(NULL)); int n,n1,i=0; cout << "输入待排序数组的个数:"; 阅读全文
posted @ 2013-04-07 10:43 busyfruit 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 参考维基百科:http://zh.wikipedia.org/wiki/64%E4%BD%8D%E5%85%8364位 http://zh.wikipedia.org/wiki/32%E4%BD%8D%E5%85%83%E6%87%89%E7%94%A8%E7%A8%8B%E5%BC%8F32位应用程序 阅读全文
posted @ 2013-04-07 09:41 busyfruit 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 一、 无符号数和有符号数1.无符号数计算机中的数均存放在寄存器中,通常称寄存器的位数为机器字长。所谓的无符号数即没有符号的数,在寄存器中的每一位均可用来存放数值。而当存放有符号位时,则留出位置存放“符号”。因此,在机器字长相同时,无符号数与有符号数所对应的数值范围是不同的。以机器字长16位为例子,无符号数的范围为0~(216-1=65535),而有符号数的表示范围为(-32768=2­­­15)~(+32767=215-1)(此数值对应原码表示)。机器中的有符号数是用补码表示的。2.有符号数 对于有符号数而言,符号的正负机器是无法识别的,而在机器中是用0,1分别表 阅读全文
posted @ 2013-04-07 09:13 busyfruit 阅读(2755) 评论(0) 推荐(0) 编辑
摘要: C++是一种复杂的编程语言,其中充满了各种微妙的陷阱。在C++中几乎有数不清的方式能把事情搞砸。幸运的是,如今的编译器已经足够智能化了,能够检测出相当多的这类编程陷阱并通过编译错误或编译警告来通知程序员。最终,如果处理得当的话,任何编译器能检查到的错误都不会是什么大问题,因为它们在编译时会被捕捉到,并在程序真正运行前得到解决。最坏的情况下,一个编译器能够捕获到的错误只会造成程序员一些时间上的损失,因为他们会寻找解决编译错误的方法并修正。那些编译器无法捕获到的错误才是最危险的。这类错误不太容易察觉到,但可能会导致严重的后果,比如不正确的输出、数据被破坏以及程序崩溃。随着项目的膨胀,代码逻辑的复杂 阅读全文
posted @ 2013-04-06 17:39 busyfruit 阅读(337) 评论(0) 推荐(0) 编辑
摘要: The "Mahalanobis distance" is a metric (a rule for calculating the distance between two points) which is better adapted than the usual "Euclidian distance" to settings involving non spherically symmetric distributions. It is more particularly useful when multinormal distributions 阅读全文
posted @ 2013-03-22 13:30 busyfruit 阅读(963) 评论(0) 推荐(0) 编辑