`
steeven
  • 浏览: 312993 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

原创算法: 字符串查找匹配

阅读更多
从来没想过枯燥的算法居然也能上瘾。 字符串匹配是不是可以这么做,类似于hash, 但是更快

1. hash算法简化,比如取每个字符相加,
2. key长度len, 从0开始,取前len个字符hash
3. while (hash不一致 || 逐个字符比较不一致) && 没到字符串末尾
5.   hash减掉当前字符,加上len+1位置字符

---------------------
3/20/2017
又想了一下,还可以改进:
相加的方法比较粗糙,基本上只有一个有效byte, 对于ab, ba很容易误判
我们可以利用寄存器长度多放几个字符,比如64位cpu, 一次可以放8个字符。
还有,hash一样对于海量数据来说是很容易发生的事情,可以引入两个或者更多的hash,计算量+1, 而冲突概率则减少了N倍。

Hash1: for(i=0;i<len;i++) hash1=hash1<<8+pattern[i]; 加减法是可逆的
Hash2: for(i=0;i<len;i++) hash2=hash1<<8^pattern[i]; 异或是可逆的


匹配的时候:
临时t_hash1=t_hash1>>>8+str[j]<<<SHIFT; 挤掉最低字符,hash上新的末尾字符
临时t_hash2=((t_hash1^str[i-1])>>>8+t_hash2<<<56) str[j]<<<SHIFT; 异或掉原来的首字符,循环左移,新的尾字符在该出现的位置上异或

这里用一个整型比较替代字符串比较,复杂度O(M+N), 需要遍历

对于长样本字符串,KMP也是个不错选择,可以根据样本尽量长的往前跳
分享到:
评论

相关推荐

    我的OI算法总结。原创。

    3. **字符串处理**:KMP算法、Manacher's算法用于高效匹配模式串,Z算法、Rabin-Karp算法用于文本模式匹配。 4. **递归与回溯**:在解决组合优化问题和搜索问题时常用,如八皇后问题、N皇后问题、迷宫问题等。 5. ...

    6、基础省选+NOI-第6部分 字符串_2020.08.31.pdf

    Morris和Vaughan Pratt三位学者于1970年代提出的高效字符串匹配算法。它的主要目标是在主串(text)中查找子串(pattern)是否存在,并返回第一个匹配的位置。与朴素的线性搜索相比,KMP算法避免了不必要的回溯,...

    算法设计与分析.pdf

    克里尼代数是一种用于形式化描述正则语言的代数系统,对于理解和设计字符串匹配算法非常重要。 7. **二项堆和斐波那契堆**:堆是一种支持插入、删除最大值/最小值操作的数据结构。二项堆和斐波那契堆都是高效的堆...

    Java版本的数据结构和算法(Linux社区版)绝对原创

    这些算法在解决实际问题中有着广泛的应用,如优化问题、路径寻找、字符串匹配等。 这个"Java数据结构和算法.pdf"文档很可能详细讲解了如何在Java环境中实现这些数据结构和算法,包括它们的基本原理、优缺点以及如何...

    Parametrized-String-Matching-Implementation-for-Software-Plagiarism-Check:软件抄袭检查的参数化字符串匹配实现

    本项目使用Python语言实现了一种参数化字符串匹配算法,以帮助检测可能的代码剽窃行为。 Python作为一种强大且易读的编程语言,提供了丰富的库和工具,使得实现这种复杂的匹配算法变得相对简单。在这个项目中,我们...

    算法导论(part1)

    每一小节通常以对相关历史素材的讨论结束,讨论了在每一算法领域的原创研究。 本书的特点可以概括为以下几个方面: 1.概念清晰,广度、深度兼顾。 本书收集了现代计算机常用的数据结构和算法,并作了系统而深入...

    算法导论(part2)

    每一小节通常以对相关历史素材的讨论结束,讨论了在每一算法领域的原创研究。 本书的特点可以概括为以下几个方面: 1.概念清晰,广度、深度兼顾。 本书收集了现代计算机常用的数据结构和算法,并作了系统而深入...

    普林斯顿 COS521 高级算法设计讲义

    - **问题领域**:本科生算法侧重于图遍历、字符串匹配等基础问题,而研究生算法则探讨生物信息学、电子商务等新兴领域的算法。 - **问题特性**:现代算法研究中的问题常常不确定,需要良好的建模能力以及对计算复杂...

    zlc1114 上大学以后写过的很多算法题.rar

    例如,他可能包含了经典的快速排序、归并排序、二分查找的实现,也可能包含了一些高级算法如Dijkstra最短路径算法、Floyd-Warshall全连接图最短路径算法、KMP字符串匹配算法等。每一个代码实现都可能包含了他的思考...

    取重复文本新算法-易语言

    哈希表能快速定位到字符串,实现O(1)的查找复杂度,而Trie树则适合处理部分匹配的情况,能有效地减少比较次数。 下面是一个基本的思路: 1. **预处理**:读取文本数据,将每个字符串转化为哈希值,存储在哈希表中。...

    IK3.2.8原理及源码分析(原创)

    2. **分词处理**:调用`IKSegmentation`的`next`方法完成字符串的分词工作,结果保存在`Context`实例中的`Lexeme`列表中。 以上就是IKAnalyzer3.2.8的主要原理及源码分析,通过深入了解其内部机制,我们可以更好地...

    php采集速度探究总结(原创)

    在本篇原创文章中,作者详细分析了不同函数在执行字符串匹配任务时的性能差异,并对算法进行了深入研究,得出了“算法写得好,什么函数都一样”的结论。 文章首先介绍了三个实现相同目的的函数:str_cut、str_cut1...

    程序相似性系统c++

    C++提供了`&lt;string&gt;`库,包含了许多处理字符串的方法,如查找子串、比较字符串等。此外,可能需要了解KMP算法或Boyer-Moore算法等高级模式匹配策略来提高效率。 2. **语法解析**:为了深入比较代码的结构,需要解析...

    poj acm300题 c++源码打包

    5. **字符串处理**:KMP算法、Boyer-Moore算法、Rabin-Karp算法等字符串匹配方法。 6. **位运算**:利用位运算进行高效计算,如快速幂、异或操作等。 7. **优化技巧**:如代码优化、内存管理、预处理指令、递归...

    C++程序设计实现代码查重.zip

    5. **算法**:代码查重通常涉及到字符串匹配算法,如KMP算法、Rabin-Karp算法、Boyer-Moore算法等。这些算法能有效地找出两个字符串中的相同子串,提高查重效率。通过分析源代码,我们可以了解到具体采用了哪种或...

    Advanced Algorithm Design Lecture Notes (Princeton COS521)

    - **本科算法**:主要关注于1990年以前发现的经典算法,这些算法通常涉及数据结构、图遍历、字符串匹配、网络流等问题。 - **研究生算法**:更侧重于1990年以后发展起来的现代算法,特别是那些在新兴领域中具有重要...

    国人原创良心自制图书管理系统C语言版.zip

    这通常涉及到字符串匹配算法,如KMP或Boyer-Moore算法,以提高查询效率。 3. **图书借阅与归还**:系统会跟踪图书的借阅状态,包括借阅人信息、借阅日期和应还日期。这里可能用到时间管理函数和数据结构来维护借阅...

    注册表查找工具

    2. **高级过滤**:可能支持对搜索结果进行进一步筛选,如根据键类型(字符串值、二进制值、DWORD等)、键路径、创建或修改时间等条件进行筛选。 3. **操作功能**:除了查看匹配项,工具还可能提供编辑、删除、导出...

    文本内容比对工具

    2. **字符串匹配算法**:最基础的比对方法是基于字符或单词的精确匹配,如Levenshtein距离,它计算两个字符串转换成彼此所需的最小编辑距离。此外,还有Jaccard相似度,衡量的是两个集合交集与并集的比例。 3. **TF...

    易语言文件搜索器.7z

    这可能涉及到字符串匹配算法,如KMP或Boyer-Moore算法。 3. 条件过滤:除了关键词搜索,软件还支持根据文件属性(如类型、大小、创建日期等)进行筛选。这需要对文件属性进行读取,并与用户设定的条件进行比较。 4...

Global site tag (gtag.js) - Google Analytics