动态规划(dynamic programming)是通过组合子问题的解而解决整个问题的。与分治法不同的是,动态规划算法对每个子子问题只求解一次,将其结果保存在一张表中。
动态规划通常应用于最优化问题。
动态规划算法的设计可以分为如下4个步骤:
描述最优解的结构;递归定义最优解的值;按自底向上的方式计算最优解的值;由计算结果构造一个最优解。
第1~3步构成问题的动态规...
分类:
编程语言 时间:
2014-11-01 13:33:27
阅读次数:
210
二分查找(Binary Search)算法使用了分治法(Divide and Conquer)来不断缩小查找范围,并充分利用已知的信息将查找时间复杂度降低到 O(logn)。
分类:
其他好文 时间:
2014-11-01 00:49:49
阅读次数:
394
使用备忘录模式(Memoization Pattern)提高性能
这个模式说白了,就是将需要进行大量计算的结果缓存起来,然后在下次需要的时候直接取得就好了。因此,底层只需要使用一个Map就够了。
但是需要注意的是,只有一组参数对应得到的是同一个值时,该模式才有用武之地。
在很多算法中,典型的比如分治法,动态规划(Dynamic Programming)等算法中,这个模式运用的十分...
分类:
编程语言 时间:
2014-10-30 10:23:31
阅读次数:
207
递归优化
很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer)。但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError。处理这个问题,我们可以使用一种叫做尾调用(Tail-Call Optimization)的技术来对递归进行优化。同时,还可以通过暂存子问题的结果来避免对子问题的重复求解,这个优化方法叫做备忘录(Memoizatio...
分类:
编程语言 时间:
2014-10-29 10:54:45
阅读次数:
395
分治,即分而治之,把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。...
分类:
编程语言 时间:
2014-10-28 15:33:02
阅读次数:
194
动态规划法和分治法类似,它也是将大问题分解成子问题求解,求最优解,不同的是,如果分解的子问题有很多是相同的,采用分治法相同的子问题会求解多次,很影响效率;动态规划法呢,它会保存已解决的子问题的答案,再有相同的子问题直接用保存的答案就行了,节省了很多计算时间。...
分类:
编程语言 时间:
2014-10-28 15:32:58
阅读次数:
172
先说一下,这个归并排序是我自己的一些想法。简单地浏览了一下书本(《算法:C语言实现》(第三版)),实现方法并不一致。但是这个算法我测试了一下,还行。归并排序:分治法的思路。把一个待排序的数组(arr)分成两半(arrA和arrB)进行归并排序。在归并排序的过程中,arrA再分成两半……这个过程直到子...
分类:
编程语言 时间:
2014-10-26 22:35:26
阅读次数:
341
高速排序因为排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被採用,再加上高速排序思想----分治法也确实有用,因此非常多软件公司的笔试面试,包含像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也经常出现高速排序的身影。总的说来,要直接默写出高速排序...
分类:
编程语言 时间:
2014-10-26 19:43:17
阅读次数:
205
高速排序因为排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被採用,再加上高速排序思想----分治法也确实有用,因此非常多软件公司的笔试面试,包含像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也经常出现高速排序的身影。总的说来,要直接默写出高速排序...
分类:
编程语言 时间:
2014-10-26 11:28:28
阅读次数:
248
这三种算法总的来说,刚开始看的时候不知道怎么下手,但是看多了也会有那么一点儿感觉。分治法是这三种算法里面都有的思想,动态规划和贪心都是将问题分解成子问题求解,但动态规划里面的子问题都带有联系,而贪心算法里面的子问题都相对独立,唯一不同的是,贪心算法要首先想出一个解决方案来构造求解最优解的过程。...
分类:
其他好文 时间:
2014-10-23 20:49:49
阅读次数:
241