Искусство программирования на Си (984073), страница 39
Текст из файла (страница 39)
12.8 г. строки 290 — 299). Если узел 329 таковой имеется. Если лсвыи дочерний узел узла г от- образованис не измснвет высоты дочерних поддеревьев Ь вЂ” красный, а узел с — черный или отсутсзвуст, то, сутсзвуст, то указатель на узел г в его родительском узле по чсрнылс узлам выполняя правукс ротацию ч и обменивая цвета узлов ЗЗ! зв ((ч->ЗьпК(0! == ВВЬЬ ч->1лаК(0)->со1ог == ЕВ ВЬВСЕ) заменяется указателем на правый дочерний узел узла г си и Ь, можно преобразовать этот случай в случай 4. 332 аа (ч->ььпК(1! == авЬЬ (строки 233 — 239).
Следовательно. если узел г является а Ю Случаи 4 (рис 12 8 сс с!роки 301 — 3!О) Узел и ил!с ч->ььпК[11->со1ог == ЕВ ВАСЕ!) листом, он заменяется нулевым указателем. ет правый красный дочерний узел. Выполняем левую 333 ч->со1ог = ЕВ ЕЕП; В противном случае для поиска наследника узла г н ч н с ротацию и изменяем цвета некоторых узлов.
В рсзуль- 334 х = ар(!с — 11; используется у. при этом посс!ценные узлы заносятся в тате высота левого поддерева увеличивается по черным Я~ Организация данник ! Часть ц В ЭТОЙ ГЛАВЕ ° Списки с пропусками лля рассл<атривасмых здссь опс- РЕЭЯмал раций дают такую жс эффсктивность, как и двоич- Мет нос дсрсво. Кромс того, они позволяют повысить В этой главе рассмотрены основы работы с двоичным етоды быстрой сортировки скорость итсрации по узлам с полью хрансния узлов паровом. Вначале был описан процесс линейного попов памяти в отсортированном видс.
Списки с пропус- ка, а затем процссс двоичного поиска по отсортированками, так жс как и хсш-таблицы, имсют граничныс ному списку. Мы обнаружили, что лвоичныс лсрсвья случаи. Но, тсм нс мснсс, можно снизигь всроят- являются болсс эффсктивной алысрнативой лля исность этих случасв до уровня, которым можно про- пользования их с большими, динамичсски мсня<ошиминсбрсчь. Списки с пропусками являются довольно ся списками. Подробно было рассказано о палом рядо новым изобрстснисл<, поэтому они нс так хорошо алгоритмов, прсдназначснных для выполнения изл<снсизвестны, как остальныс мстоды.
ния двоичного дсрсва и провсдсния поиска, и представ- асси икация данных ясна их рсализация на языкс С. Кроме того, рассмог° Для дсрева 2 — 3, пира.нидаяьного дерева и других ти- ° Основы сортировки раны прсимушсства и недостатки двоичного дс сва с пов многопутевых деревьев характерно вствлсннс в указатслячи на родительские узлы и двоичного дсрсва ° Эффсктивныс мстоды сортировки каждом узле дсрсва на два и болсс подзсрсва.
Всс эти типы дсрсвьсв ил<сют недостатки, которыс в обшсм со ссылками. Описаны два типа сбачансирсзваннь<х два- ° Методы со ти овки сливн ки сливнисм ичных дсрсвьсв — А<<1 -дсрсва и дс сва год-б1асл, кото случае дслают их менее эффсктивными, чсм сб<ц<ансированнос дсрсво, но они имеют свои цсли примсрыс за счст нскоторого усложнсния исклочают ~раничныс случаи, характсрныс для обычного двоичного нсния, напримср, хранснис и поиск по дисковым Дэм Корбит йягшоды быппрой ар!пира»пи Глава 13 В сортировке спасаем» извлече ин элементы извпекзютсп нз неупщммче мого наеюрз и всгавлпютсп в упорпдоченный набор Шаг 2 Переносиы следующий ыинимальный элемент из гюупорвдо минога нзбара в упсрпдоченный.
Оргаггизоиил донник 1 1 часть й ПРИМЕЧАНИЕ сн вопросы, удобнее пользоваться базами данных. Кол<- [кпыгзь< — это осыпка ыа книгу Гье Аг< ог соптгтыгег панин, которые занимаются разработкой баз данных. Ргодгаптптгпд, ьгоуыпте Зг 5огвпд апс<5еагсьгпд, Гт.е. Кпы1Ь, потратили сотни тысяч или даже миллионы долларов на А<<к<!поп-хлтез<еу, аеас<год МА, 1973. опрслслсние наиболее эффективных путей упорялочс- 1 Шаг ! Переносим минимщпный 8 элемент из неупарндоченнпш набора е ния данных.
Кроме того, может оказаться, что перел 4 3 упарщо енныи Типы алгоритмов сортировки вами стоит задача выбора, а не сортировки. Выбор яв ляется более простой операцией, чем сортировка. ОзНижс приведен перечень наиболес об<них;шгоритмов, нако иногда все же придется писать функции сортирогкоторыс используются в разли тных приложениях: ки.
Может быть, вы работник компании, которая ° Вмушренняя горгпироека — это алгоритм, который в занимается разработкой баз данных, и вам предстоит 4 3 1 процессе сортировки использует только оператив- созлать фантастический способ оперативной соРтиРовную память [~ЦУ[ компьютера и который примана- ки ланныл, напрпл<ер, в случае, когда пользователь лас! 7 ется во всех случаях, за исключением олнопроход команлу на сортировку данных. которые не ил<еют ука ного считывания данных и однопрохолнои записи затсля (инлексау Может быть, вы рабо<астс нтлт соз.ш пнем драйвера лля графической платы и вам нсобхозп Шаг 3 Переносим следующий мо упорялочивать многоугольники по мно! пт< 4 1,3 ниниызпьнын мгщгент в упорпдачен ° ВнешнЯЯ горю"Робка — это алгоритм, котоРый при измерениям, Посколькл очевилно, что ла <ная оперы;пк проведении соРтиРовки использУст внсглнюю па- должна проволиться за мит<т<л<шзьно возможное врсчн.
7 мять, хак правило, жесткие лиски (в стаРых сиота работа с базои ланных исключается. Имеется л<ножсствгт Организация данны» Методы быстр< н <ортиронм Часты И в Глава 13 В сортировке Способы разделенны на даа ззчтпггт на клада» шаге ны разе»вавы неупорядочш«ный набор на две юст» Это типичнаи стратепш '<шзреляй н власшуй', которая»шюльт<ичся дп» упршиения слошшк зады йз эгон ш»е ны раэбиеае» «у»ь ы'«нный набор на два поднабсра штерне брвт . ъничг приз»рис пс половине зле»витав пяти»в<мы<ага нзбарз Элшюнты группируются по вшшчине тают обрезан, чта неныане зле»виты пападзют в левый гаднзбор, а баьшие — а правый теперь каган» нз лса Иььшь ршбнвзен шае на две чаши Обраппе »ни»анне что ч»хчи «ти»Ч набор теперь почти упор<шатен Последнии раз разе»»вен ь н У~<ш, которые .
ьгн несколько зле»витав, н ив»типов. Алгоритмы порядка 0(п') Рассмотрим в первую очередь внутреннюю сортировку, начиная с алгоритмов порядка 0(л'). Возможно, чтобы вы понимали, что оптимальность нс является прямыь< слс;кгвисм высокой скорости работы.
Может ноказагься, что время проведения сортировки обратно пропорционально числу )Ч, т.с. зависит от )хт линсино Действительно, если обьсм набора данных достаточно велик, то прель<лушсе утвержлсние вполне справедливо По помните, что 0-нотания говорит только об асимлтотичсском поведении алгоритмов, а нс о лсйствительной их эффективности. Казалось бы, не совсем логично, но алгоритмы порялка О(л') лля сортировки небольших наборов данных оказываются более оптимальными. Это очень важно, поскольку алгорить<ь< с лучшими О-нотаииямн часто разбивают большие наборы данных на маленькие наборы, а загсм используют алгоритмы порядка 0(и').
Так, если сортирустся десять миллионов ,„,...«ЧДЕМЕНтоеи РУГОРИтя<,ЬЮжст РаЗбИтЬ ЭтОт Наба На Мнкыаэ находим наил<еньший элемент в наборе и заменяем первый элемент в наборе найлснным элементом. Затем находим слсдуюший минимальный элемент и ставим его на второе место. Далее продолжаем описанный пролссс до полной сортировки набора. Этот метод потому и называется сортировкой методом выбора, что он основан на выборе миниь<ачьного элемента в сшс неупорядоченной части набора данных.
Двунаправленная сортировка методом выбора (которая иногда называется сортировкой лсремсшиванисм) является вариантом сортировки ь<стодом выбора, в котором на каждом этапе находятся как л<инимальнь<й, так и максимальнь<й элементы, которые затеи< перемешаются на соотвстствуюшие позиции. Поиск ь<инимального и максиь<ального элементов особыл< способом может позволить повысить эффективность сортировки. Вместо того чтобы сравнить уже найденные л<инимальный и ь<аксимачьны(< элементы с каждым элеи<ситом неупорядоченного списка, сравниваем элементы нсупорядо- Ий Орсвхизацих бвххнх Чсжсмы бысжрси сорслириххи Дядья в Часть й Глава 13 Й$И Можно также выполнять двунаправленную п)зырь- компьютеры 386-и с~пни с объемом ОЗУ 4 Мб.
Даже нв Однажды сестры Джонс сидели на ст) пеньках перел стоты они носят ~олька белые носки. В этом случае им ков) ю сортировку (которую иногда называют сортиров- таких компьютерах программа, аснаввнна» нв пузырька- домом и завтракали. На завтрак они сзслази яичницу, не приходится искать пару к носку и ничего страшно- кой персмешиваннсм).
Первая итсрапия проходит так но никто из них нс любил желтка. Поэтому они отде- го, сели один носок потеряется. Но поскольку носки уже нв грани вазмажнага. Многие пользователи жаложе, как и в станлартной пузырьковой сортировке, а вто- ляли желтки и выбрасывали их. имеют разные размеры, их необходимо отсортировать вались на скорость работы. На можно представить себе, рая итерапия проходит снизу вверх. Восходящая итера- чта при зхспаненциальнам пасте во времени производи- Дик выглянул в окно. "Опять играетесь с сдай! по длине. Мэрилин придумала способ сортировки нос- пия позволяет бальшилс элементам "утонуть" только на тепьнасти вычислительной техники скорость рабаты пра- Смотрите у меня!".
Затем он пошел и взял очки. Они ков (рис. !3.4). один уровень, а меньшим элементам "всплывать" быст- "Раммы должна все более и более возрастать. На, хах были настолько сильными, что в них за фут уже нельзя рсе. Это является преимушеством только в том случае, ни странно, справедливо обратное утверждение. Дела в было ничего увидеть. (Дик взял очки просто потому, что там, что объем библиотеки тоже рас па знспаненцивпь- !. Взять носок из корзины.
сели большая часть малых элементов в исхолном спис- П „в них девушки вьплядслн смешными и они усложняли ному закону. Поэтому, скажем, при запросе "Показать кс расположена внизу списка. Как в отношении коли- все видеофильмы о с или с++, отсортированные гю дате' любое занятие. Но очки позволяют провести аналогию 2 Взять носа~ на полу (сели на полу есть носки) и чества сравнений, так и в отношении количества перс- в 1989 г.
было бы получено всего восемь фильмов, на х с компьютсралси, поскольку компьютеры могут исслс- провсрить, меньше ли сто размер Размера носка в становок пузырьковая сортировка является алгоритмом 1994 г. была бы уже окопа 800 фильмов. В конце кан- довать только один нли два элемента за один раз. Они руках. порялка 0(пх). Наилучший эффект постигается в слу- цав, корпорация заменила зту систему какай-та друсаи нс могут, как мы, сразу просмотреть весь набор и наи- 3.
Если размер носка из корзины меньше размера носсистемаи с гораздо меньшими возможностями. Пузырька час, когда список почти отсортнрован и малые злсмсн- ти олинаковыс элементы.) В этих очках вес, шо пато- ка, взятого с пола, передвинуть вес носки на полу, вав сортировка погубила проект стоимостью в один миллион ты в конде списка отсУтствУют. И Сепжвик (Ьсййеш(сй), долларов. Н тому времен» в рамках пакета Оуа(х Масона быс, дится лальшс одного фута, было просто разлзытым гшт- освободив место для нового носка.