Я читаю алгоритм сортировки блоков из статьи Берроуза и Уилера. Это шаг алгоритма:
Предположим, что S = абракадабра
Инициализируйте массив W из N слов W[0, ..., N - 1], чтобы W[i] содержал символы S'[i, ..., i + k - 1], расположенные так, что целочисленные сравнения слов согласуются с лексикографическими сравнениями строк из k символов. Упаковка символов в слова имеет два преимущества: она позволяет сравнивать два префикса по k байт за раз, используя выровненный доступ к памяти, и позволяет исключить многие медленные случаи
(Примечание: S'
— это исходное S
с добавленными к нему k EOF
символов, где k — это количество символов, которое помещается в машинное слово (у меня 32-битная машина, поэтому k=4
)
EOF = '$'
Поправьте меня если я ошибаюсь:
S'= abracadabra$$$$
W= abra brac raca acad cada adab dabr abra bra$ ra$$ a$$$
Затем алгоритм говорит, что вам нужно отсортировать массив суффиксов S
(названный V) путем индексации массива W
.
Я не совсем понимаю, как вы можете сортировать суффиксы, индексируя их в W
. Например: предположим, что в какой-то момент сортировки вы получили два суффикса, i
и j
, и вам нужно их сравнить. Так как вы индексируете W
, вы одновременно проверяете 4 символа.
Предположим, что у них одинаковые первые 4 символа. Затем вам нужно будет проверить для каждого суффикса следующие 4 символа, и вы сделаете это, обратившись с 4-й позиции каждого суффикса в W
. Это правильно? Эта «упаковка символов в слова» действительно ускоряет процесс?
abra brac raca...
) тип упаковки, задуманный авторами? Может бытьabra cada...
? Можете ли вы дать немного больше контекста для цитаты? - person gcbenison   schedule 05.02.2012