cat /proc/cpuinfo | grep processor | wc -l| 算法 | 核心思想 | 预处理时间 | 预处理空间 | 匹配时间复杂度(最好/平均/最坏) | 算法难度 | 优势 | 劣势 |
|---|---|---|---|---|---|---|---|
| 朴素 (Naïve) | 从左到右逐字符比较,失败后右移一位 | O(1) | O(1) | O(n) / O(n+m) / O(nm) | 极低 | 实现极其简单,无额外空间,短串时常因缓存友好而很快 | 最坏情况极慢(如文本和模式均为"aaaaa..."),无法利用任何跳过信息 |
| KMP | 前缀函数(π表)避免文本回溯 | O(m) | O(m) | O(n) / O(n) / O(n) | 中等 | 严格线性时间,最坏情况下也有保证;文本指针永不回溯,适合流式处理 | 需要O(m)额外空间;平均性能往往不如BM/Horspool等跳跃算法 |
| Boyer‑Moore (BM) | 从右向左比较,坏字符 + 好后缀双规则跳跃 | O(m+σ) | O(m+σ) | O(n/m) / O(n/m) / O(nm) | 复杂 | 平均性能极佳(尤其是大字母表、长模式串),跳跃步长很大 | 预处理较复杂,空间较大(σ表),最坏情况可能退化为O(nm);对短模式串优势不明显 |
| Horspool (BMH) | BM的简化版,仅使用坏字符规则,且每次看窗口最后一个字符 | O(m+σ) | O(σ) | O(n) / 通常接近O(n/m) / O(nm) | 简单 | 实现简单,跳跃效果依然很好,实际应用中常比完整BM更快 | 最坏情况下仍可能退化为O(nm);对于某些重复模式跳跃不如好后缀规则 |
| Sunday | 借鉴BM,但失败时看窗口下一个字符决定跳跃 | O(m+σ) | O(σ) | O(n) / 通常接近O(n/m) / O(nm) | 简单 | 跳跃更激进,平均性能甚至优于Horspool,短串表现优异 | 同样存在最坏退化;对大字母表需要构建跳转表 |
| Two‑Way | 关键分解 + 周期性跳跃,匹配时先扫右侧再扫左侧 | O(m) | O(1) | O(n) / O(n) / O(n) | 中等偏难 | O(n)最坏时间 + O(1)空间,完美平衡,被glibc/musl等标准库采用 | 实现比KMP复杂;平均跳跃不如BM系列激进;长模式串预处理稍慢 |
| Rabin‑Karp | 滚动哈希(如Rabin指纹)比较数值 | O(m) | O(1) | O(n) / O(n+m) / O(nm)(哈希冲突时) | 中等 | 适合多模式匹配(一次扫描匹配多个模式),可扩展至二维模式(矩阵) | 哈 |
环境压测数据工具
-
bench_fd_verify.c - 验证stat和fcntl 验证 fd有效性 只读性能数据
-
bench_pipe.c - pipe 与 sockpair 的 读/写 吞吐与延迟 性能数据
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 变更为BBR2 | |
| netsh int tcp set supplemental Template=Internet CongestionProvider=bbr | |
| netsh int tcp set supplemental Template=Datacenter CongestionProvider=bbr | |
| netsh int tcp set supplemental Template=Compat CongestionProvider=bbr | |
| netsh int tcp set supplemental Template=DatacenterCustom CongestionProvider=bbr | |
| netsh int tcp set supplemental Template=InternetCustom CongestionProvider=bbr | |
| # 恢复为CUBIC | |
| # netsh int tcp set supplemental Template=Internet CongestionProvider=cubic | |
| # netsh int tcp set supplemental Template=Datacenter CongestionProvider=cubic |
NewerOlder