随笔分类 -  Algorithm

[LeetCode系列]Evaluate Reverse Polish Notation
摘要:Evaluate Reverse Polish NotationValid operators are+,-,*,/. Each operand may be an integer or another expression.Some examples: ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", " 阅读全文

posted @ 2014-04-10 16:56 Jam_01 阅读(151) 评论(0) 推荐(0)

动态规划Dynamic Programming: Rod-Cutting Problem
摘要:动态规划可求最优解问题,但有条件限制,每一层最优解可知。递归动态规划与分治思想有类似之处,但在递归基础上,用一张表存储计算过程中每一层的”最优解“,避免重复计算已经得出的计算结果。Rod-Cutting Problem问题描述:给你一根长n英尺的棒子和一份关于该棒子的价目表如下(其中i = 1,2,3,…,n),请问如何将这根棒子卖出最高的价格,可以对棒子进行切割。thinking path:从i=1 to 10进行枚举尝试,例如,砍1米开始砍,那么剩下的9米就会成为新的”问题“,进行递归。易得递推式:r(i)=max(p[i]+r(n-i)); n为rod总长根据递推式,写出递归伪代码:CU 阅读全文

posted @ 2014-01-22 17:08 Jam_01 阅读(1126) 评论(0) 推荐(0)

递归详解,全排列问题
摘要:递归 Recursion关键词: 递归树(recursion tree)全排列问题问题描述:用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列,如 abc 的全排列: abc, acb, bca, dac, cab, cbathinking path:进行全排列,对每种可能进行枚举,例如123,那么可以1与2互换,1与3互换,以及2与3互换。问题稍微扩展为1234,1分别与2,3,4互换。总结规律就是对某个数,与其后面的数一一进行互换,得出该数在该位置的所有可能。将该数向后“递进”一个位置,例如,1234,1与2互换后为,2134,再用同样的方法尝试 阅读全文

posted @ 2014-01-22 16:34 Jam_01 阅读(2326) 评论(0) 推荐(0)

图,深度,广度优先遍历(三)
摘要:广度优先搜索树BFS算法(队列实现):同深度优先搜索,需要一个ArrayList searchOrders存放路径;一个int[]数组parent存放父亲节点;一个boolean[]数组isVisited标记节点是否被访问过;另外,不同于深度优先搜索,前文中深度优先搜索是以递归形式来实现(其实用栈亦可以实现),广度优先搜索用队列实现,所以需要一个链表LinkedList queue存放处理节点的优先顺序;step1 将起始节点v放入队列,queue.offer(v),并且isVisited[v] = true;step2 队列不为空的情况下,循环: 队首节点u出列 int u = queue. 阅读全文

posted @ 2013-03-31 10:42 Jam_01 阅读(270) 评论(0) 推荐(0)

图,深度,广度优先遍历(二)
摘要:深度优先搜索树DFS算法:step1 选取图中的一个点(Vertex) v,将与该点v相邻的其余所有点存放至neighbours.get(v)中。 isVisited数组用来判断该点是否已遍历,isVisited[v] = true; step2 递归方法 dfs(v,parent,serachOrders); parent为int[]数组,parent[i]表示i点的父亲节点。 searchOrders为一个ArrayList数组,为遍历路径。 每次递归开始,searchOrders.add(v),isVisited[v] = true; 将v所有相邻节点i进行判断,若未被访问过,即!isV 阅读全文

posted @ 2013-03-31 09:59 Jam_01 阅读(246) 评论(0) 推荐(0)

图,深度,广度优先遍历(一)
摘要:What is graph? 图可以这样定义。 G=(V,E)V:图中所有顶点Vertex的集合Vertices;E:图中边的集合;例子:边肯定连着两个顶点,那么一条边可以如此表示{v1,v2}。可以用二维数组表示int[][].或者定义一个Edge类public class Edge { int u; //starting vertex; int v; //ending vertex; public Edge(int u,int v) { this.u = u; this.v = v;}}边的集合就是java.util.ArrayList edges = new java.util.... 阅读全文

posted @ 2013-03-30 23:53 Jam_01 阅读(276) 评论(0) 推荐(0)

java实现快速排序
摘要:算法:方法partition(int[] list,int first,int last)每次分割前确定一个中心位置pivot。大于pivot的放到pivot右边,小于pivot的放到pivot左边。一直分割到所有pivot处理完毕。public class QuickSortDemo { public QuickSortDemo() {} public static void main(String[] args) { int[] intList = {2,3,2,5,6,1,-2,3,14,12}; quickSort(intList,0,intList.length-1); ... 阅读全文

posted @ 2013-03-25 23:01 Jam_01 阅读(254) 评论(0) 推荐(0)

导航