
算法导论学习札记
文章平均质量分 58
lime1991
这个作者很懒,什么都没留下…
展开
-
最大子数组的两种实现源码
算法导论讲分治策略这一章提到了一个经典的问题,求一个数组的非空连续子数组的最大值,数组的元素可正、可负、可为零。方法一:暴力求解法简单尝试数组每对值的组合求出最小值,时间复杂度O(n2)。方法二:分治策略 时间复杂度O(nlgn)。将数组划分为两个规模尽量相等的子数组求解。比如找到子数组的中央位置mid,然后考虑求解两个规模尽量相等的子数组A[low...mid]和A[mid+1,原创 2014-11-02 16:18:05 · 621 阅读 · 1 评论 -
钢条切割-动态规划
Problem给定一段长度为n英寸的钢条和一个价格表pi(i=1,2....)p_i(i=1,2....),求钢条切割方案使销售收益rnr_n最大。注意:切割没有成本,若长度为nn英寸的钢条价格pnp_n足够大,最优价格可能完全不用切割。solution对于rn(n>=1)r_n(n>=1),总可以用更短的钢条的最优收益切割来描述它: rn=max(pn,r1+r(n−1),r2+r(n−2)..原创 2015-09-15 10:42:19 · 561 阅读 · 0 评论 -
棋盘移动最短路径问题(Dijkstra算法)
Problem给定一个矩阵A[m][n] ,矩阵上各点的值为移动到该点的代价,每次可以从该点的对角线或直线方向移动一格,求从点A[0][0]移动到点A[m-1][n-1]的最小代价。 比如矩阵,求从左上角的1移动到右下角的1的最小代价。 1 3 0 0 1 2 1 2 0 0 2 3 1 1 1 0 0 1 1 1 1 2 1 1 3 0 0 1 0 1 solution本题可以原创 2015-08-21 23:36:52 · 9240 阅读 · 0 评论 -
m-图着色问题(贪心解法)
problem图的m色优化问题:给定无向连通图G,为图G的各顶点着色, 使图中任2邻接点着不同颜色,问最少需要几种颜色。所需的最少颜色的数目m称为该图的色数。图的m色判定问题: 给定无向连通图G和m种颜色。用这些颜色为图G的各顶点着色.问是否存在着色方法,使得G中任2邻接点有不同颜色。若图G是可平面图,则它的色数不超过4色(4色定理). 4色定理的应用:在一个平面或球面上的任何地图能够只用4原创 2015-08-20 11:55:18 · 14166 阅读 · 0 评论 -
求解1-10000区间内的素数
转载自:http://blog.youkuaiyun.com/lxmky/article/details/7913885 问题: 求出所有1-MAX之间的素数分析: 我们知道如何判断一个数是否为素数,判断number是否可以被1到sqrt(num)之间数整除,如果存在被整除的,不是素数,否则就是素数。但是,如果用这种方法来计算,时间复杂度会非常高,我们采用另一种更好的方法——筛选法。筛选法直观上比较好理解转载 2015-09-05 10:47:15 · 648 阅读 · 0 评论 -
static用法详解
转自http://www.cnblogs.com/dc10101/archive/2007/08/22/865556.html在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)隐藏当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内转载 2015-09-04 11:18:34 · 552 阅读 · 0 评论 -
KMP算法-字符串匹配
本博客内容参照http://blog.youkuaiyun.com/v_july_v/article/details/7041827Problem假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢?如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有:如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配转载 2015-09-02 14:55:02 · 582 阅读 · 0 评论 -
Fibonacci数列与跳台阶问题
Problem一个台阶总共有n级,一次可以跳一格,也可以跳两格,问总共有多少种跳法。Solution以F(n)表示n级台阶的跳法总数。 n=1时,只有一种跳法,一次跳一格。 n=2时,有两种跳法。跳法1:跳两步每次一格;跳法2:跳一步两格。 当n较大时,从最后一步到达第n格只有两种方法。跳法1:最后一步跳一格,所以需要知道F(n-1).跳法2:最后一步跳二格,需要知道F(n-2)。因此问题退化原创 2015-09-03 22:09:41 · 417 阅读 · 0 评论 -
Bad horse(图的广度遍历解法)
ProblemAs the leader of the Evil League of Evil, Bad Horse has a lot of problems to deal with. Most recently, there have been far too many arguments and far too much backstabbing in the League, so much原创 2015-08-17 21:53:50 · 860 阅读 · 0 评论 -
寻找最小k个数或者寻找第K大的数字
Problem输入n个整数,找出最小的前k个数字(或者第K大的数字),例如输入4,5,1,6,2,7,3,8这八个数,则输出最小4个数是1,2,3,4.Solution AO(n)解法,需要修改输入数组。 可以采用快速排序Partition函数来解决这个问题。快排的Partition函数所完成的功能是将小于pivot的数放在Partiton函数返回值的左边,大于pivot的数放在Partiton函原创 2015-08-31 23:01:57 · 737 阅读 · 0 评论 -
字符串全排列问题(递归回溯)
ProblemA:无重复字符输入一个字符串,打印出该字符串的所有排列,所有字符串不相同。SolutionA问题拆解,将求排列问题看成两步: step1:求所有可能出现在第一个位置的字符,即把第一个字符与后面的字符依次交换依次。 step2:固定第一个字符,求后面所有字符的排列。此时,仍将问题分解成两部分:后面的第一个字符,以及这个字符后的所有字符。然后将第一个字符依次与后面的所有字符交换。指导最原创 2015-08-25 22:16:59 · 816 阅读 · 0 评论 -
字符串组合问题(无重复)
Problem输入一个字符串,输出该字符串中字符的所有组合,任意两个字符不相同。举个例子,如果输入”abc”,它的组合有a、b、c、ab、ac、bc、abc。Solution输入n个字符,则这n个字符能分别构成程度为1~n的组合,因此需要一个循环来求不同长度的组合。 在求n个字符的长度为m的组合的时候,可以将n个字符分成两部分:第一个字符和其余所有字符。若第一个字符加入组合,则在剩下n-1个字符中原创 2015-08-27 11:45:55 · 1150 阅读 · 0 评论 -
N皇后问题(回溯递归)
Problem八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。Solution八个皇后中任意两个不能处在同一行,所以每个皇后必须占据一行,及一列。我们采用回溯法的思想去解。首先摆放好第1行皇后的位置,然后在不冲突的情况下摆放第2行皇后的位置。到第i行时,如原创 2015-08-27 10:02:38 · 1881 阅读 · 0 评论 -
#pragma pack()用法详解
1.什么是对齐?为什么要对齐?现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有原创 2015-03-22 11:20:15 · 34184 阅读 · 10 评论 -
计数排序
计数排序假设输入的n个元素中每一个的都是[0,k]闭区间上的一个整数,当k=O(n)时,排序的运行时间是Θ(n).1.基本思想计数排序的基本思想是:对每一个输入元素x,当确定小于x的元素个数时,就可以把元素x放到它所在输出数组的位置上了。比如:若有7个元素小于x,则x放在第8个位置上,当有重复元素时可对本方案略作修改。假设输入是一个数组A[0...n-1],A.length=n,需要额原创 2015-01-23 21:09:20 · 517 阅读 · 0 评论 -
快速排序(三数取中法)源码
快速排序是一种最坏情况时间复杂度为Θ(n2)。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好:它的期望时间复杂度是Θ(nlgn),而且Θ(nlgn)中隐含的常数因子非常小。另外,它还能够进行原址排序。1.快速排序的描述快排也使用了分治的思想,对数组A[p..r]进行快速排序的三步分治过程如下:分解:数组A[p..r]划分为两个(可能为空)原创 2015-01-21 15:25:01 · 4999 阅读 · 0 评论 -
堆排序
堆排序的时间复杂度是O(nlgn),堆排序具有空间原址性:任何时候都只需要常数个额外的元素空间存储临时数据。1.堆二叉堆是一个数组,可视为一个近似的完全二叉树,除最底层外,该树是完全充满的,而且是从左到右填充。堆的数组A包括两个属性,A.length给出数组元素的个数,A.heap-size表示有多少个堆元素存储在数组中。虽然A[1...A.length]可能都存储数据,但只有A[1...原创 2015-01-14 17:04:27 · 513 阅读 · 1 评论 -
背包问题
ProblemN件物品和一个容量为V的背包,第i个物品的价值为w[i]w[i],体积为c[i]c[i],求解哪些物品装入背包价值最大。 0-1背包:没见物品只有一个,要么装入要么不装入。Solutiondp问题,定义递归式opt[i][j]opt[i][j]为前i个物品在容量为j的情况下的最大装载价值。 对于第i个物品来说,它只有两种选择:装入或者不装入。定义递归式:opt[i][j]=max(原创 2015-08-31 20:53:04 · 758 阅读 · 0 评论