算法
luckxu
Any problem in computer science can be solved by another layer of indirection.
展开
-
问题分解,分治与动态规划
问题分解就是通过对问题进行分解,从而将问题分解成有限个问题规模更小的子问题,从而达到问题求解的过程或者方法。问题分解是一种从问题规模出发来进行问题求解的方法,一般来讲,问题的规模与问题的复杂性密切相关,通过降低问题的规模可以达到减低问题复杂性,从而易于问题的求解。分治策略和动态规划都是这种思想。其实问题分解是问题求解思维中的一种基本的思维方式。当然问题能通过分解来获得答案,最关键的地方就是原问题的转载 2013-12-23 15:09:39 · 948 阅读 · 0 评论 -
动态规划详解
终于来到了算法设计思想中最难,也最有趣的这部分,在去年的google笔试中,7道算法设计题有2道动态规划(Dynamic Programming)。看了这么久的算法,这部分也是唯一感觉到了比较难的地方,从这篇文章开始,将花连续的篇幅来讨论一些动态规划的问题。这包括书上介绍过的计算二项式系数,Warshall算法求传递闭包,Floyd算法求完全最短路径,构造最有二叉查找树,背转载 2013-12-23 17:18:48 · 589 阅读 · 0 评论 -
n个数顺序入栈后的出栈顺序
解法①:递推法有n个位置,现在任意选定一个数,比如1,那么1可以在1-->n的任意一个位置上。假设1在第k的位置上,显然在1的前面有k-1个数,并且这些数的数值为2-->k,在1后面有n-k个数。用f(k)表示k个数顺序入栈后的出栈顺序,则f(n)就是我们要求的最终答案。而f(n)这个事件又可以分解成1在1-->n这n个位置上出现的n种情况,于是根据加法/乘法原理,易得f(n)is Cat转载 2014-04-05 17:37:14 · 1128 阅读 · 0 评论 -
表达式求值(前缀、中缀、后缀)
为了简化问题,关注算法,本文的讨论基于以下三点:1. 只考虑 + - * / ( ) 这几个基本运算符,且是二元操作2. 运算数只考虑 0-9,这10个简单的数,方便从string中取出来3. 输入的表达式没有语法错误 【背景知识】中缀表示法(Infix expression):操作符位于两个操作数中间,算术表达式的常规表示法。只用于二元操作符的情况,而且需要用括号和优先规转载 2014-01-04 19:25:42 · 1234 阅读 · 0 评论