Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lections_pm.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
45.33 Кб
Скачать

Методы программирования.

Преподаватель: Ефимов Сергей Сергеевич.

18.02.10 г.

Автоматы(!) возможны.

  • «Отлично» – 90% - 100% (A)

  • «Хорошо» – 75%-90% (B, C)

  • «Удовлетворительно» – 60% - 75% (D, E)

  • «Неудовлетворительно» - <60% (F)

Методы сортировки. Метод Шелла (сортировка с убывающим шагом).

Количество элементов в массиве - степень числа 2. Элементы группируются с шагом di: d1=8, d2=4, d3=2, d4=1. Трудоемкость пропорциональна O(N3/2). Шаг может быть и другим. Последовательность Седжвика – di = 9*2i – 9*2i/2 +1; di = 8*2i – 6*2(i+1)/2+1. Последовательность до 4000 символов, самая эффективная – Марцина Циура.

Сортировка распределением.

  • Начиная со старших разрядов.

Основная операция – пересылки. Берем элемент и переносим его в необходимую область. Количество пересылок – N*R, где N – число элементов, R – число разрядов; это и есть трудоемкость алгоритма.

  • Начиная с младших разрядов.

Число этапов равно R. первый этап – распределение на 10 групп по младшему, по крайнему правому. Проходим по массиву целиком, выполняя сортировку по второму справа разряду, и т.д. По трудоемкости – такой же, но программная реализация проще.

Карманная сортировка.

  • С двумя массивами.

Область использования – выполняется для ключей, которые располагаются в данной области по порядку. Карманов столько, какого разница между наибольшим и наименьшим значением. Берем значения и раскладываем в нужные «карманы». Зависимость линейная – 1000 элементов – 1000 перемещений. Недостаток – необходимо большое количество памяти.

  • В исходном массиве.

Отыскивается ключ с минимальным и максимальным номером. Берется первый элемент и проверяется, на своем ли он месте.

Сортировка подсчетом.

  • Подсчет сравнений.

  • Подсчет распределений.

Создается массив-счетчик, в котором изначально значения сбрасываются либо в 0, либо в 1 количество совпадений. Если исходное число больше, чем сравниваемое, то в счетчик прибавляется 1, если сравниваемое, то в его счетчик +1. Далее сортируется по отсортированному.

Сортировка квадратичным выбором.

Предположим, что число элементов является квадратом количества элементов. 16  4 элемента. В каждой группе отыскивается максимальный элемент. Выбираются элементы и тоже находятся максимальные. Помещается в конец итогового массива. На следующем этапе отыскивается максимальный элемент. Группа становится короче. В общем виде из √N. метод сортировки работает быстрее. Трудоемкость пропорциональна o(N√N). чем больше N, тем ощутимее разница в трудоемкости.

Сортировка кубическим выбором.

Берется число и извлекается куб. далее схема идентична сортировке квадратичным выбором. Формируются группы из трех элементов. Из последней группы из трех элементов находится максимальный. Трудоемкость о(N√3N).

Пирамидальная сортировка.

Представление дерева в виде линейного массива. Дерево – это не пирамида. Нумеруем элементы дерева слева направо, порядковые номера в линейной записи одномерного массива. В пирамиде есть такое понятие как дочерний элемент и родительский. Значение рассчитывается по формулам 2i и 2i +1 и т.д. В исходном массиве достигается упорядоченность таким образом, чтобы родитель был больше детей. Оценка метода – о(N*log2N).

Сортировка двухпутевыми вставками.

Идея заключается в следующем: берется итоговый массив удвоенной длины. Первый элемент исходного массива помещается в середину массива, далее берется каждый последующий. Сортирует механизм вставок.

Сортировка бинарными вставками.

Есть упорядоченный массив. Очередной элемент, который нужно разместить, нужно найти позицию. Позиция N/2. Сравниваем элемент с тем, который расположен в середине левой части массива. Каждый раз берем пополам и т.д. Каждый раз сравниваем с элементом, расположенным в середине. Элемент либо совпадает, либо не совпадает. Если массив реализован в виде списка, то быстрее. Трудоемкость о(log2N).

Метод Хоара.

Быстрая сортировка Хоара или сортировка с разделением. На каждом этапе массив разбивается на две части и все элементы расположенные левее среднего – меньше среднего.

Сортировки слиянием.

Сортировка простым слиянием.

Есть два упорядоченных массива, из них нужно получить итоговый упорядоченный. N1 и N2. Граничный помещаем. (N1+N2)-1, пропорционально N. линейная зависимость.

Сортировка двухпутевым слиянием.

Получаем упорядоченные пары. И «сливаем» их.

Сортировка естественным двухпутевым слиянием.

18.03.10 г.

Поиск  поиск среди упорядоченных данных и среди неупорядоченных данных.

  1. Обычный поиск.

  2. Быстрый последовательный поиск.

  3. Поиск в самоорганизующейся последовательности данных.

Быстрый последовательный поиск.

Отличается тем, что перед началом поиска добавляется один искомый элемент в позицию n+1. В цикле будет выполняться только одна проверка, организуется как цикл с предусловием либо с постусловием. Проверяется условие совпадения ключа. Проверок будет в два раза меньше. Среднее число сравнений n/2.

Поиск в самоорганизующейся последовательности данных.

На примере стопки книг с неподписанными торцами. Ближе всего будет та книга, которая чаще всего используется.

25 14 18 42 15 6  14 25 18 42 15 6  42 14 25 18 15 6  25 42 14 18 15 6  42 25 14 18 15 6.

Группа методов сортировки среди упорядоченных данных.

  1. Бинарный поиск.

  2. Однородный бинарный поиск.

  3. Фиббоначиев поиск.

  4. Логарифмический поиск.

  5. Поиск по дереву.

Бинарный поиск (методом деления отрезка пополам).

Ищем путем сравнения ос средним. Если текущий ключ меньше 64-го элемента, то далее берем середину либо левого, либо правого отрезка. Тогда ключ считается либо не найденным, либо найденным. i=(L+R)/2. Если X<Ai, то  нет  l=I иначе  R=i. Трудоемкость log2N.

Однородный бинарный поиск.

Модификация предыдущего метода, используется H – длина отрезка. H=H/2. Если X<Ai, то  нет  l=I i=i+H иначе  R=i i=i-H. Трудоемкость log2N.

Сложение, вычитание – «короткие операции»; деление, умножение – «длинные операции».

Фибоначчиев поиск.

Поиск берется с конца, берется последнее число Фибоначчи, не превышающее длины массива. А1… А2… А3… А5… А8… А13… А21… А34. Сравниваем до тех пор, пока не попадем в ситуацию, когда X больше первого. В правом фрагменте берем позицию элементов AFi+Fi-2. Если организовать рекурсивно, то массив передается в функцию. Трудоемкость log2N.

Интерполяционный поиск.

Поиск по словарю.

Л – левая позиция интервала.

П – правая позиция интервала.

Значения ключей от 1 – до 1000.

Кл – 1

Кп – 1000

r = Л + (П-Л)/( Кп - Кл) * (К - Кл). Данная формула предполагает, что ключи распределены равномерно. Трудоемкость log2log2N.

Поиск по дереву.

Каждый узел содержит по три поля минимум, есть left, right и корень. Если сравниваются слова – лексикографическое сравнение.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]