解题报告算导上给了提示 用归并排序的代码进行修改来实现 思考后不难看出 归并排序的合并(merge)过程中 对数据进行了比较1)如果数组L 的当前某元素大于数组R的当前元素,那么 由于L数组是有序的(升序) 因此 L数组当前元素以及他后面的所有元素都与R数组构成逆序对2)我们的排序并不影响逆序对的数...
分类:
其他好文 时间:
2014-08-06 22:31:22
阅读次数:
451
分治思想: 分治算法的思想就是 对于某些特定种类的问题 如果问题的规模很小,那么就直接解决,如果问题的规模比较大,那么就把问题先分解为规模小的但是问题相同的子问题 ,并且不断分解直到规模足够小,再递归地解决这些问题 如果原问题可分割成k个子问题,1 File Name: mergesort....
分类:
其他好文 时间:
2014-08-06 18:34:32
阅读次数:
311
这个问题是算法导论的一个示例,为了讲解分治。 1 //算法导论中的分治策略版本 2 3 4 #include 5 using namespace std; 6 int maxCrossSum(int a[], int begin, int mid, int end) 7 { 8 int ...
分类:
其他好文 时间:
2014-08-06 01:48:10
阅读次数:
195
本章主要是算法知识的基础讲解,介绍了循环不变式,几个简单的排序算法,递归分治算法等内容。
1、循环不变式
循环不变式主要用来说明算法的正确性,那么什么是循环不变式呢,其实就是在循环过程中,一些元素数据必须保持的一些性质,例如在插入排序中,数组为A,必须保证三个性质:
(1) 初始化:在循环开始之前,循环不变式是成立的,即:A[0]是有序的,A[1...n-1]是无序的。
(2) 保持:在循...
分类:
其他好文 时间:
2014-08-05 15:53:01
阅读次数:
220
一、概念: 在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以寄简单的直接求解,原问题的解即子问题的解的合并。 这个技巧是很多高校算法的基础,如排序算法(快速排序、归并排序)、...
分类:
其他好文 时间:
2014-08-05 15:33:29
阅读次数:
178
前言
这一强大的算法却有一个不相关的名字,常常引起混淆。实际上创造者Richard Bellman把这名字作为保护伞来掩人耳目的,从此延续下来。说它强大是因为应用范围很广,在优化算法中,在图像融合中,在很多实际问题中都有其身影。还因为使用它往往能收到奇效,当你尝试了分治,尝试了贪心仍然不能满意的时候...
分类:
其他好文 时间:
2014-08-05 13:30:29
阅读次数:
337
【题意描述】给定一串数据,划分成m段,并把每段内的数据相加,使得m段数据中的最大值最小。【思路分析】这里很多人可能考虑用DP,但是会超时。那么根据DP与分治的联系,我们可以联想到运用二分法,对所求最大值进行二分,直到所划分区间的数目等于m段即停止。这里在确定二分的区间有点技巧,首先low肯定是整个数...
分类:
其他好文 时间:
2014-08-05 13:29:59
阅读次数:
217
问题描述:有n个运动员进行循环赛,要求设计满足一下要求的日程表1、 每两人必须比赛一次且只比赛一次2、 每个选手每天只能比赛一次3、 要求比赛时间尽可能短(即n为偶数时比赛n-1天,n为奇数时比赛n天)一、分治法算法思想,先算n/2的日程表,然后将循环赛日程表左上复制到右下,左下复制到右上,得到n的...
分类:
其他好文 时间:
2014-08-05 10:41:39
阅读次数:
300
题目:你要去自己买个组装机,现在给你每个零件的类别、名字、价钱、级别,以及你有的钱数,
求能组装成的机器的最大级别(机器的所有零件中的最小级别,即最小值最大)。
分析:分治、dp。看起来很像是dp,不过本题可以利用二分求解(我这里二分套二分了)。
首先,将所有的零件按照级别递减排序,此时装机的总代价递减(比原来多了新的参考零件);...
分类:
其他好文 时间:
2014-08-05 00:43:28
阅读次数:
301
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.方法:为了使BST高度平衡,要找链表中的中值作为当前根节点。/** * Defin...
分类:
其他好文 时间:
2014-08-04 20:37:47
阅读次数:
194