Go字符串匹配
2021-10-20 20:32:15 0 举报
AI智能生成
Go字符串匹配
作者其他创作
大纲/内容
模式串P长度为0
return 0
模式串P长度为1
return IndexByte(s, substr[0])
模式串P长度与文本串T长度相同,
比较二者内容是否相同
比较二者内容是否相同
内容相同返回0
内容不相同返回-1
模式串P长度 > 文本串T长度
return -1
模式串P长度 <= MaxLen
(arm64为32; amd64如果支持AVX2指令集为63,否则为31)
(arm64为32; amd64如果支持AVX2指令集为63,否则为31)
文本串T长度 <= 最大暴力比较长度(arm64为16;amd64为64),
「字符比较」,return bytealg.IndexString(s, substr)-->汇编代码
「字符比较」,return bytealg.IndexString(s, substr)-->汇编代码
文本串T长度>最大暴力比较长度,「字节比较」, IndexByteString(s string, c byte)-->汇编代码;
当 失败次数> 阈值时,余下部分再切换回 「字符比较」,
arm64: 阈值为 4 + (到目前为止已处理的元素数/16 向下取整); amd64: 阈值为 (到目前为止已处理的元素数+16/8) 向下取整)
当 失败次数> 阈值时,余下部分再切换回 「字符比较」,
arm64: 阈值为 4 + (到目前为止已处理的元素数/16 向下取整); amd64: 阈值为 (到目前为止已处理的元素数+16/8) 向下取整)
文本串T长度 > 模式串P长度 > MaxLen
先进行「字节比较」, IndexByteString(s string, c byte)-->汇编代码; 当 失败次数> 阈值时,
余下部分执行「Rabin-Karp算法」; 阈值为 4 + (到目前为止已处理的元素数/16 向下取整)
余下部分执行「Rabin-Karp算法」; 阈值为 4 + (到目前为止已处理的元素数/16 向下取整)
Rabin-Karp算法
0 条评论
下一页
为你推荐
查看更多