随笔分类 -  算法导论

语言C/C++
摘要:#include using namespace std; struct node{ char data; node* lchild; node* rchild; }; //给定一棵二叉树的先序遍历序列和中序遍历序列,重建这棵二叉树 char pre[] = {'A', 'B', 'D', 'E', 'C', 'F'}; //先序遍历序列 char in[]=... 阅读全文
posted @ 2018-02-12 13:46 dear_diary 阅读(400) 评论(0) 推荐(0)
摘要:Max Sum. The following is an instance. a) (-2,11,-4,13,-5,-2) 思路: 最大子段和:给定一个序列(元素可正可负),找出其子序列中元素和最大的值。 1.令b[j]表示以位置 j 为终点的所有子区间中和最大的一个 2.子问题:如j为终点的最大子 阅读全文
posted @ 2017-06-01 17:34 dear_diary 阅读(657) 评论(0) 推荐(0)
摘要:Longest Common Subsequence (LCS). The following are some instances. a) X: xzyzzyx Y: zxyyzxz b) X:MAEEEVAKLEKHLMLLRQEYVKLQKKLAETEKRCALLAAQANKESSSESFIS 阅读全文
posted @ 2017-06-01 17:32 dear_diary 阅读(761) 评论(0) 推荐(0)
摘要:Matrix-chain product. The following are some instances. a) <3, 5, 2, 1,10> b) <2, 7, 3, 6, 10> c) <10, 3, 15, 12, 7, 2> d) <7, 2, 4, 15, 20, 5> 矩阵链乘积: 阅读全文
posted @ 2017-06-01 17:29 dear_diary 阅读(2130) 评论(0) 推荐(1)
摘要:使用分治思想: 分解:数组A[p..r]被划分成两个(可能为空)子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每一个元都小于等于A[q],而A[q]也小于等于A[q+1..r]中的每个元素。其中,计算下标q也是计划过程的一部分。 解决:通过递归调用快速排序,对于数组A[p. 阅读全文
posted @ 2017-06-01 17:26 dear_diary 阅读(282) 评论(0) 推荐(0)
摘要:伪代码: 其中参数说一个数组A[1..n],包含长度为n的要排序的一个序列。该算法原址排序输入的数,在任何时候,最多只有其中常数个数字存储在数组外面。 性能分析: 时间复杂度: 最好情况: O(n) 最坏情况和平均情况: O(n2) 额外空间: O(1) 稳定 适用情况:n小的数组 Java代码: 阅读全文
posted @ 2017-05-18 19:56 dear_diary 阅读(235) 评论(0) 推荐(0)
摘要:回溯法是一个既带有系统性又带有跳跃性的搜索算法。它在包含问题的所有解的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一结点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树搜索,逐层向其祖先结点回溯;否则 ,进入该子树,继续按深度优先策略搜索。 阅读全文
posted @ 2017-05-17 10:12 dear_diary 阅读(12122) 评论(0) 推荐(1)
摘要: 阅读全文
posted @ 2017-05-14 11:46 dear_diary 阅读(1305) 评论(0) 推荐(0)
摘要:分解:将原问题划分成形式相同的子问题,规模可以不等,对半或2/3对1/3的划分。 解决:对于子问题的解决,很明显,采用的是递归求解的方式,如果子问题足够小了,就停止递归,直接求解。 合并:将子问题的解合并成原问题的解。 这里引出了一个如何求解子问题的问题,显然是采用递归调用栈的方式。因此,递归式与分 阅读全文
posted @ 2017-05-14 11:21 dear_diary 阅读(10876) 评论(0) 推荐(0)
摘要:public class Merge_Sort { public static void main(String[] args) { int[] A ={3,1,2,4,6,7,5,3}; Merge_sort(A,0,7); for(int i=0;iR[j]) { A[k]... 阅读全文
posted @ 2017-04-22 21:18 dear_diary 阅读(251) 评论(0) 推荐(0)
摘要:矩阵链乘问题描述 给定n个矩阵构成的一个链<A1,A2,A3,.......An>,其中i=1,2,...n,矩阵A的维数为pi-1pi,对乘积 A1A2...An 以一种最小化标量乘法次数的方式进行加全部括号。 注意:在矩阵链乘问题中,实际上并没有把矩阵相乘,目的是确定一个具有最小代价的矩阵相乘顺 阅读全文
posted @ 2017-04-15 13:38 dear_diary 阅读(2529) 评论(0) 推荐(0)
摘要:基本概念 堆: (二叉)堆数据结构是一种数组对象。它可以被视为一棵完全二叉树,树中每个结点与数组中存放该结点值的那个元素对应。 两种二叉堆: 最大堆:所有节点的子节点比其自身小的堆。 最小堆:所有节点的子节点比其自身大的堆。 堆排序: 堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一 阅读全文
posted @ 2017-04-05 16:22 dear_diary 阅读(344) 评论(0) 推荐(0)