Ниже приведена реализация сортировки LSD Radix в Java из учебника для сортировки массива строк, где каждая строка содержит ровно W
символов.
Я хочу посчитать количество обращений к массиву во время выполнения. Я читал, что для сортировки LSD требуется n * c
доступ к массиву, где n
- это количество строк, а c
- количество символов в каждой строке. Однако приведенный ниже алгоритм обращается к нескольким массивам несколько раз. Если я увеличу счетчик для каждого из них, я получу значительный коэффициент nc
.
Так что же представляет собой «доступ к массиву» в контексте алгоритмов? Есть ли только один экземпляр доступа к массиву, который считается более значимым, чем я должен здесь учитывать, или этот пример на самом деле неэффективная реализация, которая использует больше доступа к массиву, чем необходимо?
public int lsdSort(String[] array, int W) {
int access = 0;
// Sort a[] on leading W characters.
int N = array.length;
String[] aux = new String[N];
for (int d = W-1; d >= 0; d--)
{ // Sort by key-indexed counting on dth char.
int[] count = new int[R+1]; // Compute frequency counts.
for (int i = 0; i < N; i++) {
count[array[i].charAt(d) + 1]++;
}
for (int r = 0; r < R; r++) {
// Transform counts to indices.
count[r+1] += count[r];
}
for (int i = 0; i < N; i++) {
// Distribute.
aux[count[array[i].charAt(d)]++] = array[i];
}
for (int i = 0; i < N; i++) // Copy back.
array[i] = aux[i];
}
return access;
}