03.09.2008Разреженные матрицы и ортогональные списки 1 Структуры и алгоритмы обработки данных, 1 2008-09 учебный год Лекция 1 I.Введение II.Разреженные.

Презентация:



Advertisements
Похожие презентации
Рекурсивная обработка списков1 Структуры и алгоритмы обработки данных, 1 Лекция 3 Рекурсивная обработка списков 1.Представление и реализация.
Advertisements

Двумерные массивы. Двумерный массив При решении практических задач часто приходится иметь дело с различными таблицами данных, математическим эквивалентом.
Двумерные массивы. Задачи обработки двумерных массивов.
Стек, очередь, дек1 Структуры и алгоритмы обработки данных, 1 Лекция 4 Линейные СД Стек, очередь, дек.
Одномерные массивы Понятие массива, виды массивов Описание, заполнение и вывод одномерного массива Обработка одномерного массива.
Массивы Материалы к урокам по программированию. МАССИВ это УПОРЯДОЧЕННАЯ последовательность данных ОДНОГО ТИПА. Массивы относятся к структурированным.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Задачи с использованием одномерных массивов 1. Опишите алгоритм подсчёта среднего значения положительных элементов в целочисленном массиве из 30 элементов.
Задачи с использованием одномерных массивов 1. Опишите алгоритм подсчёта среднего значения положительных элементов в целочисленном массиве из 30 элементов.
Задача. Сдвинуть одномерный массив на один элемент влево. Например, исходный массив Обработанный массив: Фрагмент программы:
Пусть дана система линейных алгебраических уравнений с n неизвестными: a 11 x 1 + a 12 x 2 + … + a 1n x n = b 1 a 21 x 1 + a 22 x 2 + … + a 2n x n = b.
ЕГЭ 2012 Информатика и ИКТ Консультация 3. Пример.
Информатика ЕГЭ Уровень А5. Вариант 1 Определите значения переменных a, b, c после выполнения следующего фрагмента программы: a:=5; b:=1; a:=a+b; if a>10.
1 Пример: Для каждого из 25 учеников класса известны фамилия и оценки (в баллах) по пяти дисциплинам. Требуется вычислить среднюю оценку каждого ученика.
Стрельникова Л.В.. План изучения нового материала 1.Понятие массива 2.Виды массивов 3.Описание массивов 4.Формирование массивов Стрельникова.
Автор: учитель информатики МКОУ Плесской средней общеобразовательной школы Юдин Андрей Борисович Часть 1.
Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных.
1 Массивы 2 Опр. Массивом называется совокупность однотипных данных, связанных общим именем. Основные характеристики массива: 1. Имя массива 2. Тип компонентов.
1 Массивы Массив – это упорядоченная последовательность, состоящая из фиксированного количества величин одного типа. Особенности: все элементы имеют один.
При решении многих задач приходится обрабатывать большое количество однотипных данных. Для хранения этих данных пришлось бы вводить большое количество.
Транксрипт:

Разреженные матрицы и ортогональные списки 1 Структуры и алгоритмы обработки данных, учебный год Лекция 1 I.Введение II.Разреженные матрицы и ортогональные списки

Разреженные матрицы и ортогональные списки 2 Часть 1. Введение Учебный курс – 3 и 4-й семестры Отчетность: 3-й семестр (осенний): К/р + Экзамен 4-й семестр (весенний): К/р + Т/к

Разреженные матрицы и ортогональные списки 3 Осенний семестр Основные темы См. файл «Вопросы2007осень как план»

Разреженные матрицы и ортогональные списки 4 Напоминание материала 1-го курса Представление и реализация линейных списков (например, Л1-списка): Непрерывная реализация Ссылочное представление в связанной (динамической) памяти Ссылочное представление на базе вектора

Разреженные матрицы и ортогональные списки 5 Непрерывная реализация на базе вектора Линейный список представлен одномерным массивом так, что соседние элементы списка записаны в соседние элементы массива. Пример операции «удалить элемент списка»: чер е д а б у кв чер е д а б укв чер е д а б укв ч р е д а б у квр е д а б у квчер е д а б у кв в

Разреженные матрицы и ортогональные списки 6 Непрерывная реализация на базе вектора Очевидный недостаток – необходимость сдвига элементов массива при выполнении операций вставки и удаления элемента списка. Операции удаления и вставки при такой реализации являются массовыми, т. е. требующими выполнения элементарных операций в количестве, в среднем пропорциональном числу элементов списка.

Разреженные матрицы и ортогональные списки 7 Ссылочное представление в связанной (динамической) памяти а Head: S: Cur: PredCur: Пример операции «удалить элемент списка»:

Разреженные матрицы и ортогональные списки 8 Ссылочное представление на базе вектора Пример операции «удалить элемент списка»:

Разреженные матрицы и ортогональные списки 9 Литература 1.Алексеев А. Ю., Ивановский С. А., Куликов Д. В. Динамические структуры данных: Учеб. пособие. СПб.: Изд-во СПбГЭТУ «ЛЭТИ», Ивановский С.А., Калмычков В. А., Лисс А. А., Самойленко В.П. Представление и обработка структурированных данных: Практикум по программированию / СПб.: Изд-во СПбГЭТУ «ЛЭТИ», 2002.

Разреженные матрицы и ортогональные списки 10 Структуры и алгоритмы обработки данных, 1 Лекция 1 Часть 2. Разреженные матрицы и ортогональные списки 1.Стандартные способы представления матриц 2.Плотное и разреженное представление полиномов 3.Разреженные матрицы на базе ортогональных списков (ссылочная реализация в динамической памяти) 4.Разреженные матрицы на базе ортогональных списков (ссылочная реализация на базе вектора)

Разреженные матрицы и ортогональные списки Стандартные способы представления матриц 012…j…n … i … n A[0..n, 0..n] a 0 = Адр(A[0,0]) Адр(A[i,j]) = a 0 + a 1 *i + a 2 *j, где a 1 = (n+1)*d, a 2 = d, d – размер памяти под один элемент матрицы

Разреженные матрицы и ортогональные списки 12 Стандартные способы представления матриц 01…j……n … i … n A[0..n, 0..n] a 0 = Адр(A[0,0]) i j Адр(A[i,j]) = = a 0 + a 1 *i*(i + 1)/2 + a 2 *j, где a 1 = d, a 2 = d, d – размер памяти под один элемент матрицы Треугольные матрицы

Разреженные матрицы и ортогональные списки 13 Стандартные способы представления матриц 01…j……n … i … n A[0..n, 0..n] a 0 = Адр(A[0,0]) | i – j | k На картинке k = 2 Ленточные матрицы

Разреженные матрицы и ортогональные списки 14 Разреженные матрицы 012…j…n … i … n Общее количество элементов N = (n + 1) 2 Количество «существенных» элементов - k k N Нерегулярная структура

Разреженные матрицы и ортогональные списки Плотное и разреженное представление полиномов Начнем с аналогии. Пусть рассматривается полином одной переменной с целочисленными коэффициентами P n (x) = a 0 x n + a 1 x n-1 + … + a n-1 x + a n,a 0 0. Плотное представление полинома основано на хранении последовательности (массива) всех его коэффициентов ( a 0, a 1, …, a n-1, a n ), в том числе и тех, которые равны нулю. Разреженное представление полинома использует только ненулевые коэффициенты. Например, пусть дан полином P 7 (x) = 3x x 2 – 7. Его плотное представление есть (3, 0, 0, 0, 0, 13, 0, 7). Разреженное представление есть последовательность пар чисел (коэффициент, показатель степени), т. е. ((3, 7), (13, 2), ( 7, 0)).

Разреженные матрицы и ортогональные списки 16 В общем случае полином (многочлен) P(x) представляется последовательностью пар чисел, каждая из которых (c, d) соответствует моному (одночлену) с x d, т. е. P(x) (q 1, q 2, …, q m-1, q m ), где q k = (c k, d k ) и c k 0. Удобно использовать упорядоченное разреженное представление полинома, расположив пары коэффициент показатель в порядке убывания показателей степеней мономов, т. е. так, что ( k 1..m 1: d k > d k+1 ). Во-первых, такое представление единственно, а во-вторых, многие операции над полиномами в таком представлении выполняются более эффективно. Плотное и разреженное представление полиномов

Разреженные матрицы и ортогональные списки 17 Естественно реализовать последовательность, представляющую полином, в виде линейного списка. Действительно, при операциях с полиномами, как правило, появляются новые мономы, которые надо вставлять в последовательность, и исчезают старые, которые надо удалять из последовательности. В такой ситуации целесообразно использовать динамические структуры данных, например, линейные Л1- или Л2-списки. Отметим, что стандартное математическое ("человеческое") представление полиномов разреженное. Например: P 7 (x) = 3x x 2 – 7. Конец аналогии. Плотное и разреженное представление полиномов

Разреженные матрицы и ортогональные списки Разреженные матрицы на базе ортогональных списков (ссылочная реализация в динамической памяти) Ненулевой элемент матрицы а[Row,Col]=Val будем представлять узлом RowColVal RowColVal DownRight (слева) или с графическим изображением указателей (справа). Для примера рассмотрим матрицу Организуем циклические списки ненулевых элементов по строкам и столбцам. Каждый ненулевой элемент матрицы а[Row,Col] будет входить в два списка (будет общим элементов двух списков): в список строки с номером Row и в список столбца с номером Col (см. рисунок).

Разреженные матрицы и ортогональные списки BaseRow[*] BaseCol[*]

Разреженные матрицы и ортогональные списки 20 Замечания 1.Списки по строкам и столбцам – кольцевые однонаправленные (Л1-списки). 2.В списках введены сторожевые элементы. 3.Эти сторожевые элементы, они же – «представители» строк и столбцов, сгруппированы в массивы «входов» в списки по столбцам ( BaseCol [*] ) и по строкам ( BaseRow [*] ). 4.Можно было бы вместо массивов входов организовать списки входов.

Разреженные матрицы и ортогональные списки 21 Типы данных для представления разреженной матрицы в динамической памяти type indMatr = 0.. SizeMatr; {диапазон индексов матрицы } {0 – спец.значение индекса (сторож циклического списка) } Next = ^ MatrElem; {указатель на элемент матрицы } MatrElem = record{элемент матрицы, т.е. узел списка } Row, Col : indMatr ; Val: Float ; Down, Right : Next end {MatrElem}; Base = array [indMatr] of MatrElem; {массив "входов"} Matr = record { матрица } BaseRow, BaseCol : Base end {Matr}; var n,m : indMatr;

Разреженные матрицы и ортогональные списки 22 Пример: вычисление скалярного произведения столбцов матрицы. Пусть a(k) - это k-й столбец матрицы A. Требуется вычислить (k:1..m, l:1..m). function ScalProd ( var A: Matr; k,l: indMatr ) : Float; {Pred: (0

Разреженные матрицы и ортогональные списки 23 s := 0; while ( q^.Row 0) and (p^.Row 0) do begin if q^.Row = p^.Row then begin {эл-ты из одной строки } s := s + q^.Val * p^.Val; q := q^.Down; p := p^.Down end else {текущ. эл-ты списков-столбцов из разных строк} if p^.Row > q^.Row then q := q^.Down else p := p^.Down {fi} end {while};

Разреженные матрицы и ортогональные списки 24 Картинка p q

Разреженные матрицы и ортогональные списки Разреженные матрицы на базе ортогональных списков Ссылочное представление разреженной матрицы на базе вектора (Метод Д.Кнута) NextInRow = Right,NextInCol = Down Пример матрицы и ее представление на базе вектора (типа MatE, см.далее)

Разреженные матрицы и ортогональные списки 26 Массивы входов Номер строки или столбца 1234 BaseRow1204 BaseCol Продолжение

Разреженные матрицы и ортогональные списки 27 Представление type indMatr = 1..MaxInd; {диапазон индексов матрицы } NumOfElem = 0..MaxNumElem; {=Next} {адрес в векторе памяти} MatrElem = record {элемент матрицы} Row, Col : indMatr; Val: Float; NextInRow, NextInCol : NumOfElem end {MatrElem}; MatE = array [NumOfElem] of MatrElem; Base = array [indMatr] of NumOfElem; {массив "входов"} BaseRC = record BaseRow, BaseCol : Base end; Matr = record {"матрица"} ListElem: MatE; InputList: BaseRC end {Matr};

Разреженные матрицы и ортогональные списки 28 Тот же пример: вычисление скалярного произведения столбцов матрицы. Пусть a(k) - это k-й столбец матрицы A. Требуется вычислить (k:1..m, l:1..m). function ScalProd ( var A: Matr; k,l: indMatr ) : Float; var s: Float; p, q: NumOfElem; begin with A.InputList do begin p := BaseCol[k]; q := BaseCol[l] end {with}; … { Cм.вставку на следующем слайде } ScalProd := s end {ScalProd}

Разреженные матрицы и ортогональные списки 29 s := 0; with A do begin while (q 0) and (p 0) do if ListElem[q].Row = ListElem[p].Row then begin {эл-ты из одной строки } s := s + ListElem[q].Val * ListElem[p].Val; q := ListElem[q].NextInCol; p := ListElem[p].NextInCol end else {текущ. эл-ты столбцов из разных строк} if ListElem[p].Row > ListElem[q].Row then q := ListElem[q].NextInCol else p := ListElem[p].NextInCol {fi} {end-while} end {with A};

Разреженные матрицы и ортогональные списки 30 Литература по теме Разреженные матрицы и ортогональные списки Основная 1. Кнут Д. Искусство программирования для ЭВМ. Т.1. Основные алгоритмы. М.: Мир, [с , Массивы и ортогональные списки]; 3-е изд. М.: Издательский дом «Вильямс», [с ] Дополнительная 2. Дал У., Дейкстра Э., Хоор К. Структурное программирование. М.: Мир, [Хоар К. О структурной организации данных, с.169, п.10. Разреженные структуры данных] 3. Писсанецки С. Технология разреженных матриц. М.: Мир, [гл.1]

Разреженные матрицы и ортогональные списки 31 КОНЕЦ ЛЕКЦИИ