|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我是学易语言的,我呢,曾经做一个找图的算法,我觉得那个算法比kmp算法要好些。
我的口才不好,怕讲的你們听不懂,就上易语言的程序了
.版本 2
.支持库 spec
.子程序 _按钮1_被单击
调试输出 (寻找_字节集 (到字节集 (“000000000000000000000000000001”), 到字节集 (“01”)))
.子程序 寻找_字节集, 整数型
.参数 主字节集, 字节集
.参数 子字节集, 字节集
.局部变量 起点, 整数型
.局部变量 出错点, 整数型
.局部变量 n, 整数型
.局部变量 n1, 整数型
.判断循环首 (真)
.计次循环首 (取字节集长度 (子字节集), n1) ' 匹配循环
.如果 (主字节集 [起点 + n1] ≠ 子字节集 [n1])
出错点 = 起点 + n1
跳出循环 ()
.否则
.如果结束
.计次循环尾 ()
.如果真 (n1 > 取字节集长度 (子字节集)) ' 这个判断是判断上个循环是不是完全找到了,找到了就返回
返回 (起点)
.如果真结束
.计次循环首 (取字节集长度 (主字节集) - 起点 - 取字节集长度 (子字节集), n) ' 这个是直接从判断出错点开始判断,找出和出错点相同的
.如果 (主字节集 [出错点 + n] = 子字节集 [n1])
' 找到后直接重置起点,跳出循环
跳出循环 ()
.否则
.如果结束
.计次循环尾 ()
.如果 (n > 取字节集长度 (主字节集) - 起点 - 取字节集长度 (子字节集)) ' 这个判断是看有没有找到,没找到说明没了
返回 (0)
.否则
起点 = 出错点 + n - n1 ' 原来是放在跳出循环上呢,,但是不好判断是否找到尾部了,就放这里了;
.如果结束
.判断循环尾 ()
返回 (0)
如果谁有更好的方式评论下。
我看到第36讲写的,不知道下面的优化是如何
当然这个算法不快,比起内部寻找字节集还差远了
|
|