Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
4.6. ПРОСТОЙ АЛГОРИТМ ДЛЯ НАХОЖДЕНИЯ ОБЪЕДИНЕНИЯ НЕПЕРЕСЕКАЮЩИХСЯ МНОЖЕСТВРассмотрим обработку узлов в алгоритме для нахождения остовного дерева (пример 4.1). Возникающая здесь задача преобразования множеств обладает следующими тремя особенностями. 1. Всякий раз сливаются только непересекающиеся множества. 2. Элементы множеств можно считать целыми числами от 1 до 3. Операциями над множествами являются ОБЪЕДИНИТЬ и НАЙТИ В этом и следующем разделах мы изучим структуры данных для задач такого типа. Пусть даны Эту задачу позволяют решить несколько интересных структур данных. Здесь мы познакомимся со структурой данных, благодаря которой можно выполнить за время Заметим, что в алгоритмах поиска, изложенных в разд. 4.2-4.5, предполагалось, что элементы выбираются из универсального множества, много большего, чем множество выполняемых операций. В этом разделе универсальное множество будет приблизительно того же размера, что и длина последовательности выполняемых операций. По-видимому, простейшей структурой данных для задачи типа Операция Чтобы выполнить операцию Этот безыскусный алгоритм можно улучшить несколькими способами. Для одного улучшения можно воспользоваться преимуществом связанных списков. Для другого — понять, что всегда эффективнее влить меньшее множество в большее. Чтобы сделать это, надо отличать "внутренние имена", используемые для идентификации множеств в массиве Рассмотрим следующую структуру данных для этой задачи. Как и ранее, возьмем такой массив Кроме того, возьмем еще массив, называемый РАЗМЕР, такой, что (кликните для просмотра скана) Пример 4.6. Пусть Операция Операцию объединения вида 1. Определяем внутренние имена для множеств 2. Сравниваем относительные размеры множеств 3. Проходим список элементов меньшего множества и изменяем соответствующие компоненты в массиве 4. Вливаем меньшее множество в большее, добавляя список элементов меньшего множества к началу списка для большего множества (строки 10—12). 5. Присваиваем полученному множеству внешнее имя К (строки 13, 14). Вливая меньшее множество в большее, мы делаем время выполнения операции ОБЪЕДИНИТЬ пропорциональным мощности меньшего множества. Все детали приведены в процедуре на Пример 4.7. После выполнения операции Теорема 4.3. С помощью алгоритма рис. 4.14 можно выполнить Доказательство. За каждое выполнение операции ОБЪЕДИНИТЬ будем налагать на перемещаемые элементы одинаковые штрафы, в сумме равные сложности этого выполнения. Так как сложность пропорциональна числу перемещаемых элементов, то величина штрафа, налагаемого на один элемент, будет всегда одна и та же. Основное здесь — это заметить, что всякий раз, когда элемент перемещается из списка, он оказывается в списке, по крайней мере в два раза длиннее прежнего. Поэтому никакой элемент нельзя переместить более чем
Рис. 4.15. Структура данных после выполнения операции ОБЪЕДИНИТЬ. Общая сложность получается суммированием штрафов, наложенных на отдельные элементы. Таким образом, общая сложность есть Из теоремы 4.3 вытекает, что если выполняется
|
1 |
Оглавление
|