随笔分类 -  算法导论

1
摘要:// prim.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std; typedef int Vertex; #define NotAVertex 0 #define INF 65536 #define numOfVertex 4 //定义链表节点/////////////////... 阅读全文
posted @ 2017-04-18 17:30 lineaar 阅读(189) 评论(0) 推荐(0)
摘要:最小生成树是连接图中所有顶点代价最小的树,通用算法是对于最小生成树的一个顶点子集A,设全体顶点集合为V,则跨越集合{A,V-A}中最小的的边为安全边,可以加入到最小生成树中。 Kruskal算法采用了不相交的集合森林,把每一个顶点初始化为一个单元素的集合,我再定义了一个边的结构,用于连接两个不同的集 阅读全文
posted @ 2017-04-18 15:56 lineaar 阅读(212) 评论(0) 推荐(0)
摘要:// disjoint_set.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #define noFind -1 using namespace std; typedef struct node *Position; typedef struct node *Head; //链表节点,对于头节点,key存放的的是链表的长度,普通节点... 阅读全文
posted @ 2017-04-17 19:03 lineaar 阅读(279) 评论(0) 推荐(0)
摘要:// Graph2.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std; typedef int Vertex; #define NotAVertex 0 #define INF 65536 //定义链表节点//////////////////////////////////// t... 阅读全文
posted @ 2017-04-13 23:25 lineaar 阅读(263) 评论(0) 推荐(0)
摘要:硬币找零问题描述: 现存在一堆面值为 V1、V2、V3 … 个单位的硬币,问最少需要多少个硬币才能找出总值为 T 个单位的零钱?假设这一堆面值分别为 1、2、5、21、25 元,需要找出总值 T 为 63 元的零钱。 很明显,只要拿出 3 个 21 元的硬币就凑够了 63 元了。 基于上述动态规划的 阅读全文
posted @ 2017-04-09 22:20 lineaar 阅读(1283) 评论(0) 推荐(0)
摘要:一个问题可以用动态规划法求解的先决条件: 1、最有子结构性质:当问题的最优解包含了其子问题的最优解时,成该问题具有最有子结构性质。 2、重叠子问题:每次产生的子问题并不总是新问题,有些子问题被反复计算多次。 满足了以上两个条件的问题可以考虑用动态规划法求解,他是一种自底向上的递归算法。 问题描述: 阅读全文
posted @ 2017-04-08 22:25 lineaar 阅读(342) 评论(0) 推荐(0)
摘要:问题: 有一个需要使用每个资源的n个活动组成的集合S= {a1,a2,···,an },资源每次只能由一个活动使用。每个活动a都有一个开始时间和结束时间,且 0<= s < f 。一旦被选择后,活动a就占据半开时间区间[s,f]。如果[s,f]和[s,f]互不重叠,则称两个活动是兼容的。该问题就是要 阅读全文
posted @ 2017-04-07 21:41 lineaar 阅读(600) 评论(0) 推荐(0)
摘要:给定一副彩色图像,它由一个mxn的像素数组A[1..m,1..n]构成,每个像素是一个红绿蓝(RGB)亮度的三元组。假定我们希望轻度压缩这幅图像。具体地,我们希望从每一行中删除一个像素,使得图像变窄一个像素。但为了避免影响视觉效果,我们要求相邻两行中删除的像素必须位于同一列或相邻列。也就是说,删除的 阅读全文
posted @ 2017-04-05 22:58 lineaar 阅读(714) 评论(0) 推荐(0)
摘要:Stewart教授是一家公司总裁的顾问,这家公司计划一个公司聚会。这个公司有一个层次式的结构;也就是说,管理关系形成一棵以总裁为根的树。人事部给每个雇员以喜欢聚会的程度来排名,这是个实数。为了使每个参加者都喜欢这个聚会,总裁不希望一个雇员和他(她)的直接上司同时参加。 Stewart教授面对一棵描述 阅读全文
posted @ 2017-04-01 23:41 lineaar 阅读(362) 评论(0) 推荐(0)
摘要:编辑距离问题: 编辑距离,又称Levenshtein距离,是一种字符串之间相似度计算的方法,指两个字符串之间,由一个转换成另一个所需的最少编辑次数。有效的编辑操作为单个字符的替换、插入和删除。对给定两个字符串S、T,将S转换成T所需要的删除,插入,替换操作的数量就叫做S到T的编辑路径。而最短的编辑路 阅读全文
posted @ 2017-03-31 20:36 lineaar 阅读(534) 评论(0) 推荐(0)
摘要:问题: 考虑整齐打印问题,即在打印机上用等宽字符打印一段文本。输入文本为n个单词的序列,单词长度分别为l1,l2,……,ln个字符。要求将此段文本整齐打印在若干行上,每行最多M个字符。若每行包含第i到底j(i<=j)个单词,且单词间隔为一个空格符,则行尾的额外空格符数量为M-j+i-(li+……+l 阅读全文
posted @ 2017-03-30 23:25 lineaar 阅读(908) 评论(0) 推荐(0)
摘要:问题 给定平面上n个点作为输入,求出连接所有n个点的最短巡游路线。 J.L.Bentley建议将问题简化,限制巡游路线为双调巡游,即从最左边的点开始,严格向右前进,直至最右边的点,然后调头严格向右前进,直至回到起始点。 设计一个O(n^2)时间的最优双调巡游路线算法,可以认为任何两点的x坐标均不同, 阅读全文
posted @ 2017-03-29 23:13 lineaar 阅读(1197) 评论(0) 推荐(0)
摘要:问题: 求给定输入字符串的最长回文子序列(子序列不要求连续)。 用LPS(i,j)表示从字符串第i个字符到第j个字符的最长回文子序列的长度,字符串的长度为n,则要求LPS(1,n),则: LPS(i,j)=0; i>j; LPS(i,j)=1; i==j; LPS(i,j)=LPS(i+1,j-1) 阅读全文
posted @ 2017-03-29 21:30 lineaar 阅读(211) 评论(0) 推荐(0)
摘要:// zuichanghuiwen.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using namespace std; void palindrome(string str) { stack sta; //翻转字符串 for (int i... 阅读全文
posted @ 2017-03-29 09:45 lineaar 阅读(227) 评论(0) 推荐(0)
摘要:// zuiyousousuoerchashu.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; double p[] = { 0,0.15,0.1,0.05,0.10,0.2 }; double q[] = { 0.05,0.10,0.05,0.05,0.05,0.10}; double ... 阅读全文
posted @ 2017-03-24 17:25 lineaar 阅读(378) 评论(0) 推荐(0)
摘要:// zuidazixulie.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include using namespace std; char b[10][10]; int c[10][10]; void Lcs(string x, string y) { int m = x.length(); int n =... 阅读全文
posted @ 2017-03-24 14:43 lineaar 阅读(129) 评论(0) 推荐(0)
摘要:#include "stdafx.h" #include using namespace std; #define MAXSIZE 100 int bofei_bottom(int n) { int f[MAXSIZE]; f[0] = 0; f[1] = 1; for (int i = 2; i <= n; i++) { f[i] = f[i - 1] + f[i - 2]; ... 阅读全文
posted @ 2017-03-22 19:00 lineaar 阅读(557) 评论(0) 推荐(0)
摘要:// dongtaiguihua.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using namespace std; int num[11]; #define c 2; int p[] = { 0,1,5,8,9,10,17,17,20,24,30 }; ////自顶向下递归实现///////... 阅读全文
posted @ 2017-03-22 11:38 lineaar 阅读(183) 评论(0) 推荐(0)
摘要:#include "stdafx.h" #include #include #include using namespace std; int RANDOM(int p, int r) { srand((unsigned)time(NULL)); return (rand() % (r - p + 1)) + p; } int partition(int a[], int p, ... 阅读全文
posted @ 2017-03-17 22:35 lineaar 阅读(144) 评论(0) 推荐(0)
摘要:#include "stdafx.h" #include using namespace std; //是权位数列,B是输出数列,D是原数列,k是范围 void COUNTING_SORT(int A[], int B[],int D[], int k) { int C[10]; for (int i = 0; i = 0; i--) { B[C[A[i] - 1] - 1] = D[... 阅读全文
posted @ 2017-03-16 21:33 lineaar 阅读(136) 评论(0) 推荐(0)

1