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 条评论
 下一页