随笔分类 -  代码总结

摘要:Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为,空间复杂度为。原理Floyd-Warshall算法的原理是动态规划。设为从到的只以集合中的节点为中间节点的最短路径的长度。若最短路径经过点k,则;若最短路径不经过点k,则。因此,。在实际算法中,为了节约空间,可以直接在原来空间上进行迭代,这样空间可降至二维。(见下面的算法描述)算法描述Floyd-Warshall算法的描述如下:for k ← 1 to 阅读全文
posted @ 2014-03-10 22:30 SangS 阅读(680) 评论(0) 推荐(0) 编辑
摘要:目的:将中缀表达式(即标准形式的表达式)转换为后缀式。例子:a+b*c+(d*e+f)*g转换成abc*+de*f+g*+转换原则1. 遇到操作数, 直接输出2. 操作符的优先级为 () 最大, * / 次之, +- 最小. 遇到操作符后, 假如操作符堆栈为空, 则直接压入操作符, 否则判断当前操作符与栈顶操作符的优先关系, 假如栈顶操作符的优先级大于 等于当前操作符的优先级, 那么弹出栈顶操作符, 持续弹出, 直到栈顶操作符优先级小于当前操作符优先级或栈为空. 最后将当前操作符入栈3. 如果遇到右括号, 那么将栈顶操作符弹出, 持续弹出直到遇到左括号, 左括号弹出但不输出4. 表达式读入完毕 阅读全文
posted @ 2014-03-10 14:47 SangS 阅读(4812) 评论(1) 推荐(0) 编辑
摘要:LCA 分为几种情况1. Binary Search Tree 的 LCA2. Binary Tree with parent pointer3. Binary Tree without parent pointer4. ordinary Tree without parent pointerBinary Search Tree思路1. 对一个节点 node, 假如 n1,n2 均大/小于 node->val, 那么LCA一定在 node->right 分支上2. 若一个大于一个小于, 则 LCA 就是 node 本身3. updown 解法, log(n) 的时间复杂度Binar 阅读全文
posted @ 2014-01-17 21:25 SangS 阅读(586) 评论(0) 推荐(0) 编辑
摘要:二分查找本身并不难, 难的是二分查找的扩展问题1. 假如 target 不在数组中, 输入其应该在的位置2. 找到大于 target 的最小值的位置或小于 target 的最大值的位置3. target 在数组中连续出现多次, 分别找到 target 的最左位置和最右位置int _bsearch(int A[], int m, int n, int target) { if(m > n) ----------------------------- 变量 x return m; --------------... 阅读全文
posted @ 2013-12-11 22:11 SangS 阅读(413) 评论(0) 推荐(0) 编辑
摘要:RMQRMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。——百度百科举个例子:在1 0 4 99 8 5这一串数中求第2个数到第5个数的最小值。有什么办法?最简单的莫过于循环一次,时间为O(N).但如果有许多个询问呢?这时就要用到ST算法了。利用动规预处理出每一段的最值,对于每个询问,只要O(1)的时间便能得出答案。动规如下:f[i][j]表示从第i个位置开始的2^j个数中的最小值。转移方程如下:f[i][j 阅读全文
posted @ 2013-12-03 10:08 SangS 阅读(239) 评论(0) 推荐(0) 编辑
摘要:0/1 背包题目有 N 件物品和一个容量为 V 的背包. 第 i 种物品的的费用是 c[i], 价值是 w[i], 每种物品只有一件, 求解将哪些物品装入背包可使价值总和最大思路令 f[i][v] 表示前 i 件物品放到一个容量为 v 的背包可以获得的最大价值f[i][v] = max( f[i-1][v], f[i][v-c[i]]+w[i] )表示第i件物品不放或者放背包两种情况优化f[i][j] 是一个 N行V列的矩阵, 动态规划的过程就是一行一行的往矩阵里填值第i行仅调用第i-1行的值. 第i行的第v列调用第i-1行的第v1,v2列, 并且v1,v2max 优化for t = 0…Tf 阅读全文
posted @ 2013-11-15 21:32 SangS 阅读(499) 评论(0) 推荐(0) 编辑
摘要:1. Int 在计算机中占 4 Byte, 共 32 位, 最大正数为2147483647, 最小负数为 -21474836482. 正数存储在计算机中的形式为原码,最大正数的十六进制形式为 0X7FFFFFFF. 第一位为7, 二进制位 0111, 最高位为符号位, 所以正数的最高位为03. 负数在计算机的存储形式为补码, 最小负数为0XFFFFFFFF, 第一位是F, 二进制为 1111, 负数的最高位是14. 大学时变反加一背的滚瓜烂熟, -x 可以通过 x 的二进制取反加一最高位置 1 获得5. 溢出. 0X7FFFFFFF + 1 == 0X80000000, 由最大正数变成最小负数 阅读全文
posted @ 2013-11-12 11:32 SangS 阅读(5324) 评论(0) 推荐(0) 编辑
摘要:Leetcode 有几个题目, 分别是 2sum, 3sum(closest), 4sum 的求和问题和 single Number I II, 这些题目难点在于用最低的时间复杂度找到结果2-sumIO :给定 vector 和 target, 从 vector 中寻找两个元素, 其和等于 target思路1. 哈希法. 先假设给定 vector 和 target 都不小于0. 设置 target 个桶(0...target-1), 把 vector 中的元素 e 放到第 (e%target) 个桶中. x+y = target. y 就在第 target- x%target 个桶中. 这样当 阅读全文
posted @ 2013-11-10 21:56 SangS 阅读(545) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示