加载中...
Sunday 算法是由丹尼尔·桑迪于1990年提出的一种字符串匹配算法。它在失配时关注主串中位于当前窗口之后的那个字符,据其决定模式串的最大跳跃距离,平均情况下比较高效,实现也较为简洁。

| 提出者 | 丹尼尔·桑迪 |
| 提出年份 | 1990 |
| 类别 | 字符串匹配 |
| 关键 | 窗口后一位字符 |
| 平均性能 | 高效 |
Sunday 算法是一种基于跳跃思想的单模式字符串匹配算法。它与博耶-穆尔算法同源,但在失配时把注意力放在主串中紧邻当前匹配窗口之后的那个字符上,以此计算模式串应向右滑动的距离,常能实现较大跨度的跳跃。
该算法由丹尼尔·桑迪(Daniel Sunday)于1990年提出。它的匹配尝试从左到右比较,一旦发现不匹配,便查看主串中位于窗口右端下一位的字符。由于无论如何滑动,该字符都必须参与下一次匹配,算法据它在模式串中的位置决定跳跃量,思路直观且实现简单。
Sunday 算法适用于文本编辑器查找、日志检索、简单模式匹配等对实现简洁性有要求的场合。它常与 KMP、博耶-穆尔等算法一同被讨论,作为字符串匹配教学中的实用范例,也用于一些轻量级的搜索工具中。
问:Sunday 算法比博耶-穆尔快吗?答:两者思路相近,Sunday 因利用窗口后一位字符,平均跳跃往往更大、实现更简单;但博耶-穆尔有更完善的最坏情况分析,实际优劣依数据而定。
问:Sunday 算法最坏情况如何?答:在特意构造的重复数据下,它可能退化到主串长度乘模式串长度的量级,因此对最坏性能敏感的场景应考虑有线性保证的算法。

| 提出者 | 丹尼尔·桑迪 |
| 提出年份 | 1990 |
| 类别 | 字符串匹配 |
| 关键 | 窗口后一位字符 |
| 平均性能 | 高效 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧