Я читаю алгоритм сортировки блоков из статьи Барроуза и Уилера.
Это шаг алгоритма:
Предположим, 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
.
Это правильно? Это «упаковка символов в слова» действительно ускоряет процесс?