给定长度为N的字符串S,构造长度为N的字符串T,起初T是空串,反复从S的头部或者尾部删除一个字符,加到T的尾部。目标是构造字典序尽可能小的T。尝试如下贪心算法:不断取S头部和尾部较小的字符放到T的尾部。考虑S头部和尾部字符相同的情况。有如下算法:按照字典序比较S和将S反转后的字符串S‘;如果S较小,...
分类:
其他好文 时间:
2014-09-30 20:28:10
阅读次数:
207
贪心算法。需要计算分别以每个字母结尾的且每个字母出现的次数不超过k的字符串,我们设定一个初始位置s,然后用游标i从头到尾遍历字符串,使用map记录期间各个字母出现的次数,如果以s开头i结尾的字符串满足要求,则把结果增加i-s+1。否则的话向前移动s,不断维护map,直到s指向的字母与i相同,从而满足...
分类:
其他好文 时间:
2014-09-29 15:45:31
阅读次数:
202
克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程能够用一个图来表示。这里的图的选择借用了Wikipedia上的那个。很清晰且直观。首先第一步,我们有一张图,有若干点和边例如以下图所看到的:第一步我们要做...
分类:
其他好文 时间:
2014-09-26 14:04:38
阅读次数:
245
上一篇博文中讲了Dijkstra算法,这次博文要讲解的是floyd算法,其中Dijkstra算法是属于贪心算法,而floyd算法是动态规划的一个算法:
具体的算法如下:
其中一个矩阵是用来存放最短路径的,另外一个矩阵是用来存放前驱顶点的;
#include
using namespace std;
#define Max 5
#define Infinity 65535
void ma...
分类:
其他好文 时间:
2014-09-25 11:17:09
阅读次数:
208
初看真以为是网络流呢,实际上应是贪心算法,最简洁的算法:/*ID: qq104801LANG: C++TASK: job*/#include #include #include #include #include #include #include using namespace std;const...
分类:
其他好文 时间:
2014-09-18 13:05:03
阅读次数:
180
前面介绍线性回归,但实际中,用线性回归去拟合整个数据集是不太现实的,现实中的数据往往不是全局线性的 当然前面也介绍了局部加权线性回归,这种方法有些局限 这里介绍另外一种思路,树回归 基本思路,用决策树将数据集划分成若干个子集,然后再子集上再用线性回归进行拟合 决策树是种贪心算法,最简单典型的决策树算...
分类:
其他好文 时间:
2014-09-12 18:41:13
阅读次数:
350
克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程可以用一个图来表示。这里的图的选择借用了Wikipedia上的那个。非常清晰且直观。
首先第一步,我们有一张图,有若干点和边。
第一步我们要做的事情就是将所有的边的长度排序,用排序的结果作为我们选择边的依据。这里再次体现了贪心算法的思想。资源...
分类:
其他好文 时间:
2014-09-11 15:23:52
阅读次数:
197
你可以Lambda表达式去创建匿名的方法。但很多时候,这份方法可能是已经存在的,这时你可以使用函数引用。这样能够使代码结构更清晰。
我们知道,贪心算法里面,一个常见的步骤是排序。假设有下面的背包类:
class Package{
private int weight;
// ignore setter and getter
}
我们有个背包数组 Package[] ...
分类:
编程语言 时间:
2014-09-10 22:31:21
阅读次数:
239
萨鲁曼的军队(Saruman's Army) 代码(C)本文地址:http://blog.csdn.net/caroline_wendy题目: 直线上有N个点, 每个点, 其距离为R以内的区域里, 必须带有标记的点, 本身的距离为0.尽可能少的加入?标记点, 至少要有多少点被加上标记?贪心算法, 从...
分类:
其他好文 时间:
2014-09-10 12:09:40
阅读次数:
220