Главная » Просмотр файлов » Искусство программирования на Си

Искусство программирования на Си (984073), страница 43

Файл №984073 Искусство программирования на Си (Искусство программирования на Си) 43 страницаИскусство программирования на Си (984073) страница 432015-07-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 43)

Даже обобшенный метол по- ° Сравнение деревьев с лвоичными древовилными структурами и хеш-таблицами методом линейных вставок: сортировка двоичными разрядной сортировки не является панацеей, посколькз вставками дает большую скорость, а сортировка мего- большие размеры ключей снижают эффективность пораздом Шелла дает еше большую скорость. Поэтому лля рядной сортировки до уровня стандартных методов сорнебольших файлов лучше всего использовать не метод тировки сравнением, например, быстрой сортировки. линейных вставок, а метод Шелла. При очень малых И наконец, дисковые методы сортировки часто исразмерах файлов скорость сортировки можно повысить пользуют метолы множественного слияния.

Это явля- Описанные в прелылушей главе структуры данных на части (в предыдушем примере это были различные Органах>цня данньг Деревья И>()к(ям Часть ц Глава тв Одна из особенностей такого лерева состоит в том, пор, пока не придет время с ним работать. Мы будем да программа поиска обнаруживает ключ, необхолимо менение возможно также и в других местах программы. что его форма определяется только ключами, которые создавать листья и полдеревья определенных структур. убелиться, что нашелся именно тот ключ (поскольку Л если требуется удалить поддерево из памяти, удаляоно содержит на данный момен!.

Функция поиска ска- Обычно указатели на различные структуры несовмевозмо>кно несовпадение ни с одним ключом в дереве). ется текущий узел, все его листья и подузлы. Ниже нирует ключ так, чтобы однозначно идентифицировать «тимы. Однако можно создать первый элемент казкдой Для этого используются поля )«еу и )еп )«еу. Они фак- показано, как можно удалить узел: его среди всех других ключей в лереве, и ничего более. структуры одного и того же типа. Затем С позволит нам тически указывают на копию ключа, которую мы разЭто означает, что, в отличие от большинства других переключить указатель на структуру к )казателю на мес>или в памяти, так что этот модуль не н)эклается в ппапле тоЫ Цьапгоу по«!е (Ег1е ролппаг поде) структур данных, не затрачивается время на переупо- первый член, и тогда указатели налистъя и поддеревья сопровождении.

Кроме того, нужно помнить, что про- гт (попе == о) рядочение дерева путем вставки и удаления — нет не- станут совместимыми. Кроме того, если первый член грамма вставки должна выполнить обратный ход, ког- гегпгп! обходимости в программировании вычурной логики. даст сведения о типе структуры, определяется сам этот да введен новый ключ, для этого используется поле член, а затем — тип структурь!.

Итак, структура будет гела)!. С того момента, когда приложение потребует кон- В каких случаях применяются деревья выглядеть слелуюшим образолс кретный тип поля гезци, создается поле типа втгпсг Ег1е 1еа( ьр (атгпет Деревья удобно применять для точного сопоставления. аппп егьа п«нза еурь ( твгк ьквг, твгк вовтвгк ); (уре гевц)(, которое л>ы определим позже как Гурейек ьвг«1Е 1Еать)ПОЦЕ! Следует, однако, обратить внимание на несколъко важ- еурацат еппа егле папе сура *паха рахпеаг> когда булем знать, какой тип требует приложение. Это Йевтгоу 1еат(р)! выглядит след юшим об азом: Ьгеах! ных моментов: Здесь (пе роги(ег — указатель на некоторый тип ) ° Деревья склонны к использованию большего объе- узла.

Все листья обозначаются как Т)ЦЕ $.ЕАР в каче- нпгпег Ег1е 1аат ( саве тктв ВВВтвгк. ( ма памяти, чем другие структуры данных, посколь- ствс солсржнмого первого члена, все поддеревья обозна- еппв Егле по«)е Гуре гуре! /ь ткгв Ьвпу */ втгпсг Ег(е апьег1е *р = (вегасе ку у каждого поддерева имеется полная таблица ука- чаются как Т)()Е Б(>ВТВ)Е. Таким образом, мы опре- ь«ег1е апвгг1е*)попе! а1ге Е 1еп Кеу! лпг зателей к подузлам. Для сравнения: в бинарном делили вва типа узлов; альтернативные реализации Деревья Органиэаиияеинныэ Глава 14 часть П Листинг 14.!.

Выделение битов ключа. зом биты вьщеляются и при операциях вставки и уда- сйаг фиксированной длины. Некоторые приложении пения ключа. Итак, соберем объект для выполнения используют обьект Ьеу иа)йег лля получения значисопах апв14пед сваг +Хеу; этой работы. Назовем этот объект Ьеу эва)йег (дослоя- тельно болыпей информации о фактической структуре яьхе С 1еп; но — "прогуливающийся по ключу". — Примеч. пер.), ключа. ) хеу ча1кег( поскольку он действительно "гуляет" по вьщеленным В нашем случае указанные выше макросы можно !де(гае 1а>с1а11хе иа1хег(ча1хег, Хеу, 1еп Кеу) битам ключа, и создадим макрос !пй)а!ые иа(йег лля легко написать, если каждый набор выделяемых битов (во14)( запуска объекта по ключу и макрос ех1гас( пех( — для является массивом переменных ппиепей сйаг, как это (ва1кег).1еп = (1еп Хеу) выделения следующего набора битов.

Для выделения ЛЛ показано в листинге 14.1. ) го набора битов нз ключа используется также макрос Здесь элемент Ьеу указывает на следующий байт ех(гас( а( о(узе(. Эти макросы, создаваемые для исполь- ключа, а элемент )еп дает количество оставшихся слева ((ва1кег).1еа == 0 2 -1 : ((ва1хег 1.1еп =- 1, '(ва1кег).кеу++)) зования в программе поиска, обеспечивают быструю байтов — при приближении их к нулю мы получим сит- !де(1пе ехсгасс аг огуаег(кеу, 1еп Кеу, оггаег) поисковую работу всего мод>ля. нал о достижении конца ключа. ((1еп Кеу) <= (оггаее) ? -1: ((Хеу) [оу(аег)) ) Обычно такис функциональные возможности офор- Однако не всегда жслатсльно иметь набор как можлэляются в виде функпии, которая вызывалась бы из но большсго числа битов. При выделении хотя бы вось- Затсч уточняется, выделен ли последний набор битов ся биты ключа.

В послслнем случае с того места, где нескольких различных мест программы. Функции по- ми битов требуется значительный размер поддеревьев. из текущего байта, и если да, то осуществляется пере- закончились эти биты, выполняслэ поиск в поддереве и нять легче, чем макросы, легче производить ил отлад- Кроме того, в некоторых компиляторах тип ппз)епеб ход к слсдующсм> байту.

Если количество битов в этом проверяем, существует ли лист, который в точности ку, и в результате возникает меньше хлопот. Однако сЬаг занимает в памяти значительно больше, чем восемь байте больше, чем нсобхолимо, то Ь)( абае( переходит к соответствует условиям поиска. Объединяя вместе все поиск во всем дереве должен выполняться быстро, и при битов, за счет чего еще больше увеличивается коэффи- следующему набору битов и вьшстяет их. Набор битов сказанное выше, получим программный код, прсдставправильном их использовании макросы часто работают циент загрузки используемого пространства. всегдаизвлекается из одной переменнойппи(рич3сьаг..~то лунный в хистнпге .14 г з( (р) ( Сг(е->гост = р геспгп 1) Организация даяния Деревья ! Часть и Глава 14 Листинг 14.2.

Поиск в дереве. Сгзе геяп11 Гг1е веагсв(сонат вггпсс Ггзе всгзе, сопят ппаадпед сЬаг 'Кеу, в1ге Г 1еп Кеу) ( Сгзе ротпгег воде; Кеу ча1гег ча1гег; девггоу 1еа(( 1еа( ); сопят вггпсс Гг1е 1еат *1еа(; ) гегпгп О; 11 (Гг1е == О) геспгп О; тп111а)тге ча1гег(ча1вег, Кеу, 1еп Кеу)) А теперь, очевидно, нужно написать программу лля случай — самый простой. Когда лист добавляется к пувставкилиста. Чтобы успспзновставлятьлиствузсл, нс- стому узлу, ясно, что если поиск постиг этой части обходимо уметь обрабатывать три случая: когда узел структуры дерева, то найденный лист — это конечная сопят вггесг Гг1е впвсг1е *О) пуст, узел является листом и узел заполнен. Первый точка поиска.

В таком случае этот лист можно считать узлом, как показано в листинге )4.4. 1( (!поде) ( гегпгп О) Листинг 14.4. Вставка листа в узел. 1( < поде (= твтК ВВВтК)К) агасзс ггте ро1пгег гпвегг поде( ггзе розпгег о1д поде, кеу ча1кег *ча1кег, (вг) Ьгеав; зпг 1ече1, всгпсг Гг1е 1еа( ь1еа( ) Орта«итал«яда««их Часть (! Листинг 14.5. Удапение листа из структуры дерева. ) поде->пехг 1ече1(п) = пехС 1ече1; ) е1ве поде->пехС 1ече1(п) = (Сгсе рогпгег)1еа(; вгагзс 1пг де1еге поде( Сгзе рогпгег *поде, сеу ча11ег *ча1сег, сопаС ппв(рпед сЬаг *Сеу, в1хе С 1еп Кеу ( ) /« * в лабом случае, еспв мм поствгпв этого места, зеачхт, пест вставлен успевво.

«/ поде->сопит += 1; геспгп (сгге рогпсег)поде; 1( (!*поде) гегпгп О; девггоу 1еа((р) *поде = О; гегпгп 1; саве ТВ1Е ЬЕАР: ( Случаи, ко!да узел являстся полным. немного болсс чтобы выяснить, где может находиться требуемый лист. сложен. Сначала проверяются слсдуюшис биты ключа, Затсм удаляется лист из под)зла и обрабатывается си- вггпсС Сг(е 1еа( *ргечзопв 1еа( = (вггпсС Сгге 1еа(«)о1д поде; Сг1е ро1пгег гевп1С; туация обнаружения конца ключа Наиболсс сложная ситуация возникает при вставке листа в другой лист. Но можно обойти сс, прсдставив сушсствуюший лист в виде полного узла и затсм вос- пользовавшись нмсюшсйся программой (которую мы ссичас пишем) для вставки нового листа в только что преобразованный узел. Такой подход даст нам следую- шуго программу; вчзасЬ (*"поде) ( саве ТВ1Е ОЕАР: ( вггпсС Сг1е 1еа( *р = (вггпсС Сгсе 1еа(«)«поде! гу (1еп Кеу !« р->1еп Сеу )( О != вевсвр( Кеу, р->сеу, 1еп Сеу )) гегпгп О; Орги а им а ил Сенник Тог (з=О; 1<ТК1К ВКАКСВ РАСТОК; 1++) ху (р->пеке 1ете1[г)) ( аввегг( 1еа( == 0 )1 1еау = р->пехк 1ете1)г); ) /* довем вспользовать этот лист в качестве аавого узла, удалив вз памятв старое поддерево */ угее(р); *поде = 1еаУП аегап11: азвегк(0) геьпгп 0; Часть К ка в поисках соответствия.

Характеристики

Тип файла
DJVU-файл
Размер
12,26 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6376
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее