AlgStr / Библиотека / POSIBNIK / Главы для пособия / Практическая работа2
.docПрактическая работа № 2
Описание разреженных матриц
Пример 1: Упакованный способ хранения разреженных матриц
I.Описание
Идея:
i j aij
строка столбец
указатели
M1
M2
2. Необходимо описать на языке программирования
type
PNode=^Node; (указатель на узел)
Node=record
j: word ; (используется для индекса столбца)
wel: real; (значение матрицы aij)
Next: Pnode;
end;
PtrArray=array[1...65520 div size of(PNode) of PNode];
Matr=record
n,m: word;
Pbody: PtrArray;
end;
Pmatr=^Matr;
После этого можно описывать интерфейс объекта.
Чтобы приступить к реализации, первое, что необходимо сделать-описать функцию абстракции.
В интерфейсной части описываются спецификации.
В блоке implamentation описываем функцию абстракции и инвариант представления
Ф
a11
a12
…. a1m
-
- - - - - ----- - - - - - - -
- - - - - - - - - - - - - -
an1
an2
….anm
Типичная прямоугольная матрица есть
признак,все что там будет м-во
A[r]= [aij] aij= 0, если в списке с головой r^.PBody^[i] нет узла, что для js=j для
всех узлов списка.
таких ajsS,если в списке с головой r^.PBody^[i] есть узел,такой что js=j.
что
для всех i=1,n j=1,m
*
Если я допускаю нулевую матрицу, то необходимо описать, что все элементы Nill.
Инвариант представления:: требование к правильному представлению, чтобы извлечь матрицу.
* функция инв. представления есть:
<размер вектора r^.PBody^>= n & < в списке r^.PBody^[i]<=m для всех i=1,n>R<в списке r^.PBody^[i] для разных узлов js<jp для всех i=1,n.
*
(<<действие, <-понятие)
Пример2: Схема1 (nxm) (по столбцам)
r
i aij
Матрица хранится в виде:
Всегда номер строки признак начала столбца признак конца
0 1 2 а21
4 а41 0 2 5
а52
0 0 0
Номер
столбца, представление I-го столбца
где есть
не нулевые элементы
Вселенная
объективного представления
Нумеруем пары для вычисления размера вектора:
ℓ=(n+1+r)-максимальный размер числа пар
r-должно храниться в образе матрицы или вычисляться, но может храниться и в
дискрипторе.
Описываем тип: (В этом случае возникает проблема в том,что ji-целое, aij1-может быть любым,поэтому использование значений этих пар разное при этом используется тип запись с вариантами)
type
Para=record
case K: word of тип i-й пары , она может быть 0 ji
0: (j:word); i aiji
else (val: real); (_ _ _ _ _; _ _ _ _ _ );
end;
Пример 3: Схема 3
Элементы хранятся по столбцам.
PVE-элементы;
PLD-приведенный индекс элемента в сплошном представлении по столбцам.
Возникает вопрос:
Как зная к и размер матрицы определить индексы?