文章分类 -  编程之美

斐波那契数列--编程之美(待完善)
摘要:题目:Fibonacci解法三:分治策略:注意到Fibonacci数列是二阶递推数列,所以存在一个2*2的矩阵A,使得:(F[n] F[n-1])=(F[n-1] F[n-2])*A,结合F[n]=F[n-1]+F[n-2]求解,可得:A=1 1,1 0(上面是1 1,下面为1 0),由上面的矩阵递推公式有:(F[n] F[n-1])=(F[n-1] F[n-2])*A=(F[n-2] F[n-3])*A^2=...=(F[1] F[0])*A[n-1],或.剩下的问题就是求解矩阵A的方幂。A^n=A*A*...*A,最直接的解法就是通过n-1次乘法得到结果。但是当n很大时,比如1 000 阅读全文
posted @ 2011-04-15 18:46 tzc_yujunyong 阅读(1580) 评论(0) 推荐(0)
字符串移位包含的问题--编程之美3.1
摘要:假设字符串s1=AABCD,s2=CDAA,判断s2是否可以通过S1的循环移位得到字符串包含。如 s1移两位: 1.ABCDA->2.BCDAA 则此时包含了 S2="CDAA"s1的长度应该是大于s2的长度解题思路:分解s1的循环移位得到:AABCD, ABCDA, BCDAA, CDAAB,.....如果我们将前面移走的字符串保留下来,则有:AABCD, AABCDA, AABCDAA, AABCDAAB, AABCDAABC, AABCDAABCD这里,我们可以发现,实际对s1的循环移位得到的字符串实际为s1s1。那么我们判断s2是否可以通过s1循环移位得到包含 阅读全文
posted @ 2011-04-06 13:46 tzc_yujunyong 阅读(281) 评论(0) 推荐(0)
求数组的子数组之和的最大值--编程之美2.14(待完善)
摘要:例题:Max Sequence《编程之美》中的解法三:nStart表示从a[i]到数组末尾中包含a[i]的和最大的一段数组元素之和。nAll表示从a[i]到数组末尾中和最大的一段数组元素之和。代码1:View Code int max(int a, int b){ return a>b ? a : b;}int MaxSum(int *a, int n){ int nStart=a[n-1]; int nAll=a[n-1]; for (int i=n-2; i>=0; i--) { nStart=max(a[i], nStart+a[i]); nAll=max(nStart, n 阅读全文
posted @ 2011-04-05 15:19 tzc_yujunyong 阅读(355) 评论(0) 推荐(0)
计算字符串的相似度--编程之美3.3
摘要:许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把“a”替换为“b”); 2.增加一个字符(如把“abdd”变为“aebdd”); 3.删除一个字符(如把“travelling”变为“traveling”); 比如,对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加/减少一个“g”的方式来达到目的。上面的两种方案,都仅需要一 次 。把这个操作所需要的次数定义为两个字符串的距离,而相似度等于“距离+1”的倒数。也就是说,“abcdefg”和“abcd 阅读全文
posted @ 2011-04-03 20:16 tzc_yujunyong 阅读(9888) 评论(4) 推荐(3)