
ТСД. Лекции Силантьевой / Вектора Айлиффа
.doc
Вектора Айлиффа
Так как количество индексов равно размерности массива, то при этом методе получения адресных выражений количество умножений пропорционально размерности массива, что замедляет работу с этой структурой данных.
Для ускорения вычислений необходимо исключить умножение, и это можно сделать, используя так называемый метод векторов Айлиффа.
Вектор Айлиффа – это вспомогательный дескриптор. Каждый элемент вектора Айлиффа содержит указатель на дескриптор следующего, более низкого уровня, а дескриптор самого низкого уровня указывает на группы элементов массива. Основной дескриптор массива (нулевой дескриптор) хранит указатель вектора Айлиффа первого уровня. В векторе Айлиффа может храниться и другая информация, например, минимальное и максимальное значение индексов и т.п.
Каждый из указателей адресует область памяти, соответствующую нулевому значению индекса, даже если его в диапазоне значений нет. После прибавления к указателю значения индекса получается адрес соответствующего компонента вектора Айлиффа или, в случае вектора нижнего уровня, – адрес bтребуемого элемента массива. Таким образом, к элементу массива M[J1,J2,……,Jn] можно обратиться, пройдя по цепи от основного дескриптора через все компоненты вектора Айлиффа, после чего и будет получен адрес требуемого элемента:
Addr (M[J1,J2,……,Jn]) = (…(…(D + J1) + J2) +…) + Jn , где D – значение указателя вектора Айлиффа первого уровня, хранящееся в основном дескрипторе.
Структура вектора Айлиффа для матрицы М[2..3, -1..1] с длиной элемента L=4 приведена на рисунке:
Например, дескриптор 1 имеет адрес 100, адрес начала масива – 200, тогда вектора Айлиффа будут выглядеть так:
Дескриптор 0 Дескриптор 1 J1
204 216 0
0
а
1
2
D(100)
т 3
J2
М[2, -1] |
M[2, 0] |
M[2, 1] |
M[3, -1] |
M[3,0] |
M[3,1] |
Пример: Для трехмерного массива М(4..5, -1..1, 0..1) векторами
Айлиффа будут:
Основной дескриптор Вектор Айлиффа I уровня
: D
: :
0
1
2 J1
3
4
5
Векторы Айлиффа II уровня
-1
-1
0
0 J2
1
1
В[4,-1,0] |
B[4,-1,1] |
B[4,0,0] |
B[4,0,1] |
B[4,1,0] |
B[4,1,1] |
B[5,-1,0] |
B[5,-1,1] |
B[5,0,0] |
B[5,0.1] |
B[5,1,0] |
B[5,1,1] |
0 1 0 1 0 1 0 1 0 1 0 1
J3
Большинство современных языков поддерживает работу со СД, более того, во многих из них уже реализованы основные структуры (string – Pascal, Vector – Java …), но не всегда они удовлетворяют потребностям программиста и требуется умение создавать свои СД.
Операции над созданными структурами данных
-
Обход структуры: доступ к каждому элементу структуры («посещение» элемента);
-
Поиск: нахождение расположения элемента с данным значением (ключом);
-
Вставка: включение нового элемента в структуру;
-
Удаление: исключение элемента из структуры.