算法
文章平均质量分 73
Joe_c
这个作者很懒,什么都没留下…
展开
-
程序设计--迷宫问题
问题描述:给定一个大小为N*M的迷宫。迷宫有通道和墙壁组成,每一步可以向邻接的上下左右的通道移动。请求出从起点到终点所需要的最小步数。 例如,N为10, M为10,输入的迷宫如下表示,其中S表示起点,G表示终点,"."表示通道,“#”表示墙壁 #S######.# ......#..# .#.##.##.# .#.....原创 2015-01-27 09:13:52 · 4732 阅读 · 0 评论 -
动态规划与背包问题
动态规划(Dynamic Programming)是算法的设计方法之一,通常用于最优化问题,此类问题可能有多种可行解,而我们希望找出一个最优的解(最大或最小)。动态规划的设计可以分为以下几个步骤: 1.描述最优解的结构 2.递归的定义最优解的值 3.按自底向上的方式计算最优解的值 4.由计算出的结果构造一个最优解原创 2015-01-29 12:47:47 · 1588 阅读 · 2 评论 -
最长单增子序列问题
问题描述:有一个长为n的数列a0,a1,a2........a(n-1)。请求出这个序列中最长的单增子序列的长度。单增子序列的定义是:对于任意的 i 这个问题就是著名的最长单增子序列(LIS)问题。对于这道问题,我们可以利用动态规划来进行求解:假设dp[i]表示以a[i]为末尾的最长单增子序列的长度,则在得到dp[i]时,我们可以这样做:初始化dp[i]为1,利用一个j变量遍历已经访原创 2015-01-30 15:19:48 · 2457 阅读 · 0 评论 -
程序设计--素数问题
素数–一个大于1的自然数,除了1和它本身外,不能整除以其他自然数,因其特殊的性质,被广泛用于密码学领域,在程序设计竞赛及各大公司的面试中也经常出现,今天和大家分享几道有关素数的基础问题。素性测试问题描述:给定整数num,判断num是不是素数。由素数的定义,我们知道一个素数只能拥有两个约数,即1和它本身,又因为一个数的约数不能大于它本身,由此只要我们只要遍历2到num-1,找到除此之外的约数即可判断其原创 2015-02-15 17:26:53 · 1851 阅读 · 0 评论 -
后缀树的构造方法-Ukkonen详解
使用后缀树在字符串匹配可以得到很好的时间效率,下面转载了一篇构造后缀树的UKK算法,这是一种在线算法,其时间复杂度可以达到O(n)。先来记录几个利用后缀树解决的实际问题: 1.查找字符串O是否被包含在字符串S中: 以字符串S构造后缀树,按照字典树的搜索方法去搜索字符串O 2.求指定字符串T在字符串S中的重复次数: 以字符串S加 “$”转载 2015-01-03 14:49:50 · 5533 阅读 · 0 评论 -
程序设计--抽签问题
问题描述:你的朋友提议玩一个游戏:将写有数字的n个纸片放入口袋中,你可以从口袋中抽取抽取4次纸片,每次记下纸片的数字并将其放回口袋中。如果这4个数字的总和为m,就是你赢。你挑战了好几回,结果一次也没有赢过,于是怒而撕破口袋,取出所有的纸片,检查自己是否真的有赢的可能性。请你编写一个程序,判断当纸片上的数字为k1,k2........kn时,是否存在4次和为m的方案。如果存在则输出Yes,否则输出N原创 2015-01-21 11:10:17 · 1441 阅读 · 0 评论 -
深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值;如果含有不等式约束,可以应用KKT条件去求取。当然,这两个方法求得的结果只是必要条件,只有当是凸函数的情况下,才能保证是充分必要条件。KKT条件是拉格朗日乘子法的泛化。之前学习的时候,只知道直接应用两个方法,但是却不转载 2015-03-29 14:41:15 · 1291 阅读 · 0 评论