Студопедия

Главная страница Случайная страница

Разделы сайта

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






  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • Пирамиды (heap - tree)






    Пирамида - законченное бинарное дерево, имеющее упорядочение узлов по уровням.

    Различают максимальные пирамиды и минимальные.

    В максимальной пирамиде родительский узел больше или равен каждому из своих сыновей. Корень содержит наибольший элемент.

    В минимальной пирамиде родительский узел меньше или равен каждому из своих сыновей. Корень содержит наименьший элемент.

    Пирамида используется в тех приложениях, где клиенту требуется прямой доступ к минимальному элементу.

    Пирамида является списком, который хранит данные в виде бинарного дерева.

    Все алгоритмы обработки пирамид сами должны обновлять дерево и поддерживать пирамидальное упорядочение.

     

    Преобразование массива в пирамиду

    Индекс последнего элемента пирамиды равен n -1.

    Индекс его родителя равен (n -2)/2, и он определяет последний нелистовой узел пирамиды. Этот индекс является начальным для преобразования массива.

    Рассмотрим целочисленный массив

      int A[10] = {9, 12, 17, 30, 50, 20, 60, 65, 4, 19}; Индексы листьев: 5, 6,..., 9. Индексы родительских узлов: 4, 3,..., 0.
      Родитель А [4]=50, он больше своего сына А [9]=19 и поэтому должен поменяться с ним местами.
      Родитель А [3]=30, он больше своего сына А [8]=4 и поэтому должен поменяться с ним местами (если меньших сына два, то меняется местами с наименьшим сыном).
      На уровне 2 родитель А [2]=17 уже удовлетворяет условию пирамидальности, поэтому перестановок не производится. Родитель А [1]=12 больше своего сына А [3]=4 и должен поменяться с ним местами.
      Процесс прекращается в корневом узле. Родитель А [0]=9 должен поменяться местами со своим сыном А [1]. Результирующее дерево является пирамидой.

     

    Включение элемента в пирамиду

      1. Новый элемент добавляется в конец списка.
      2. Если новый элемент имеет значение, меньшее, чем у его родителя, узлы меняются местами.
      3. Новый родитель рассматривается как сын, и проверяется условие пирамидальности для более старшего родителя.
      4. Процесс сканирует путь предков и завершается, встретив родителя, меньше чем новый элемент, или достигнув корневого узла.

     

    Удаление из пирамиды

    Данные удаляются всегда из корня дерева.

      1. Удалить корневой узел и заменить его последним узлом.
      2. Если новый корневой узел больше любого своего сына, то необходимо его поменять местами с наименьшим сыном.
      3. Движение по пути меньших сыновей продолжается до тех пор, пока элемент не займет правильную позицию в качестве родителя или пока не будет достигнут конец списка.

     

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

    1. Преобразовать массив в пирамиду.

    2. Последовательное исключение A [0] и включение его в A [ n -1], A [ n -2],..., A [1]. (Этот алгоритм основан на том, что после исключения элемента из пирамиды элемент, бывший до этого хвостовым, замещает корневой узел, а его место освобождается.

    В процессе пирамидальной сортировки очередные наименьшие элементы удаляются и последовательно запоминаются в хвостовой части массива. Таким образом производится сортировка по убыванию.

    Пример:

    Дан массив: int A[]={50, 20, 75, 35, 25}; Исходная пирамида
    Удалить 20 и запомнить в A [4] Удалить 25 и запомнить в A [3]
    Удалить 35 и запомнить в A [2] Удалить 50 и запомнить в A [1]

    Поскольку остался только корень, то массив отсортирован: А = 75, 50, 35, 25, 20.

    Вычислительная эффективность

    Массив, содержащий n элементов соответствует законченному бинарному дереву глубиной .

    Преобразование массива в пирамиду требует n /2 операций, каждая из которых требует не более k сравнений.

    Вторая фаза сортировки требует выполнения n -1 операции, которая в худшем случае требует k сравнений.

    Худший случай сложности пирамидальной сортировки

    .

    Сложность алгоритма имеет порядок .

    Пирамидальная сортировка не требует дополнительной памяти (для сравнения: при турнирной сортировке требуется создание дополнительного массива).

    3.5. Сбалансированные деревья






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.