「プログラミングパール」の本で引用された人による最も簡潔な答えは(言い換え)です:
「このように並べ替えます (水平に左から右に手を振る)、次にそのように並べ替えます (垂直に上から下に手を振る)」
つまり、1 列のテーブル (単語) から開始して、2 列のテーブル (sorted_word, word) を作成し、最初の列で並べ替えます。
単語のアナグラムを見つけるには、最初にソートされた単語を計算し、テーブルの最初の列で最初に出現する単語をバイナリ検索し、最初の列が同じである間に 2 番目の列の値を読み取ります。
入力(ソートする必要はありません):
mate
tame
mote
team
tome
「このように」(水平に)ソート:
aemt, mate
aemt, tame
emot, mote
aemt, team
emot, tome
「そのように」(垂直に)ソート:
aemt, mate
aemt, tame
aemt, team
emot, mote
emot, tome
検索 "チーム" -> "aemt"
aemt, mate
aemt, tame
aemt, team
ハッシュテーブル/試行に関しては、ルックアップを少し高速化したい場合にのみ使用されます。ハッシュ テーブルを使用すると、最初の列のハッシュに基づいて、2 列の垂直方向に並べ替えられたテーブルを k パーティションに分割できます。これにより、バイナリ検索を 1 つのパーティション内でのみ実行する必要があるため、一定の速度向上が得られます。試行は、文字列の比較が多すぎるのを避けるのに役立つ最適化の別の方法です。トライの各端末のテーブルの適切なセクションの最初の行のインデックスをぶら下げます。