Главная » Просмотр файлов » Д. Кнут - Искусство программирования том 3 (2-е издание) - 2001 (Часть 1)

Д. Кнут - Искусство программирования том 3 (2-е издание) - 2001 (Часть 1) (1119456), страница 47

Файл №1119456 Д. Кнут - Искусство программирования том 3 (2-е издание) - 2001 (Часть 1) (Д. Кнут - Искусство программирования том 3 (2-е издание) - 2001 (Часть 1)) 47 страницаД. Кнут - Искусство программирования том 3 (2-е издание) - 2001 (Часть 1) (1119456) страница 472019-05-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Поразрядная сортировка списка. две переменные-указателн: ТОРЯ н ВОТМЯ, О < 1 < ЛХ, н, как н в главе 2, предполагается, что ЫМК()ОС(ВОТМЯ)) зэ ВОТМЯ. (б) Н1. (Цнкл по к.) Вначале установить Р е- КОС(НМ), указатель на последнюю валясь. Затем выполннтыпагн Н2-Нб прн Й = 1, 2,,, р (шагн Н2-Нб составляют один "проход" — просмотр исходных данных) н завершить выполнение алгорнтма. Переменная Р будет указывать на запнсь с наименьшим ключом, 11МК(Р) .- - на запись со следующнм по величине ключом, ЫМК((.ТМК(Р)) — на следующую запись н т. д, Поле 11МК последней записи будет равно Л. Н2.

(Очнстнть стопки,) Пр 0 < г' < М установить ТОРЯ е- ЫС(ВОТКНИ) н ВОТИ [П +- Л. НЗ. (Выделять (с-1о цифру ключа.1 Пусть ККТ(Р) —. ключ запнсн, на которую указывает Р, — равен (ам аз,...,а„). Установнть ( +- ары э, к-ю младшую цифру этого ключа. Н4. (Откорректнровать связн.) Установить 1ТМК(ТОР[О ) +- Р н ТОРЯ е- Р.

НЬ. (Перейтн к следующей записи.) Еслн [с = 1 (первый просмотр) н если Р = 1.ОС(Н)) прн некотором у' ф 1, установнть Р +- ЬОС(Н, ~) н возвратиться к шагу ЙЗ. Если Й > 1 (не первый просмотр), то установнть Р +- ЫМК(Р) н возвратиться к НЗ, если Р ф Л. Нб. (Выполнять элгорнтм Н.) (Теперь все элементы распределены по стопкам.) Выполнять приведенный анже алгоритм Н, который "сцепляет" отдельные стопки в один список, подготавлнвая нх к следукнцему просмотру. Установить Р +- ВОТМ [03, указатель на первый элемент объединенного спнгка (см.

упр, 3). 1 Алгоритм Н (Сцен.ление очередей). Из М данных очередей со связями, удовлетворяющнмн соглашениям алгоритма В., данный алгорнтм создает одну очередь, меняя прн этом не более Лт' связей. В результате ВОТМ [03 указывает на первый элемент н стопка 0 предшествует стопке 1 ..., стопка М вЂ” 2 предшествует стопке М-1. Н1. (Начальная установка.) Установнты' +- О.

Н2. (Указатель на вершину стопкн.1 Уствновнть Р е- ТОР [О. НЗ. [Следующая стопка.[ Увеличиты на 1. Если 1 = М, то установить [.1МК (Р) е- Л и завершить выполнение алгоритма, Н4. [Стопка пустау[ Если ВОТИ[13 = Л, возвратиться к шагу НЗ. Нб. [Сцепить стопки.] Установить [.1МК [Р) 4- ЗОТИН.

Возвратиться к шагу Н2. На рис. 33 показано содержимое стопок после каждого нз трех просмотров, выполняемых при сортировке наших Эб чисел с М = 10. Алгоритм ЕЕ очень просто запрограммировать в системе команд М1Х, если найти удобный способ изменения операции на шагах НЗ и 3[б от одного просмотра к другому.

В следующей про- грамме зтого удалось достичь, не жертвуя скоростью внутреннего цикла, путем предварительной записи двух команд в тело программы, Заметим, что ТОРЫ и ВОТМ [1) можно упаковать в одно слово. ТОР [03 ТОР [13 ТОР [23 ТОР ЕЗ) ТОР Е43 ТОР ЕБ) ТОР [63 ТОР [7] ТОР[В) ТОР [93 ВОти[03 ВОтиС13 ВОтмЕ23 ВОткСБ) ВОтк[43 ВОтм[б) ВОти[63 ВОти[73 ВОтиСВ] ВОтиЕ93 ТОР [03 ТОР С1) ТОР [23 ТОРЕЗ) ТОР [43 ТОР ЕБ) ТОР ЕБЭ ТОР [73 ТОР СВ] ТОР Е93 ВОТК[03 ВОТИС13 ВОТМЕ23 ВОТИ[3) ВОТИ[43 ВОТИЕБ) ТОР[43 ТОРРО ВОТИ[63 ВОТИ[73 ВОТИС63 ВОТИ[9) ТОР[63 ТОР[73 ТОР[В) ТОР [9Э ТОР СОЭ ТОР ОО ТОР Е23 ТОР Ез) ВОТИ[03 ВОТКС13 ВОТИЕ23 ВОТМ[З) ВОТИЕ43 ВОТМЕБЭ ВОТИ[63 ВОТИЕТЭ ВОТИ[6) ВОТИ[93 Рис.

ЗЗ. Поразрядная сортировка с использованием связного распределения памяти [по- казано содержимое всех десяти стопок после каждого просмотра). Программа Н [Поразрядная сорязироека списков). Предполагается, что исходные ключи в ячейках по адресу от 1МРОТ+1 до 1МРОТ+М содержат р = 3 компоненты нз.х мз.

= з~зн з. 1 1в ь-?. 3 22. Очистить стопки, ЗЛХ ЬОС(ВО?НИ) ЗМ -+ ТОРИ Зм ВО?НИ +- л. ЗЛХ ЗМ М>в>О. 3 3 Изменить команды на проходе А 3 3 Время выполнения программы Н равно 32йт + 48Ы + 38 — 4Е, где Лг — число псходных записей, М вЂ” основание системы счисления (число стопок), а Š— число встретившихся пустых стопок. Сравнение с другимн программами, построенными (ох, ош оз), храняшнеся в полях (1: 1), (2:2) и (3: 3) соответственно. (Таким образом, считается, что значение ЛХ меньше или равно размеру байта компьютера М?Х.) В поле (4:5) каждой записи хранится свхгзь 1?МК. Пусть ТОР[11 — = Р11ЕБ+ х(1:2) и ВОТН[в) = Р1[ЕБ+ в(4:5) при О < х < М.

Удобно указывать в поле связи положение относительно адреса 1МРОТ, так что 1ОС(ВОТН [х) ) = Р1ЬЕБ + х — 1МРОТ. Чтобы избежать появления отрицательных связей, нужно расположить таблицу РП.ЕЯ после таблицы 1МРОТ. Значения индексных регистров таковы: г11 вв Р, г12 гй х, г13 = 3 — Й„г14 = ТОРИ. Во время выполнения алгоритма Н г12 = в' — М. 01 11МК ЕОО 4: 5 02 ТОР ЕОО 1: 2 08 БТАНТ ЕМТ1 М 04 ЕМТЗ 2 06 2Н ЕНТ2 К-1 06 ЕМТА РП.ЕЯ-?КРОТ,2 07 ЯТА Р1155,2(ТОР) 08 БТЕ РП.ЕБ,2(1.1МК) 00 ОЕС2 1 10 22ММ е-4 11 1ОА НЗБЫ,З 18 БТА ЗР 18 ЫА НББМ, 3 14 ЯТА БР 16 ЗН [?2)2 1МРОТ, 1(З т 3) ) НЗ. Н ечь 1х-ю н г ключа. 16 4Н Ы4 Р11,55,2(ТОР) 3?з' Н4.

Отко ектн вать связи. 17 ЯТ1 1МРОТ,4(1?МК) 3)з' 1?МХ(ТОР[вО) +" Р 18 ЯТ1 Р?153,2(ТОР) 31в" ?ОР[П +- Р. 10 5Н [ОЕС1 1) НЛ Пе ейтя коле ю ейзалясл, 20 11МЗ ЗВ Здт Перейти к шагу НЗ, если конец прохода. 81 БН ЕММ2 Н 3 Н6, Выполнять алто ягм Н. 22 ЗНР 7Р 3 Перейти к шагу Н2, если в х- О, 88 НЗЯМ Ы2 1МРОТ,1(1: 1) Лт Команды для шага НЗ, если А = 3.

26 ?.О2 1МРОТ,1(2т2) Ж Команды для шаха НЗ, если й = 2. 26 ??)2 1МРОТ,?(3:3) Хзт Команды для шьга НЗ, если й = 1. НО й5ЯМ Ы1 1МРОТ, 1(1.1МК) Лт Команды для шага НЗ, если А = 3. 27 151 1МРОТ,10.?МК) ЛХ Команды для шага НЗ, если А = 2. 28 ОЕС1 1 1в' Команды для шага вь5, если Л = 1. ь вв звз зтзвв+з.зтзтззт зк- 3 щ, ~в а~.

80 ?АЗ 8Р .ЗМ вЂ” 3 Перейти к шагу НЗ, если ВО?НИ = Л. 81 втз твен.зтзтззт зк-з-в нз знзз~~, 82 7Н 1О1 Р1ЬЕБ+Кз2(ТОР) ЗМ вЂ” Е Н2. Указатель на ве шнн стопки. 88 ЗН 1МС2 1 ЗЛХ НЗ. Сле ю ая стопка. в+- в+ 1. 84 82МЗ 9В ЗМ Перейти к шагу Н4, если в ф М. 86 ЯТЕ 1МРОТ, 1(1.1МК) 3 1?МК(Р) +- Л. 86 Ы1 РП.ея(11мк) 3 р +- ВО?К[О), 87 ОЕСЗ 1 3 88 13ММ 28 3 Цикл для 1 < А < 3. $ на основе аиалогичиых предположений (программы 5,2.1М и 5.2.41 ), говорит явно в пользу программы К.

Время вь<павпения р.проходного варианта программы К равно (Пр — 1)Х + 0(рЛХ) машинных циклов; критический фактор, влияющий иа время выполнения, — виутренний цикл, который содержит пять обращений к памяти и один переход. Для типичного компьютера М = Ь' и р = (<Я, где 1 — - число цифр в ключах, представленных в системе счисления с осиованием Ь. С ростом г убывает р, так что можно воспользоваться нашими формулами для определения мниилучшегом значения г.

Единственная переменная величииа в формуле для времени выполнения— это Е (число пустых стопок, обиаружеииых на щие Н4). Предположим, что все М~ последовательностей цифр М-ичной системы счисления равновероятны. При анализе "покер-теста" в разделе 3.3.2В было показано, как вычислять вероятность того, что при каждом просмотре встретится ровно М вЂ” г пустых стопок.

На каждом проходе она равна М(М вЂ” 1) ... (Лр — г+ 1) г Л< ) ЛХ <м <' где ( „~ — число Стирлинга второго рода. Согласно упр. 5 1 ° <<< я=( ° <и<-м,оэ, ° м(<- — ) р, <м-«~). «< МУ' В последние годы появляется все больше компьютеров с конвейерной (р<рсйпе) и магистральной (пцшЬег-сгипсй<пй) архитектурами. Зги машины имевэт несколько арифметических устройств и схему "опережения'", так что обращения к памяти и вычисления могут в значительной степени совмещаться во времени. Но эффективность таких компьютеров заметно снижается при наличии условных перв- ходов, если только эти переходы ие происходят почти всегда в одном и том же направлении.

Внутреиний цикл поразрядной сортировки хорошо приспособлен для таких машин, поскольку это простое итеративное вычисление -- типичное мпережевывание чисел". Поэтому дл,а комоьюглеров с магвсшрольной архип<сатирой а<ешод яоразрлдной сортировки обычно лоллеп<ел наиболее э<Лфеьэпиоимм из всех известных методов оиутренней сор<пирооки при условии, что <<' не слишком малб и ключи не слишком длинные. Разумеется, если клк<чи уж очень длинные, поразрядная сортировка ие так эффективна. Представьте себе, например, что нужно рассортировать 60-разрядиые десятичные числа за 20 проходов поразрядной сортировки, используя ЛХ = 10э. Очень мало пар чисел будет иметь одинаковые ключи в первых 9 разрядах, так что первые 17 проходов выполнятся почти впустую.

При анализе обменной поразрядной сортировки мы обнаружили, что вовсе иеобязательно проверять много битов ключей, если просматривать их не справа налево, а слева направо. Поэтому давайте возвратимся к поразрядной сортировке, при которой ключи просматриваются, начиная со старших цифр (СЦ), а не с младших цифр (ЛЦЦ. Мы уже отмечали, что идея СЦ-поразрядной сортировки приходит в голову естествениым образом. В самом деле, нетрудно понять, почему при сортировке почты в отделениях связи пользуются имеиио этим методом. Большое количество писем можно рассортировать по отдельным мешкам, соответствующим географическим областял<. Теперь в каждом мешке содержится меньше писем, когорые Х = 100 1000 10000 100000 1000000 10г 10э Наилучшее М = 32 128 512 1024 8192 2гэ 2'т Наилучшее р = 2 2 2 2 2 2 2 д(Х) = 19-3 18.5 18.2 18.1 18.0 18.0 18.0 Здесь д(Х) — среднее число обращений к памяти на один сортируемый 10э 2)э 2 18.0 элемент 2рЛЛ Х вЂ” 1 Нм 6(Х) -„+ 8+ + Х 2ЛУг Х ' (8) эта величина ограничена при Х -э со, если взять р = 2 и М > и'Х, так что среднее время сортировки — 0(Х), а не Х 1о8 Х.

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

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

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