相信很多讀者都看過網(wǎng)上博客對 KMP 算法的講解,其中必提及的一個名詞就是:前綴。那么請問你心中理解的前綴的定義是什么呢?
對于字符串 “china”,其前綴為:
china, chin, chi, ch, c
你的想法是不是和上面一樣呢。但是我很遺憾地告訴你,KMP 之前綴不是這樣的,它是這樣的:
chin, chi, ch, c
難道是我們記錯前綴的概念了?不!不是我們記錯了,只是有人在指鹿為馬而已。下面來揭曉真像吧。
如此看來,KMP 之前綴并非前綴,而是真前綴!而大多數(shù)(幾乎所有)的博客都在以 “真前綴” 去定義“前綴”。
next 數(shù)組是 KMP 的一個核心概念,而真前綴又是 next 數(shù)組的核心。算法本屬于一個很嚴謹?shù)念I(lǐng)域,這種在重要概念上卻還指鹿為馬的行為,是應(yīng)該需要我們注意和避免的。
不知道大家有沒有發(fā)現(xiàn),你所看過的 KMP 博文無一提及真前綴的定義,除了阮一峰的字符串匹配的 KMP 算法。
哈哈,阮老師太粗心了,在文章開頭阮老師已經(jīng)講過,他是閱讀了 Jake Boxer 的文章才明白 KMP 的,那原文是什么樣的呢?
-
前綴
+關(guān)注
關(guān)注
0文章
2瀏覽量
6442
原文標題:你被欺騙了很久:前綴和真前綴
文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
16位并行前綴加法器
飛思卡爾單片機前綴表示什么意思
什么是9字符前綴?
PADS Logic中如何去修改元件的參考前綴?
國外生產(chǎn)廠商型號前綴互聯(lián)網(wǎng)網(wǎng)址.pdf
一種基于查詢前綴的快速抗沖突算法
集成電路型號前綴與產(chǎn)地對照
基于循環(huán)前綴的同步算法及FPGA實現(xiàn)

修改ApiBoot Logging日志采集前綴的教程
基于畸形URL前綴的網(wǎng)絡(luò)攻擊激增6000%
國外生產(chǎn)廠商型號前綴互聯(lián)網(wǎng)網(wǎng)址.zip
公共 IP 地址前綴如何進行網(wǎng)絡(luò)資源配置?

評論