随笔分类 - Data Structure & Algorithm
The crucial
摘要:真的没有想到,以前不曾关注的归并排序原来是这么的复杂。其实,快速排序、堆排序以及归并排序都用到了递归思想,难点就是找出递归形式和递归出口。然而,归并排序还是实际中能够应用到的一种算法--分布式处理。因为,现实中,数据量会比较大,超出一台计算机的内存上限是可能的,这就需要将数据分配到若干台计算机上并行计算。这和现在正在学习的hadoop又不谋而合,因此,现在来学一下归并排序。对于归并排序,因为所选的数据结构不同,它的实现也不大相同,但原理上还是一样的。都是先将数据一分再分,直到有序为止(也就是每个分项中只有一个元素的时候),然后两两开始合并,直至合并为一个有序项为止。下面先看看它的数组结构下的实
阅读全文
摘要:问题:求两字符串的最长公共子序列。当然,要注意的是并没要求连续,连续的话就是子串了。如:s1 = "abc"; s2 = "adc";substring = "ac";解这题的思想,就是运用已知结果来计算未知。在对字符是否相等进行判断时,需要记下当前公共子序列长度,为以后判断使用:如开始判断s1[i] 与 s2[j]是否相等:当两个字符相等时,显然,当前子序列长度 c[i][j] = c[i-1][j-1] +1当两个字符不相等时,s1[i]与s2[j]的公共子序列就是 s1[i-1]与s2[j]、s1[i]与s2[j-1]这两对字符
阅读全文
摘要:题目比较简单,就是在一个数组里面找出最长的非增子序列,要注意,并不要求连续。如:6,7,2,4,5,3最长的非增子序列是7,5,3而不是5,3.动态规划的思想就是自底向上,求解问题:如:f(n) = f(n-1) + f(n-2); f(1) = a; f(2) = b;运用已知结果来求得未知。代码如下:#include#includevoid NoIncreaseSubSeq(int data[], int length){ int (*status[100]), maxlength[100],templength = 0; //遍历整个数组 for(int j = 0...
阅读全文
浙公网安备 33010602011771号