一、基本描述
类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
Those who cannot remember the past are condemned to repeat it!——George Santayana
那些记不清过去的人注定要重蹈覆辙!——乔治·桑塔耶拿
动态规划通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。
动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量:一旦某个给定子问题的解已经算出,则将其记忆化存储(在计算机科学中,记忆化是一种提高程序运行速度的优化技术。通过储存大计算量函数的返回值,当这个结果再次被需要时将其从缓存提取,而不用再次计算来节省计算时间。 记忆化是一种典型的时间存储平衡方案),以便下次需要同一个子问题解之时直接查表。这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。
摘要:本文介绍线程池的好处、类图和核心类——ThreadPoolExecutor,以及使用Executor创建线程池。
摘要:本文介绍组件FutureTask、ForkJoin、BlockingQueue阻塞队列。
摘要:本文介绍重入锁(ReentrantLock)、读写锁(ReentrantReadWriteLock)、票据锁(StempedLock)以及如何选择锁。
摘要:本文介绍AQS。AQS全名:AbstractQueuedSynchronizer,是并发容器J.U.C(java.lang.concurrent)下locks包内的一个类。