
算法
文章平均质量分 51
许泽武
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
从全排列和八皇后问题谈回溯
一般来讲,人们常常提及的回溯,通常指走不通就掉头。另一种情况,路走完了,回到开始的地方重新选择另一条路,也可称之为回溯——下面是重点。 几乎所有回溯的写法,都是for循环里嵌套着递归。如果不存在走不通的情况,则无条件递归,否则,就用if判断是回到上一层还是进入下一层,下面用相关代码片段说明。 全排列 function f($a,$str=''){ if(count($a)==1){原创 2018-01-21 19:42:54 · 341 阅读 · 0 评论 -
用全排列的方法解决八皇后问题
用百度搜索八皇后问题,几乎清一色都是用回溯,有兴趣的同学可参考:从全排列和八皇后问题谈回溯。 解决一个问题,我们应该充分利用已有的条件,化繁为简。 $a=[0,1,2,3,4,5,6,7]; 可以看到,这个数组的下标刚好也是0到7——对应着八皇后棋盘的0行到7行。而数组的这八个各不相同值,则对应八皇后棋盘的0到7列——所有满足八皇后的排列,都应当是这8个数字全排列的子集! 因此,我们首原创 2018-01-21 19:54:21 · 405 阅读 · 0 评论 -
kmp算法的详尽分析与实现
kmp是一种高效的字符串匹配算法,下面我用php做了详尽的注释,希望对你们有所帮助。 <?php //abca //前缀:a,ab,abc //后缀:bca,bc,a 重复的是'a',因此权值为1 //abcab //前缀:a,ab,abc,abca //后缀:bcab,cab,ab,b 重复的是'ab',因此权值为2 //权值算法 $pattern='ABCDABD'; $front=$e原创 2018-01-21 20:03:28 · 256 阅读 · 0 评论 -
从最长子串问题谈continue的使用
说来惭愧,写了一年半的代码,却从未使用过continue!——相信和我一样甚至时间比我还要长的都大有人在吧! 好了,言归正传,先上代码一睹为快。 <?php $a='zaqbdacde'; $b='zaqbacdef'; for($i=0;$i<strlen($a);$i++){ $c=''; $k=$i; for($j=0;$j<strlen($b);$j++){ if($a[$原创 2018-01-21 21:40:45 · 252 阅读 · 0 评论 -
18行代码3重循环解决最长公共子序列
这个三重循环算是比较复制和难的了,前面我写了一个和这个类似但比这简单的二重循环,有兴趣的同学可参看:从最长子串问题谈continue的使用。 说实话,网上的看的懂,但好像写不出2333.... 所以我就以自己的理解,如果有错误的地方,欢迎指出。 首先,我们有两个字符串abcde和cdabe,很容易看出,最长公共子串是abe和cde。 首先,第一个字符串ab匹配到第二个的ab后,第一个ab后原创 2018-01-26 00:36:37 · 266 阅读 · 0 评论 -
匿名函数实现递归
众所周知,递归就是函数调用其本身。 那,匿名函数能否也实现递归呢?答案是可以的。 请先看下面的代码 (f => f(f)) (fact => n => n (5)。 这是一个立即调用的匿名函数——接受一个参数,返回的函数再接受一个参数。 能够实现的关键是:参数本身同时充当了函数。原创 2018-02-03 23:05:57 · 1892 阅读 · 0 评论 -
使用php完成最短路径查找
先看下面的图 实现了任意节点到其它节点的最短路径,代码可以直接复制测试,有任何不懂的可以在下面留言,我看到了一定会回复。 <?php $list=[ 'a'=>['b'=>1,'c'=>2,'d'=>3,], 'b'=>['a'=>1,'c'=>4,'e'=>9], 'c'=>['a'=>2,'b'=>4,'d'=>5,'e'=>6], 'd'=>['a'=>3,'c'=>5,原创 2018-01-20 23:51:23 · 1277 阅读 · 1 评论 -
从最短路径谈动态规划和贪心算法
一言以蔽之:动态规划,从全局最优考虑;最短路径,从当前最优考虑。 先考虑下面的图 可以很容易地看出,如果使用贪心算法,从a到e的路线将是:a->b->c->d->e,而采用动态的规划的路线则是:a->c->e。 贪心算法的优点是代码非常容易编写,缺点则是从全局上考虑,结果往往不是最优的。而动态规划则相反:代码编写难度大,结果最优。如有兴趣了解具体实现,可移步至:使用php完成最短路径原创 2018-01-20 23:58:24 · 1816 阅读 · 1 评论 -
浅谈递归和迭达
众所周知,几乎所有的算法都离不开递归和迭代,无论是从小白刚接触的冒泡排序,还是日后进阶的深度和广度搜索。本文试就二者本质的区别与联系讨论开来,遗漏错误之处,烦请指出。首先,从一输出到十,最先想到的肯定是:for($i=1;$i<=10;$i++){ echo $i; } 换成递归,则是:function dg($n=10,$i=1){ if($i>$n){ return; ...原创 2018-01-20 14:50:15 · 475 阅读 · 0 评论