- •1.1.2 Классификация структур данных
- •1.1.3 Обозначения и договоренности
- •1.1.4 Множества.
- •1.1.5 Прямоугольные структуры. Массивы
- •Лекция 2
- •2.1 Прямоугольные структуры. Таблицы
- •2.2 Реализация с использованием параллельных массивов (статическое представление таблицы)
- •2.3 Реализация операций для неупорядоченной таблицы с использованием статической памяти
- •2.4 Динамическая память. Куча
- •2.5 Операции над указателями
- •2.6 Геометрическая интерпретация
- •2.7 Динамическая цепочка
- •2.8 Реализация операций для неупорядоченной таблицы с использованием динамической памяти
- •3.2 Обратная польская (постфиксная) запись
- •Лекция 4
- •4.1 Списковые структуры. Линейный список
- •Атом есть линейный список (атомарный);
- •Атом есть линейный список (атомарный);
- •4.2 Об операции "расчленение"
- •4.3 Логическое описание линейного списка.
- •4.4 Вычисление значения арифметического выражения
- •Лекция 5
- •5.1 Деревья
- •5.2 Бинарные деревья
- •5.5 Дерево двоичного поиска
- •7.2 Инструментальные средства. Архивация файлов (пока без сжатия)
- •7.3 Программы хранения и обработки информации
- •7.4 Код Цезаря
- •7.5 Упаковка текста
- •7.6 Код Хаффмана
- •7.7 Код Хемминга
- •7.8 Вектор Айлиффа
- •Вектор Айлиффа
- •Лекция 8
- •8.1 Сортировка – перестановка элементов линейной структуры
- •8.2 Алгоритмы сортировки Три класса алгоритмов сортировки (включением, выбором, обменом)
- •8.2.1 Сортировка простым включением.
- •9.2 Источники погрешностей
- •9.3 Классификация погрешностей
- •9.4 Терминология
- •FoRmula traNslation (станд.66, станд.77(*))
- •10.0 Бланк для записи текста программы на Фортране
- •10.1 Элементы языка
- •10.2 Типы данных и операции
- •10.3 Описание переменных и констант
- •10.4 Арифметические операции
- •11.3 Операторы присваивания
- •11.4 Оператор continue
- •11.5 Оператор безусловной передачи управления
- •11.6 Вычисляемый оператор передачи управления
- •11.7 Оператор передачи управления по предписанию
- •11.8 Арифметический оператор условной передачи управления
- •11.9 Логический оператор условной передачи управления
- •11.10 Структурный оператор условной передачи управления*
- •11.11 Оператор цикла с параметром
- •Лекция 12
- •12.1 Реализация стандартных структур
- •12.2 Операции ввода/вывода
- •12.3 Операторы ввода/вывода
- •12.4 Оператор формата (format)
- •12.5 Логическая запись
- •12.6 Взаимодействие операторов в/в и оператора format.
- •Расширенная форма оператора read
- •12.7 Управляющие символы при печати
- •12.8 Представление целого и действительного в памяти.
- •12.9 Оператор data
- •12.10 Сравнение текстовых данных
- •12.11 Функции для данных типа character
- •Лекция 13
- •13.1 Программные единицы
- •13.2 Библиотечные и встроенные функции
- •13.3 Оператор-функция
- •Правило соответствия: Списки формальных и фактических параметров согласованы по количеству, типу и порядку следования. Пример
- •13.4 Подпрограмма-функция
- •13.5 Подпрограмма-процедура
- •О соответствии фактических и формальных параметров
- •13.6 Операторы external и intrinsic
- •Пример (параметр-переменная и параметр-значение)
- •14.3 Операторы ввода и вывода.
- •14.4 Параметры операторов ввода и вывода
- •Открытие (присоединение) файла.
- •14.5 Операторы open и close
- •14.6 Оператор read
- •14.7 Оператор write
- •14.8 Другие операторы
7.8 Вектор Айлиффа
A=array[1..L,1..M,…,1..N]of T; - k-мерный массив.
Координата записи A[k,i,…,j] вычисляется по формуле, сод. к-1 умножение.
Трехмерный массив А[L,M,N]
Приведенный индекс для A[k,i,j] – ((N*M)*k+N*i+j)=((M*k+i)*N+j)
Вектор F: Fk=адрес(A[1,1,1])+sizeof(T)*(N*M)*k, k=0..L-1
Вектор Q: Qi=sizeof(T)*N*i, i=0..M-1
Вектор R: Rj=sizeof(T)*j, j=0..N-1
адрес(A[k,i,j])=F(k)+Q(i)+R(j)
Как устроен массив.
m: array[ 1..n1]of T; ( элементы)
mm: array[ 1..n2,1..n1]of T; ( строки, элементы)
mmm:array[1..n3,1..n2,1..n1]of T; (слои, строки, элементы)
Приведенный индекс.
Элемент массива |
Приведенный индекс (смещение) |
m[i] |
i-1 |
mm[j,i] |
(j-1)*n2+i-1 |
mmm[k,j,i] |
((k-1)*n3+j-1)*n2+i-1 |
Вектор Айлиффа
w:=sizeof(T); v:=sizeof(pointer); A1,A2,A3:pointer;
Адрес начала массива |
Адрес элемента массива |
A1:=@m; |
A1+(i-1)*w |
A1:=@A2; A2=(@mm[1],@mm[2],..,@mm[n2]) |
(A1+(j-1)*v)^+(i-1)*w |
A1:=@A2; A2:=(@A21,@A22,..,@A2n3); A2k=(@mmm[k,1],@mmm[k,2],..,@mmm[k,n2]) |
((A1+(k-1)*v)^+(j-1)*v)^+(I-1)*w |
Лекция 8
Хранение данных в оперативной памяти или на внешних устройствах.
В оперативной памяти данные хранятся в структурах.
На внешних устройствах данные хранятся в файлах.
Обработка данных в структурах - вставка, удаление, поиск.
Для линейных структур «массив», «таблица» (а иногда и «очередь») – сортировка.
Для нелинейных структур - обход.
Операцию сортировки иногда применяют к файлам.
8.1 Сортировка – перестановка элементов линейной структуры
Структура – массив, таблица (реализована с помощью массива или в динамической памяти).
Запись:
Mem=record key:integer; info:inf end;
Mass=array[0..L]of Mem;
Считаем далее, что
a:Mass; x:Mem;
Всего элементов массива – n штук.
Для определенности считаем, что элементы массива a должны быть упорядочены по возрастанию значения ключа. Для простоты изложения будем говорить, что a[i]>a[j], если a[i].key>a[j].key.
Метод сортировки устойчив, если он не меняет порядок элементов с одинаковыми ключами.
Сортировка «на том же месте» – без использования дополнительной памяти (Под дополнительной памятью понимают память, объем которой зависит от количества элементов структуры).
Эффективность сортировки определяется объемом дополнительной памяти, если сортировка не «на том же месте», и затратами времени.
Алгоритмы сортировки будем характеризовать двумя параметрами:
С - количество сравнений ключей, М - количество перестановок.
8.2 Алгоритмы сортировки Три класса алгоритмов сортировки (включением, выбором, обменом)
8.2.1 Сортировка простым включением.
Всякая неупорядоченная последовательность данных может быть представлена как «упорядоченная часть» плюс «неупорядоченная часть». Действительно, «упорядоченной частью» может считаться подпоследовательность, состоящая из одного единственного первого элемента всей последовательности, остальные элементы представляют собой «неупорядоченную часть».
Пусть первые k элементов массива a упорядочены.
Первый элемент «неупорядоченной части» a[k+1] включается в «упорядоченную часть» на свое место следующим образом:
Значение a[k+1] записывается в переменную x. Далее «сдвигаются» на одну позицию в направлении возрастания индекса все элементы, большие чем x, до первого элемента, меньшего x. На «освободившееся» место записывается значение, хранящееся в x.
Procedure sort01(var a:Mass; N:integer);
var i,j:integer; x:Mem;
begin
for i:=2 to N do
begin
x:=a[i];
a[0]:=x;{Барьер!}
j:=i-1;
while x.key<a[j].key do begin a[j+1]:=a[j]; j:=j-1; end;
a[j+1]:=x;
end;
end;
Свойства:
Устойчивость;
Естественное поведение (если массив упорядочен, то меньше перестановок)
Смин=N-1; Сср=N2/4; Cмакс= N2/2; Ммин=2(N-1); Мср=N2/4; Ммакс= N2/2;
8.2.2 Сортировка бинарным включением
В отличие от сортировки простым включением, место размещения включаемой записи «вычисляется» с помощью бинарного поиска.
for i:=2 to N do
begin
x:=a[i]; l:=1; r:=i;
while l<r do
begin
m:=(l+r) div 2;
if x.key<a[m].key then r:=m else l:=m+1
end;
for j:=i-1 downto l do a[j+1]:=a[j];
a[l]:=x;
end;
Свойства: Неестественное поведение. Сср=N log2N; Mcp=N2
8.2.3 Сортировка простым выбором
Из неупорядоченной части выбирается самый «маленький» элемент и ставится в «конец» упорядоченной части.
for i:=1 to N-1 do
begin
k:=i;
x:=a[i];
for j:=i+1 to N do if a[j].key<x.key then begin k:=j; x:=a[j] end;
a[k]:=a[i];
a[i]:=x;
end;
Свойства: Число сравнений не зависит от начального порядка С=N2/2
Ммин=3(N-1); Mcp=N log2N; Mмакс=N2/4
8.2.4 Сортировка простым обменом (пузырек)
For i:=2 to N do
begin
for j:=N downto i do
if a[j-1].key>a[j].key then
begin
x:=a[j-1];
a[j-1]:=a[j];
a[j]:=x
end;
end;
Свойства: Сср= N2/2; Мср=0.75 N2
Улучшения: Запоминать, где был обмен
Шейкер-сортировка - чередование направлений второго цикла.
8.2.5 Сортировка Шелла
Понятие h - сортировки (сортируется последовательность элементов с шагом h, повторяется h раз со сдвигом)
Сортировка Шелла - применение h1,h2, hk - сортировки, причем hk=1
Рекомендуются последовательности: ...121, 40, 13, 4, 1 или ... 31, 15, 7, 3, 1
Найти закономерности в этих последовательностях.
Свойство: Доказано, что i-отсортированная последовательность остается i-отсортированной после к-сортировки.
Мср=N1.2
8.2.6 Быстрая сортировка Хоара
«Разделение» массива
i:=1;
j:=N;
Выбор медианы x
repeat
while a[i].key<x.key do i:=i+1;
while x.key<a[j].key do j:=j-1;
if i<=j then
begin
w:=a[i];
a[i]:=a[j];
a[j]:=w;
i:=i+1;
j:=j-1
end;
until i>j;
procedure sort(l,r:integer);
var i,j:integer; x,w:Mem;
begin
i:=l; j:=r; x:=a[(l+r) div 2];
«разделение»
if l<j then sort(l,j);
if i<r then sort(i,r);
end;
8.2.7 Алгоритм сортировка последовательных файлов слиянием.
М-серия – уже упорядоченная последовательность из М элементов
Слияние двух М-серий - дает 2М-серию.
Картинка!
Ссылка на стр.106 Вирта. Там таблица эффективностей алгоритмов сортировки.
Лекция 9
О дискретном представлении чисел в ЭВМ.
9.1 Приближенные числа
Числа, заданные с погрешностью (или с заданной точностью)
Пример:
Вычислить
Обозначим
Приближения:
1). - с точностью 0.02;
2) с точностью 0.003
|
|
|
|
7/5 |
64/15625=0.004196.. |
1/125=0.008000 |
1.000 |
17/12 |
15625/2985354=0.005238 |
1/216=0.0046296 |
-1/6=-0.1666... |
Выводы:
1. Ошибки переносятся и могут быть усилены.
2. Тождественные математические соотношения могут дать различные результаты.
3. Нужно уметь выбирать «лучшую» формулу.