你被欺骗了很久:前缀和真前缀

相信很多读者都看过网上博客对KMP算法的讲解,其中必提及的一个名词就是:前缀。那么请问你心中理解的前缀的定义是什么呢?

对于字符串“china”,其前缀为:

china, chin, chi, ch, c

你的想法是不是和上面一样呢。但是我很遗憾地告诉你,KMP之前缀不是这样的,它是这样的:

chin, chi, ch, c

难道是我们记错前缀的概念了?不!不是我们记错了,只是有人在指鹿为马而已。下面来揭晓真像吧。

如此看来,KMP之前缀并非前缀,而是真前缀!而大多数(几乎所有)的博客都在以“真前缀”去定义“前缀”

next数组是KMP的一个核心概念,而真前缀又是next数组的核心。算法本属于一个很严谨的领域,这种在重要概念上却还指鹿为马的行为,是应该需要我们注意和避免的。

不知道大家有没有发现,你所看过的KMP博文无一提及真前缀的定义,除了阮一峰的字符串匹配的KMP算法

哈哈,阮老师太粗心了,在文章开头阮老师已经讲过,他是阅读了Jake Boxer的文章才明白KMP的,那原文是什么样的呢?



转自我的个人博客:http://www.61mon.com/index.php/archives/209/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值