Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

11.6. Упражнения 549

C-11.20 Учитывая последовательность S n элементов, на которых полное отношение заказа - de -

оштрафованный, опишите эффективную функцию для определения, есть ли два равных элемента в S. Какова продолжительность Вашей функции?

C-11.21 Позвольте S быть последовательностью n элементов, на которых полное отношение заказа - de -

оштрафованный. Вспомните, что инверсия в S - пара элементов x и y, таким образом, что x появляется прежде y в S, но x> y. Опишите алгоритм, бегущий в O (n, регистрируют n), время для определения числа инверсий в S.

C-11.22 Позвольте S быть случайной перестановкой n отличных целых чисел. Утверждайте что экс-

продолжительность pected вида вставки на S -W (n2). (Намек: Обратите внимание на то, что половина элементов, оцениваемых в верхней части сортированной версии S, как ожидают, будет в первой половине S.),

C-11.23 Позвольте A и B быть двумя последовательностями n целых чисел каждый. Учитывая целое число m,

опишите O (n, регистрируют n), разовый алгоритм для определения, если есть целое число в A и целом числе b в B, таким образом что m = + b.

C-11.24 Данный ряд n целые числа, опишите и проанализируйте быстрый метод для нахождения

⌈log n⌉ целые числа, самые близкие к медиане.

C-11.25 У Джеймса есть набор n орехов и набора B болтов n, таких что каждый орех в

Уникального соответствия запирает B. К сожалению, орехи во всех выглядят одинаково, и болты в B, все выглядят одинаково также. Единственный вид сравнения, которое может сделать Боб, должен взять пару болта ореха (a, b), такой, что в A и b находится в B, и проверьте его, чтобы видеть если нити больше, меньшего, или идеальная пара с нитями b. Опишите и проанализируйте эффективный алгоритм для Боба, чтобы подойти все его основные детали.

C-11.26 Покажите, как использовать детерминированный O (n) разовый алгоритм выбора к виду a

последовательность n элементов в O (n регистрируют n), время худшего случая. C-11.27 Учитывая несортированную последовательность S n сопоставимых элементов и целого числа k,

дайте O (n, регистрируются, k) ожидал разовый алгоритм для нахождения O (k) элементы

у этого есть разрядn/k ⌉, 2n/k ⌉, 3n/k ⌉, и так далее.

C-11.28 Позвольте S быть последовательностью вставки n и removeMin операций, где весь

включенные ключи являются целыми числами в диапазоне [0, n- 1]. Опишите алгоритм

управление в O (n регистрируются* n) для определения ответа на каждый removeMin.

C-11.29 Пришельцы из космоса дали нам программу, alienSplit, который может взять последовательность

S n целых чисел и разделения S в O (n) время в последовательности S1, S2..., Sk размера в большей частиn/k ⌉ каждый, такой, что элементы в Сайе меньше чем или равны каждому элементу в Si+1, поскольку я = 1, 2..., k- 1, для постоянного числа, k <n.

Покажите, как использовать alienSplit для вида S в O (n, регистрируют регистрацию n/k), время.

C-11.30 У Карен есть новый способ сделать сжатие пути в основанном на дереве союзе/находить

структура данных разделения, начинающаяся в узле v. Она помещает все узлы, которые находятся на пути от v до корня в наборе S. Тогда она просматривает через S и устанавливает родительский указатель каждого узла в S к родительскому указателю его родителя (отзыв

550

Глава 11. Сортировка, Наборы и Выбор, который родительский указатель корня указывает на себя). Если этот проход изменил ценность родительского указателя какого-либо узла, то она повторяет этот процесс и продолжает повторять этот процесс, пока она не делает просмотр через S, который не изменяет родительской стоимости узла. Покажите, что алгоритм Карен правилен, и проанализируйте его продолжительность для пути длины h.

C-11.31 Позвольте S быть последовательностью n целых чисел. Опишите метод для распечатывания всех

пары инверсий в S в O (n + k) время, где k - число таких инверсий.

C-11.32 Эта проблема имеет дело с модификацией быстро-избранного алгоритма к

сделайте это детерминированный и все же управляет в O (n) временем на последовательности n-элемента. Идея состоит в том, чтобы изменить способ, которым мы выбираем центр так, чтобы это было выбрано детерминировано, не беспорядочно, следующим образом:

Разделите набор S вn/5 ⌉ группы размера 5 каждый (кроме pos -

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

элемент в этом наборе. От этого набораn/5 ⌉ «детские» медианы, AP -

согните алгоритм выбора рекурсивно, чтобы найти медиану

детские медианы. Используйте этот элемент в качестве центра и продолжите двигаться как в быстро-избранном алгоритме.

Покажите, что этот детерминированный метод пробеги в O (n) время, отвечая на следующие вопросы (пожалуйста, проигнорируйте floor и перекрывающие функции, если это sim - plifies математика, для asymptotics являются тем же самым так или иначе):

a. Сколько детских медиан меньше чем или равно выбранному центру?

Сколько больше, чем или равно центру?

b. Для каждой детской медианы, меньше чем или равной центру, сколько

другие элементы меньше чем или равны центру? Действительно ли то же самое верно для больше, чем или равный центру?

c. Спорите почему метод для нахождения детерминированного центра и использования

это к разделению S берет O (n) время.

d. Основанный на этих оценках, напишите уравнение повторения связанному

продолжительность худшего случая t (n) для этого алгоритма выбора (отмечают, что в худшем случае есть два рекурсивных вызова - один, чтобы найти, что медиана детских медиан и один повторяется на большем из L и G).

e. Используя это уравнение повторения, покажите индукцией, что t (n) является O (n).

Проекты

P-11.1 Разработка и реализация две версии алгоритма вида ведра в C ++,

один для сортировки множества ценностей случайной работы и один для сортировки множества коротких ценностей. Экспериментально сравните исполнение своих imple-процессов мышления с алгоритмом сортировки Стандартной Библиотеки Шаблона.

Примечания к главе 551

P-11.2 Экспериментально сравните исполнение оперативного быстрого вида и ver-

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

P-11.3 Разработка и реализация версия алгоритма вида ведра для сортировки

связанный список n записей (например, список станд. типа:: список <интервал>) с

ключи целого числа, взятые из диапазона [0, N- 1], для N³ 2. Алгоритм

должен управлять в O (n + N) временем.

P-11.4 Вид слияния орудия и детерминированный быстрый вид и выполняют ряд

из сопоставительного анализа тестов, чтобы видеть, какой быстрее. Ваши тесты должны включать последовательности, которые «случайны», а также «почти» сортированы.

P-11.5 Осуществите детерминированные и рандомизированные версии быстрого вида al -

gorithm и выполняют серию сопоставительного анализа тестов, чтобы видеть, какой быстрее. Ваши тесты должны включать последовательности, которые являются «очень случайным» взглядом, а также, которые «почти» сортированы.

P-11.6 Осуществите оперативную версию вида вставки и оперативную версию

быстрый вид. Выполните тесты на сопоставительный анализ, чтобы определить диапазон ценностей n, где быстрый вид в среднем лучше, чем вид вставки.

P-11.7 Разработка и реализация мультипликация для одного из алгоритмов сортировки de -

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

P-11.8 Осуществите рандомизированный быстрый вид и быстро-избранные алгоритмы, и

проектируйте ряд экспериментов, чтобы проверить их относительные скорости.

P-11.9 Осуществите расширенный набор ADT, который включает союз функций (B),

пересеките (B), вычтите (B), размер (), пустой (), плюс функции равняется (B), содержит (e), вставка (e), и удалите (e) с очевидным значением.

P-11.10 Осуществите основанную на дереве структуру данных разделения союза/находить с обоими

союз размером и эвристика сжатия пути.

Примечания к главе

Классический текст Нута при Сортировке и Поиске [60] содержит обширную историю проблемы сортировки и алгоритмов для решения его. Хуан и Ленгстон [48] шоу, как слить два сортированных списка, оперативные в линейное время. Наш набор ADT получен из того из Aho, Хопкрофта и Ульмана [5]. Стандартный алгоритм быстрого вида происходит из-за Хоара [45]. Больше информации о рандомизации, включая границы Чернофф, может быть найдено в AP - pendix и книга Motwani и Raghavan [80]. Анализ быстрого вида, данный в этой главе, является комбинацией анализа, данного в предыдущем выпуске этой книги и анализе Kleinberg и Tardos [55]. Упражнение C-11.8 происходит из-за Литмана. Gonnet и Баэса-Yates [37] анализируют и экспериментально сравнивают несколько алгоритмов сортировки. Термин «слива-и-поиск» прибывает первоначально из вычислительной литературы геометрии (такой как в работе Кларксона [21] и Мегиддо [71, 72]). Термин «уменьшать-и-побеждать» от Levitin [65].

Эта страница преднамеренно оставила незаполненный

Глава

12

Последовательности и динамическое программирование

Содержание

12.1 Операции по последовательности..............

.

.

.

.

.

.

554

12.1.1 Класс последовательности STL..........

.

.

.

.

.

..

555

12.2 Динамическое программирование...........

.

.

.

.

.

.

557

12.2.1 Матричный продукт цепи..........

.

.

.

.

.

..

557

12.2.2 ДНК и текстовое выравнивание последовательности..

.

.

.

.

.

..

560

12.3 Алгоритмы соответствия образца........

.

.

.

.

.

.

564

12.3.1 Грубая сила...............

.

.

.

.

.

..

564

12.3.2 Алгоритм Бойер-Мура......

.

.

.

.

.

..

566

12.3.3 Knuth-Morris-Pratt алгоритм...

.

.

.

.

.

..

570

12.4 Текстовое сжатие и жадный метод

.

.

.

.

.

.

575

12.4.1 Hufman-кодирующий алгоритм....

.

.

.

.

.

..

576

12.4.2 Жадный метод...........

.

.

.

.

.

..

577

12.5 Попытки......................

.

.

.

.

.

.

578

12.5.1 Стандартные попытки..............

.

.

.

.

.

..

578

12.5.2 Сжатые попытки............

.

.

.

.

.

..

582

12.5.3 Попытки Сафкса...............

.

.

.

.

.

..

584

12.5.4 Поисковые системы.............

.

.

.

.

.

..

586

12.6 Упражнения...................

.

.

.

.

.

.

587

554

12.1