
- •Грубый подход определения макс. Потока:
- •Классификация:
- •47. Цель оптимальной сортировки:
- •48. Дано множество из n чисел; нужно найти тот его элемент, который будет k-м по счѐту,
- •Сбалансированное многопутевое слияние
- •53. Особенности естественного слияния. Сортировка, при которой сливаются 2 упорядоченные серии – упорядоченное слияние.
- •55. Похожа на многофазную сортировку. Отличие заключается в самом процессе слияния:
- •Недостатки хеширования:
- •Классы хеш-функций:
- •65. По сравнению с методом поиска с возвратом метод ветвей и границ требует:
- •Разновидности метода решета
- •68. Эвристические алгоритмы
- •Эвристический подход для улучшения решения задачи о шахматном коне
- •Характеристика жадных алгоритмов
- •Жадные алгоритмы для задачи о рюкзаке
- •69. Файл - это совокупность элементов данных, сгруппированных для хранения и использования в информационно-вычислительных системах.
- •Логическая и физическая структура файла
- •71. Изучение np-полных задач связано с так называемым вопросом р≠np. Этот вопрос был поставлен в 1971 году и является сейчас одной из наиболее интересных и сложных проблем теории вычислений.
47. Цель оптимальной сортировки:
– минимизация числа сравнений ключей при сортировке n элементов –минимизация слияний т элементов с n элементами,
–минимизация выбора i-го наибольшего элемента из неупорядоченного набора n элементов
Сортировка с минимальным числом сравнений
Варианты постановки задачи сортировки посредством сравнений.
Если есть n грузов и весы с двумя чашами, то каково минимальное число взвешиваний,
необходимое для того, чтобы расположить грузы по порядку в соответствии с весом, если
в каждой чаше весов помещается только один груз?
Используем дерево сравнений. Каждый внутренний узел содержит два индекса "i : j" и
означает сравнение ключей Кi и Kj. Левое поддерево этого узла соответствует
последующим сравнениям, при Кi < Kj, а правое поддерево — тем действиям, если Кi >
Kj. Каждый лист дерева содержит перестановку Кi, a это обозначает, что было
установлено упорядочение К1 < К2 < • • • < Кп.
Возможны и избыточные сравнения; например, на рис. нет необходимости сравнивать 3:1, поскольку из неравенств К1 < К2 и K2 < K3 следует К1 < Кз.. В дереве сравнений для сортировки n элементов без избыточных сравнений имеется ровно n! внешних узлов
Три метода требуют меньше всего сравнений:
бинарные вставки, выбор из дерева и простое двухпутевое слияние.
Для метода выбора из дерева верхняя оценка числа сравнений либо такая же, как для
метода бинарных вставок, либо такая же, как для двухпутевого слияния, в зависимости от
вида дерева.
Поищем теперь "мини-средние" процедуры, минимизирующие среднее число сравнений в
предположении, что входные данные случайны, т. е. все перестановки равновероятны.
В общем случае среднее число сравнений для метода сортировки есть длина внешнего
пути дерева, деленная на n!. (Напомним, что длина внешнего пути — это сумма всех
расстояний от корня до каждого из внешних узлов) Минимальная длина внешнего пути достигается на таком бинарном дереве с N внешними узлами, у которого имеется 2q — N внешних узлов на уровне q - 1 и 2N – 2q на уровне q, где q = [lg N]. (Корень находится на нулевом уровне.) Таким образом, минимальная длина внешнего пути равна
• (q - 1)(2q - N) + q(2N - 2q) = (q + 1)N - 2q.
• минимальная возможная средняя длина пути не может быть меньше lgN и больше lgN + 0.0861.
48. Дано множество из n чисел; нужно найти тот его элемент, который будет k-м по счѐту,
если расположить элементы множества в порядке возрастания.
Такой элемент называется k-ой порядковой статистикой. минимум (minimum) — это порядковая статистика номер 1. максимум (maximum) — порядковая статистика номер n-1. Медианой (median) называется элемент множества, находящийся (по счѐту) посередине между минимумом и максимумом. Точнее говоря, если n нечѐтно, то медиана — это порядковая статистика номер k-(n+1)/2, а если n четно, то медиан даже две: с номерами kn/2 и k-n/2+1. Можно ещѐ сказать, что, независимо от чѐтности n, медианы имеют номер k= (n+1)/2 и k= (n+1)/2 . В дальнейшем мы будем называть медианой меньшую из двух
(если их две). Одно из очевидных решений задачи вычисления порядковых статистик состоит в
следующем: упорядочить исходную последовательность в порядке не убывания элементов и взять k-й элемент.
Методы решения задач порядковой статистики
Минимум или максимум можно найти за n-1 сравнение. Быстрее нельзя. Одновременный поиск минимума и максимума можно осуществить за 3 n/2 -2сравнений. порядковую статистику за время 0(n) можно найти с помощью:
– вероятностного алгоритма
– детерминированного алгоритма
Эти алгоритмы асимптотически эффективнее очевидного подхода "упорядочи множество
и выбери нужный элемент",
Особенности реальной задачи
1. Если нескольких элементов имеют одно и то же значение, и они должны сохранять
порядок следования, то упорядочение необходимо выполнить одним из методов
устойчивой сортировки, в противном случае можно использовать любой метод
сортировки.
2. Если отыскивается одна или несколько порядковых статистик, выгоднее применение
иного алгоритма.
3. На выбор алгоритма влияет число элементов n исходной последовательности.
4. Если исходная последовательность должна быть сохранена, то для отыскания
порядковых статистик придется создать дополнительный массив ключей. Это выгодно,
когда элементы исходной последовательности имеют сложную структуру и их
перестановки требуют значительного времени.
Алгоритм
(1) Наугад выбрать некоторый элемент A[s] и записать его значение в переменную x.
(2) Просматривая массив слева направо, найти элемент A[i]: A[i] x.
(3) Просматривая массив справа налево, найти элемент A[j] : x A [j].
(4) Если i ≤ j, обменять найденные элементы A[i] и A [j] между собой, на единицу
увеличить i и уменьшить j. После этого вернуться к шагу (2). Иначе – последовательность
разбита на две группы, Если количество элементов в группе с k-ым элементом <2, то
выход.
(5) Иначе переход к группе с k-ым элементом и рекурсивно выполняются шаги 1-4.
Существует линейный метод нахождения порядковых статистик, обеспечивающий в
самом худшем случае время выполнения порядка O(n). Этот метод основан на поиске «хорошего» опорного элемента и применяется для последовательностей с большим
числом элементов.
Пример Найдѐм 3-ю порядковую статистику.
Возьмѐм в качестве опорного элемента на первой итерации А(s)=37 в качестве опорного элемента на второй итерации А(s)=33 в качестве опорного элемента на третьей итерации А(s)=12
3-я порядковая статистика =33.
25 57 48 37 12 92 86 33
25 33 48 37 12 92 86 57
25 33 12 37 48 92 86 57
25 33 12 37 48 92 86 57
25 12 33 37 48 92 86 57
12 25 33 37 48 92 86 57
49. Специфика любого алгоритма внешней сортировки – как разделить последовательность на части и их слить (объединить).
Операции внешней сортировки: 1)находить нужный блок в памяти: перемещение считывающей головки. 2)производить считывание данных по каналу ввода-вывода.
3)в оперативной памяти осуществляются операции сравнения и перемещения. 4)выполняется запись во внешнюю память.
Параметры внешней сортировки: 1)объем оперативной памяти. 2)тип, число и объем запоминающих устройств внешней памяти.
3)число каналов ввода-вывода. 4)число и длина записи. 5)время выполнения операций в оперативной памяти.
Упорядоченный отрезок(серия) – последовательность элементов, для которых выполняется условие упорядоченности.
Длина отрезка – количество элементов в нем.
Прогон(проход) – прохождение файла в одном направлении со считыванием данных в память и
возвратом обратно.
Сложность внешней сортировки состоит из времени: 1)внутренней сортировки частей файла.
2)многократное считывание и запись данных на диск. 3)ходов головки между актами считывания.
4)действий в памяти по упорядочению частиц.
Факторы, учитываемые при выборе метода сортировки:
1)размер сортируемого массива => требуемое количество оперативной памяти. 2)длина ключа.
3)вид ключей. 4)исходное распределение данных.
5)длина записей и логический порядок следования.
Если длина серии фиксирована, то слияние простое. Сортировка, при которой всегда сливаются 2 самые длинные из возможных серий, наз. естественным слиянием.
Внешние сортировки
1)Сортировки слиянием: а) сорт простым слиянием, двухфазная двухпутевая сорт., однофазная двухпутевая сорт., многопутевое сбалансированное слияние, многопутевое слияние и выбор замещением. б) естественное слияние, естественное многопутевое слияние, многофазная, каскадная, осциллирующая
сорт. в)улучшенные методы – рекурсивный алгоритм сортировки, сорт. методом поглощения.2)Другие методы – сорт. с использованием специальных структур, разделительная (поразрядная) сорт., быстрая альтернативная внешняя сортировка.
50. Характеристики сортировки слиянием:
1) Количество вспомогательных файлов, на которые идет распределение серии. N – количество вспомогательных файлов, N=2 – двухпутевая сорт слиянием, N>2 – многопутевая. 2) Количество фаз в реализации сортировки. Фаза – действие по однократной обработке всего множества. Проход(этап) – наименьший процесс, повторение которого составляет процесс сортировки. Двухфазная – 1 фаза-распределение, 2 фаза-слияние. Однофазная - эти две фазы объединены в одну.
С одной стороны, однофазная сортировка более эффективна, чем двухфазная, т.к. фаза распределения фактически не относится к сортировке(во время этой фазы эл-ты не переставляются и не упорядочиваются), а кол-во операций переписи данных такое же, как и на фазе слияния. Но с другой – количество вспомогательных файлов, которые требуются для однофазной сорт, больше, чем для 2-фазной.
Cортировка простым слиянием.
На 1 шаге упорядоченные отрезки имеют длину, равную единице, т.е. состоят из одного элемента. Затем они объединяются и в случае 2-путевого слияния вновь сформированные отрезки будут состоять из 2 эл-тов, а в случае многопутевого – из N эл-тов. Длина серии в алгоритме простого слияния зависит от кол-ва вспомогательных файлов, на которое идет распределение серий. Если k – это номер прохода, а N – кол-во вспомогательных файлов, то длина серии определ-ся формулой N**k. На первых проходах длина серии растет медленно, что значительно сказывается на быстродействии алгоритма. Поэтому для улучшения алг-ма слияний можно использовать внутреннюю
сортировку в качестве вспомогательной. В этом случае на первом проходе часть данных переписывается в оперативную память (в массив), там упорядочивается и тем самым формирует серию большой длины. Тогда для дальнейшего слияния потребуется значительно меньше проходов. Этот способ упорядочения данных наз. простым слиянием с использованием внутренней сортировки.
Сортировка простым слиянием заканчивается, если: --после фазы слияния длина серии не меньше количества элементов в файле;
--на фазе слияния осталась ровно одна серия;
--второй по счет вспомогательный файл для однофазной сортировки после распределения серий остался пустым.
Эта сортировка использует следующую подзадачу: есть два отсортированных массива, нужно сделать (слить) из них один отсортированный. Алгоритм сортировки работает по такому принципу: разбить массив на две части, отсортировать каждую из них, а потом слить обе части в одну отсортированную. Сложность = O(n*log n).
51. 1)Последовательность разбивается на 2 половины: B и C. 2)Части B и С сливаются, причем одиночные элементы этих частей образуют упорядоченные пары.
3)Полученная последовательность A опять разбивается в соответствии с 1), 2), но сливаются упорядоченные пары => упорядоченные четверки. 4)Повторяя предыдущие шаги, сливаем 4-ки в 8-ки и т.д., пока не будет упорядоченной последовательности.
52. Внешняя двухпутевая однофазная (сбалансированная) сортировка
Есть и другой вариант реализации алгоритма сортировки слиянием, когда серии меняются по закону простого слияния. Поскольку длина серии на каждом этапе известна, нетрудно обеспечить прямую адресацию элементов, когда сливаемые серии расположены не на разных концах вектора, а друг за другом: расстояние между их началами составит ровно 2k-1 на k-м этапе. Соответственно, и запись результирующей серии происходит всегда в хвост уже размещенных в области вывода элементов. Этот механизм называется простым однопутевым слиянием.