
Информатика_л_13.ppt
- Количество слайдов: 14
Алгоритмы сортировки и поиска в абстрактных структурах данных Лекция № 13 28 ноября 2014 года Бабалова И. Ф. 1
Сортировка списков Сортировка в списках ни чем не отличается от сортировки массивов чисел, строк. Все методы сортировки применимы для сортировки списков. Все перемещения выполняются только для информационной части структуры данных DAB ABD BAD nil Поля ссылок не перемещаются! 2
1 2 4 p 1^. lis. title>p 2^. lis. title F 2 G 2 A true Sort_list B noswap: =false Pstart C D 4 D false p 2: =p 1^. next G 2 E D 4 F 1 tt: =p 1^. lis p 1: =Pstart F 3 p 1^. lis: =p 2^. lis noswap: =true noswap C 1 p 2^. lis: =tt true p 2<> nil B 3 p 1: =p 2 sort B 3 A 3 G p 2: =p 2^. next end F 1 Сортировка списка 3
Сортировка списка procedure Sort_list(var pp: Plist); var p 1, p 2: plist; tt: D_d; nowswap: boolean; begin Repeat p 1: =pp; p 2: =p 1^. next; nowswap: =true; while(p 2<>nil) do begin if (p 1^. lis. Title>p 2^. lis. Title) then begin nowswap: =false; tt: = p 1^. lis; p 1^. lis: = p 2^. lis; p 2^. lis: =tt; end; p 1: =p 2; p 2: =p 2^. next; end; Until nowswap; end; Определение типа данных Type str=string[30]; D_d=record Title: str; Fnm, Secnm: str; Number: word; end; Plist=^List; List=record lis: D_d; next: Plist; end; Пример сортировки списка из записей 4
Алгоритм 421 345 128 275 421 345 275 128 421 128 345 275 128 275 345 421 Алгоритм основан на выделении каждого разряда целого числа АЛГОРИТМ РЕАЛИЗУЕТСЯ В ЭТОМ ПРИМЕРЕ ДЛЯ СОРИРОВКИ ПО ВОЗРАСТАНИЮ 5
ПОРАЗРЯДНАЯ СОРТИРОВКА procedure sortdigit(var res: plist); var c, i, x, s, n: integer; lp, ln, p, start 1: plist; begin c: =0; lp: =nil; repeat s: =res^. date; s: =s div 10; start 1: =nil; c: =c+1; for i: =0 to 9 do begin p: =res; while p<> nil do begin x: =p^. date; for n: =1 to c-1 do x: =x div 10; x: =x mod 10; if x=i then begin new(ln); ln^. date: =p^. date; ln^. next: =nil; if start 1=nil then start 1: =ln else lp^. next: =ln; lp: =ln; end; p: =p^. next; end; res: =start 1; until s=0; output(res); ; // вывод списка end; 6
Выводы по работе со списочными структурами данных 1. 2. 3. Алгоритмы сложнее, чем для обработки массивов Дополнительный расход памяти на указатели Размещение списочных структур только в динамической памяти 4. Размер требуемой памяти надо контролировать: {$ M A, B, C} – A – максимальный размер статической памяти, B - нижняя граница Heap, C – верхняя граница Heap. Стандартные размеры: {$M 16384, 0, 65536} 5. Реализация алгоритмов со списками использует столько памяти, сколько нужно для хранения текущего списка 6. Удаление, вставка, сортировка элементов требуют меньших затрат времени 7
Алгоритмы поиска Последовательный поиск. Предполагается, что есть некоторый массив ключей K[i] записей A[i]. Ищется K[i] =key. В алгоритме последовательно проверяются все имеющиеся ключи. Оценка эффективности поиска через p (i) - вероятность извлечения i – ой записи. p(1)+ p(2)+ p(3)+……. P(n) =1, если искомый ключ есть в =1 структуре. Среднее число сравнений: p(1)+2* p(2)+3* p(3)+……. n* P(n) Минимизация поиска обеспечивается соотношением: P(n) ≤…… ≤ p(3) ≤ p(2) ≤ p(1) Из этого неравенства видно, что упорядочивание данных существенно увеличивает скорость последовательного 8 поиска.
Поиск в последовательностях, списках и таблицах 1. Последовательный поиск - это перебор элементов структуры данных до нахождения искомого значения A 1, A 2, ……. . Ai, ……An Успешный поиск потребует Задача поиска: Найти требуемый элемент Аi в последовательности, списке, таблице сравнений , неуспешный c ≈ n Readln(k); I: =0; Реализация простейшего последовательного поиска Repeat I: =I+1; Until A[ I ]=k; 2. Бинарный поиск потребует сравнений с≈log 2 n. Решение задачи улучшается , если последовательности упорядочены. Алгоритм метода приведен в лекции 8. 9
Абстрактные типы данных для организации поиска 1. Связанные списки. Это последовательность из записей со ссылками. Данные в поле списка называются записью, так как они содержат обычно несколько полей данных разного типа Запись Key 2. Файлы. Последовательно организованные записи 3. Таблицы. Key Запись Каждая запись в этих структурах должна быть снабжена некоторым ключом, который позволит найти ее. 10
Определение табличных структур данных в языке Для объявления таблицы поиска можно воспользоваться определением двумерного массива или массива из указателей на списки любого типа. Например, type Vector. P = ^Vector; Vector = array of integer; Table. P=^Table; Table = array of Vector. P; var tp: Table. P; aa, ba: Vector; aa 1 aa 2 aa 3 ………. . Определенная структура ba 1 ba 2 ba 3 … Действия для организации работы с этой структурой 11
begin { выделение памяти для указателей строк} setlength (tp, m); { выделение памяти для элементов строк} For i: =0 to m-1 do setlength (tp^[i], n); Здесь выполнено выделение памяти для m строк и n элементов в каждой строке. Для динамического массива можно выполнить формирование каждой новой строки своей размерности. Обработка элементов таблицы обеспечивается записью tp^[i]^[j], где i, j индексы строк и столбцов таблицы. Освобождение памяти осуществляется в обратном порядке: setlength (tp^[i], 0); setlength (tp, 0); Замечание! Все динамические структуры нужно удалять из памяти 12
Индексно-последовательный поиск Любая отсортированная структура дополняется таблицей или списком индексов. Индекс выбирается в соответствии с размером структуры. Если список содержит количество записей, кратное K, тогда в списке индексов будет каждый K-ый индекс. 23 указатель 8 56 ………. 14 K=4 21 Шаг для индексов может быть любым 23 Поиск в таких структурах выполняется по меньшей таблице индексов 37 34 41 56 запись ……… ……. . ……… запись Задачи удаления и вставки элементов должны решаться алгоритмически. Каждый удаляемый элемент может снабжаться признаком и физически не перемещаться. Вставить элемент можно на место удаленного. 13
Организация поиска в табличных структурах Последовательный поиск Ключи 1 2 … 5 … 8 …. … 10 Данные 5 2 … 10 … 8 Упорядочены ключи, но не данные Создаем две структуры данных в виде массива или списка. Упорядочиваются только ключи. Данные не упорядочены. Основная проблема в алгоритмизации обеспечение различных ключей для разных данных. Метод транспозиции 1 2 3 4 5 Табличные данные Выполняется подсчет количества поисков каждой строки таблицы. Те строки, которые вызываются чаще, перемещаются в начало таблицы 14
Информатика_л_13.ppt