指定された入力文字列からそのツリーがどのように生成されるのか理解できません。
基本的に、リストしたすべてのサフィックスを使用してパトリシア トライを作成します。パトリシア トライに挿入する場合、入力文字列の最初の文字から始まる子のルートを検索します。子が存在する場合はツリーをたどりますが、存在しない場合はルートから新しいノードを作成します。ルートには、入力文字列 ($、a、e、h、i、n、r、s、t、w) 内の一意の文字と同じ数の子があります。入力文字列の文字ごとにそのプロセスを続行できます。
接尾辞ツリーは、特定の文字列内の特定の部分文字列を見つけるために使用されますが、特定のツリーはそれに対してどのように役立ちますか?
部分文字列「hen」を探している場合は、ルートから「h」で始まる子の検索を開始します。子 "h" の文字列の長さが、文字列の最後に到達するか、入力文字列と子 "h" 文字列の文字の不一致が発生するまで、子 "h" の処理を続行します。子 "h" のすべてに一致する場合、つまり、入力 "hen" が子 "h" の "he" に一致する場合、"n" に到達するまで "h" の子に進みます。 "n" の場合、部分文字列は存在しません。
コンパクト サフィックス トライ コード:
└── (black)
├── (white) as
├── (white) e
│ ├── (white) eir
│ ├── (white) en
│ └── (white) ere
├── (white) he
│ ├── (white) heir
│ ├── (white) hen
│ └── (white) here
├── (white) ir
├── (white) n
├── (white) r
│ └── (white) re
├── (white) s
├── (white) the
│ ├── (white) their
│ └── (white) there
└── (black) w
├── (white) was
└── (white) when
サフィックスツリーコード:
String = the$their$there$was$when$
End of word character = $
└── (0)
├── (22) $
├── (25) as$
├── (9) e
│ ├── (10) ir$
│ ├── (32) n$
│ └── (17) re$
├── (7) he
│ ├── (2) $
│ ├── (8) ir$
│ ├── (31) n$
│ └── (16) re$
├── (11) ir$
├── (33) n$
├── (18) r
│ ├── (12) $
│ └── (19) e$
├── (26) s$
├── (5) the
│ ├── (1) $
│ ├── (6) ir$
│ └── (15) re$
└── (29) w
├── (24) as$
└── (30) hen$