Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Сортировки и связанные с ними задачи.

Читайте также:
  1. I.5.5. Просмотр и анализ результатов решения задачи.
  2. I.5.7. Mодификация (изменение) данных задачи.
  3. II. 1.1. Общая постановка задачи.
  4. Вопрос № 37 Служба судебных приставов министерства юстиции РФ: структура и задачи.
  5. Вывести исходный текст и текст, преобразованный по условию задачи.
  6. Глава 27. Гарантии и компенсации работникам, связанные с расторжением трудового договора
  7. Группы рукопашного оружия и связанные с ними характеристики
  Д.Кнут. Искусство программирования для ЭВМ. тт 1-3. Москва. Мир. 1996-1998 Т.Кормен, Ч.Лейзерсон, Р.Ривест. Алгоритмы. Построение и анализ. Москва. МЦНМО. 1999. Препарата Ф., Шеймос М. Вычислительная геометрия. Москва. Мир. 1989  

 

 

К вопросу о понимании предыдущих лекций. Найти ошибку. ``Доказательство'' того, что любое натуральное число можно однозначно описать не более, чем 20-тью словами (имеется в виду, можно использовать только существующие в языке слова, а не что-нибудь вроде "ШестьсотШестьдесятШесть"). Пусть это не так. Тогда существует множество, являющееся подмножеством натуральных чисел, каждый элемент которого невозможно назвать, использовав менее, чем 20 слов. У всякого подмножества натуральных чисел есть наименьший элемент.Получаем: "Наименьшее натуральное число, которое нельзя назвать менее, чем двадцатью словами, имеющимися в русском языке" - итого 13 слов потребовалось, дабы назвать данное число, которое принадлежит этому великолепному множеству => противоречие.

 

 

HeapSort или сортировка с помощью пирамиды.

Алгоритм основан на промежуточном упорядочивании массива входных данных {A1 ,…, AN }. Мы докажем, что промежуточно-упорядоченный массив (мы будем его называть пирамидально-упорядоченным) обладает свойством максимальности своего первого элемента. Тогда мы отрезаем от массива первый элемент и восстанавливаем утраченное свойство пирамидально-упорядоченности у оставшегося куска. Так, отрезая по одному (максимальному из оставшихся) элементу, мы можем `набрать’ полный упорядоченный массив.

Определение. Массив { A1 ,…, AN } называется пирамидально-упорядоченным, если для всех допустимых i: A[i/2] ³ Ai.

Иначе данное соотношение можно выписать следующим образом:

Ai ³ A2i и Ai ³ A2i+1 (*)

Легко видеть, что данные соотношения задают древообразную структуру, в вершине которой находится первый элемент дерева. Его потомками являются элементы с номерами 2 и 3, и т.д. В получившемся дереве все слои заполнены, кроме, быть может, последнего. Поэтому глубина дерева равна [log N]+1, где N – количество элементов в множестве.

Пусть для некоторого поддерева пирамиды, начинающегося с элемента с индексом i и заканчивающегося элементом с индексом N, выполнено свойство (*) для всех элементов поддерева, кроме вершины поддерева. Т.е. свойство выполняется для всех элементов, имеющих индексы больше i (здесь имеется в виду возможное невыполнения условий Ak ³ A2k и Ak ³ A2k+1 для k=i и его выполнение при k>i).

Определим процедуру Heapify(A,i,N), которая в данном случае подправляет элементы поддерева до полной пирамидально-упорядоченности элементов с индексами от i до N. Здесь A – рассматриваемый массив, i – индекс массива с которого начинается рассматриваемое поддерево, N – количество элементов во всем дереве.

Процедура Heapify(A,i,N) осуществляет следующие действия. Она проверяет условия

Ai ³ A2i в случае 2i£N

Ai ³ A2i+1 в случае 2i+1£N.

Если они выполняются (случаи 2i³N, 2i+1³N легко рассмотреть отдельно), то дальше ничего делать не надо, происходит выход из процедуры. Иначе, выбирается максимальный из элементов Ai, A2i, A2i+1 и выбранный элемент меняется местами с Ai. Не ограничивая общности рассуждений, допустим, что максимальным оказался элемент A2i, тогда после перестановки имеем Ai ³ A2i+1 , при этом элемент A2i+1 не изменился, поэтому свойство пирамидально-упорядоченности будет выполняться и дальше в данном (правом) поддереве. Далее рекурсивно вызываем процедуру Heapify(A,2i,N).

Исходя из построения процедуры Heapify, имеем следующее утверждение

Утверждение 1. Процедура Heapify(A,i,N) выполняется за время O(h(i,N)), где h(i,N) – глубина поддерева в пирамиде из N элементов, начинающегося с элемента с индексом i.

Алгоритм Heapsort(A,N) выглядит следующим образом

 


Дата добавления: 2015-10-30; просмотров: 108 | Нарушение авторских прав


Читайте в этой же книге: Алгоритмы и алгоритмические языки | Представление чисел в ЭВМ | Нижние и верхние оценки. | Постановка задачи | Сортировка пузырьком. | Сортировка слиянием с рекурсией. | Сортировка слиянием без рекурсии. | Доказательство корректности работы алгоритма. | Оценки времени работы алгоритма. | То return QFindStatP (A, p, j, k,N ) |
<== предыдущая страница | следующая страница ==>
Некоторые задачи, сводящиеся к сортировке.| SortB (A, N, M, B)

mybiblioteka.su - 2015-2024 год. (0.01 сек.)