鱼C论坛

 找回密码
 立即注册
查看: 2911|回复: 1

[技术交流] KMP我的思路

[复制链接]
发表于 2015-2-1 18:58:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我是学易语言的,我呢,曾经做一个找图的算法,我觉得那个算法比kmp算法要好些。

我的口才不好,怕讲的你們听不懂,就上易语言的程序了


.版本 2
.支持库 spec
.子程序 _按钮1_被单击
调试输出 (寻找_字节集 (到字节集 (“000000000000000000000000000001”), 到字节集 (“01”)))

.子程序 寻找_字节集, 整数型
.参数 主字节集, 字节集
.参数 子字节集, 字节集
.局部变量 起点, 整数型
.局部变量 出错点, 整数型
.局部变量 n, 整数型
.局部变量 n1, 整数型


.判断循环首 (真)
    .计次循环首 (取字节集长度 (子字节集), n1)  ' 匹配循环
        .如果 (主字节集 [起点 + n1] ≠ 子字节集 [n1])
            出错点 = 起点 + n1
            跳出循环 ()
        .否则
        .如果结束
    .计次循环尾 ()
    .如果真 (n1 > 取字节集长度 (子字节集))  ' 这个判断是判断上个循环是不是完全找到了,找到了就返回
        返回 (起点)
    .如果真结束
    .计次循环首 (取字节集长度 (主字节集) - 起点 - 取字节集长度 (子字节集), n)  ' 这个是直接从判断出错点开始判断,找出和出错点相同的
        .如果 (主字节集 [出错点 + n] = 子字节集 [n1])
            ' 找到后直接重置起点,跳出循环
            跳出循环 ()
        .否则
        .如果结束
    .计次循环尾 ()
    .如果 (n > 取字节集长度 (主字节集) - 起点 - 取字节集长度 (子字节集))  ' 这个判断是看有没有找到,没找到说明没了
        返回 (0)
    .否则
        起点 = 出错点 + n - n1  ' 原来是放在跳出循环上呢,,但是不好判断是否找到尾部了,就放这里了;
    .如果结束
.判断循环尾 ()
返回 (0)



如果谁有更好的方式评论下。
我看到第36讲写的,不知道下面的优化是如何

当然这个算法不快,比起内部寻找字节集还差远了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-20 23:01:19 | 显示全部楼层
此帖仅作者可见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-5 01:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表