随笔分类 - 算法设计
摘要:3.经典例题 设R = {r1,r2,r3......rn}是要进行排列的n个元素,Ri = R-{ri}。集合X中元素的全排列记为Perm(X)。(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。R的全排列可归纳定义如下: 当n = 1时,Perm(R) = (r),其中r是结婚R中唯一的元素。 当n > 1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2)......(rn)Perm(Rn)构成。其实这就是一个递归过程,拿(r1)Perm(R1)来说,全排列Perm(R1) = Perm( {r2,r3,r4.....rn})之
阅读全文
摘要:1、对于递归算法的认识,可以简单的归纳为:直接或者间接调用其本身的算法称之为递归算法。一般而言,递归算法表达式简单,易理解,但要写出递归算法之前,我们需要先理清每个递归函数的非递归函数的定义,而且一定要有跳出递归的边界条件(这个很重要)。2、简单例子 1). int function(int n) { if ( n == 0) return 1; else return function(n-1); } 2).Fibonacci数列 int function( int n) { if (n ==0) return 1; else return function(n-1)+f...
阅读全文
摘要:以下是网上找来的,我整理了下,个人觉得写的挺好的,分享给大家。一、介绍BM算法:是一种精确字符串匹配算法,其基本思路采用从右向左比较的方法,其中用到了“坏字符规则”和“好后缀规则”,通过这两个规则来决定向右跳跃的距离。二、算法流程BM算法的基本流程:设文本串T,模式串为P。先将T、P左对齐,然后从右往左依次逐个字符比较,如果发现不匹配,则使用前面提到的两个规则来计算得到跳跃的距离,一直到匹配结束或者匹配成功。三、概念介绍在匹配中已经匹配的部分称为好后缀,第一个不匹配的字符成为坏字符。1).坏字符规则在BM算法从右向左扫描的过程中,若发现某个字符x不匹配,则按如下两种情况讨论: i. 如果字符.
阅读全文
摘要:一、简介 A*算法是启发式算法的一种,可以求出在图形平面上有着多个节点时,找到两个节点之间的最短路径,它的用到的地方还是挺多的,如游戏中的NPC移动,其实A*算法和Dijkstra算法很像很像的(个人相当感觉额,但也有一点点差异),如果你了解Dijkstra算法的话,那对于A*算法就很容易接受了。二、算法主要内容 对于A*算法而言,需要设计一个估计函数,即f(n) = g(n) + h(n),其中g(n)表示搜索起点到当前节点的代价(通常用某节点在搜索树中的深度来表示的),h(n)表示当前节点到目标节点的估计值,对于A*算法的估计函数而言,其中h(n)的设计最为重要,也是衡量是否为A*算法的一
阅读全文

浙公网安备 33010602011771号