BF

String indexOf 之BF、KMP算法

依然范特西╮ 提交于 2020-03-25 12:59:23
3 月,跳不动了?>>> 一. BF算法 BF算法是普通的模式匹配算法,BF算法的思想就是 将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果 。 举例说明: S: ababcababa P: ababa BF算法匹配的步骤如下: 代码实现: 其实在上面的匹配过程中,有很多比较是多余的。在第五趟匹配失败的时候,在第六趟,i可以保持不变,j值为2。因为在前面匹配的过程中,对于串S,已知s0s1s2s3=p0p1p2p3,又因为p0!=p1!,所以第六趟的匹配是多余的。又由于p0==p2,p1==p3,所以第七趟和第八趟的匹配也是多余的。在KMP算法中就省略了这些多余的匹配。 二. KMP算法 KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字。其实KMP算法与BF算法的区别就在于 KMP算法巧妙的消除了指针i的回溯问题 ,只需确定下次匹配j的位置即可,使得问题的复杂度由O(mn)下降到O(m+n)。 在KMP算法中,为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的前缀。 对于next[

sparc v8 stack frame

◇◆丶佛笑我妖孽 提交于 2020-02-15 18:47:39
main.c int enable=1; int main() { int a, b; int sum; a = 1; b = 3; sum = add(a, b); return 0; } int add(int a, int b) { return (a+b); } int del() { return 0; } View Code 汇编如下: main.elf: file format elf32-sparc Disassembly of section .text: 70000000 <main>: 70000000: 9d e3 bf 88 save %sp, -120, %sp 70000004: 90 10 20 01 mov 1, %o0 70000008: d0 27 bf f4 st %o0, [ %fp + -12 ] 7000000c: 90 10 20 03 mov 3, %o0 70000010: d0 27 bf f0 st %o0, [ %fp + -16 ] 70000014: d0 07 bf f4 ld [ %fp + -12 ], %o0 70000018: d2 07 bf f0 ld [ %fp + -16 ], %o1 7000001c: 40 00 00 08 call 7000003c <add> 70000020: 01 00