[理工] 演算法 KMP

看板Grad-ProbAsk作者 (hopward)時間7年前 (2016/11/23 10:58), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
http://i.imgur.com/epl69Jr.jpg
http://i.imgur.com/VcoQHO6.jpg
http://i.imgur.com/vAsooQv.jpg
想請問一下,根據課本prefix function的pseudo code trace課本給的例子ababaa會得到正確的pi(6),但如果我把例子換成下例 http://i.imgur.com/ClyDgyM.jpg
當我trace到i=6的時候,通過第一個while statement ( k=3 且 P[k+1]=b不等於P[i]=c) 此時k被設為pi(3)=1 接著無法通過if敘述,所以會跳去做最下面的pi[6]=1,但事實上根據我的例子,pi[6]最終的結果應該是0 我想問的事,上述虛擬碼會work是否是因為電腦為2進位,所以不是a就是b,不能像我舉的例子有其他變數嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.247.4.18 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1479869890.A.0DA.html

11/23 15:24, , 1F
k=pi(3)=1出來後 因為又符合k>0&&P[k+1]!=P[i]
11/23 15:24, 1F

11/23 15:25, , 2F
所以再進去while一次 此時k=pi(1)=0 接著設定pi(6)=0
11/23 15:25, 2F

11/23 15:49, , 3F
阿對齁 那是while迴圈 眼脫了 感謝
11/23 15:49, 3F
文章代碼(AID): #1ODGN23Q (Grad-ProbAsk)