我已經基於此處的網站構建了一個基於Java的後綴樹http://marknelson.us/1996/08/01/suffix-trees/但我遇到了問題。我可以建立一個後綴樹,但我可以嘗試從樹中構建一組所有後綴。我基本上找到所有的「端節點」和由「末端節點」返回的表示字符串從後綴樹生成後綴
該算法適用於一個字,如「會計」
├── (1) bookkeeper
├── (9) e
│ ├── (8) eper
│ ├── (10) per
│ └── (12) r
├── (6) k
│ ├── (7) eeper
│ └── (5) keeper
├── (3) o
│ ├── (4) kkeeper
│ └── (2) okkeeper
├── (11) per
└── (13) r
後綴:
[bookkeeper, ookkeeper, okkeeper, kkeeper, keeper, eeper, eper, er, per, r]
但是,當我使用類似 「ATATATATATA」
├── (1) ATATATATATA
└── (2) TATATATATA
後綴失敗:
[ATATATATATA, TATATATATA]
但適當的後綴應該是:
[A, ATA, ATATA, ATATATA, ATATATATA, ATATATATATA, TA, TATA, TATATA, TATATATA, TATATATATA]
我可以找到通過找出每個「端節點」字符串的所有後綴的答案,但似乎並不像正確的做法。還有其他建議嗎?編輯: 謝謝izomorphius!將END_CHAR添加到原始字符串幫助了一大堆。
├── (21) #
├── (19) A
│ ├── (20) #
│ └── (15) TA
│ ├── (16) #
│ └── (11) TA
│ ├── (12) #
│ └── (7) TA
│ ├── (8) #
│ └── (3) TA
│ ├── (4) #
│ └── (1) TA#
└── (17) TA
├── (18) #
└── (13) TA
├── (14) #
└── (9) TA
├── (10) #
└── (5) TA
├── (6) #
└── (2) TA#
後綴:
[A, ATA, ATATA, ATATATA, ATATATATA, ATATATATATA, TA, TATA, TATATA, TATATATA, TATATATATA]
看起來你的樹沒有完成'ATATATATATA'。 – Howard 2012-04-09 13:53:27