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

3.6. Упражнения 151

C-3.8 Опишите хороший алгоритм для связывания двух отдельно связанных списков L и

M, со стражами заголовка, в единственный список L , который содержит все узлы L, сопровождаемого всеми узлами M.

C-3.9 Дайте быстрый алгоритм для связывания двух вдвойне связанных списков L и M,

с заголовком и сторожевыми узлами трейлера, в единственный список L . C-3.10 Опишите подробно, как обменять два узла x и y (и не только их довод «против» -

палатки) в отдельно связанном списке L, данном ссылки только на x и y. Повторите это осуществление для случая, когда L будет вдвойне связанным списком. Какой алгоритм занимает больше времени?

C-3.11 Опишите подробно алгоритм для изменения отдельно связанного использования списка L

только постоянная сумма дополнительного пространства и не использующий рекурсии. C-3.12 В Башнях загадки Ханоя нам дают платформу с тремя ориентирами, a,

b, и c, торча из него. На ориентире стека n дисков каждый больше, чем следующее, так, чтобы самое маленькое было на вершине и самом большом, находится на основании. Загадка должна переместить все диски от ориентира, чтобы прикрепить c, переместив один диск за один раз, так, чтобы мы никогда не помещали больший диск сверху меньшего. Опишите рекурсивный алгоритм для решения Башен загадки Ханоя для произвольного n. (Намек: Рассмотрите сначала подпроблему перемещения всех кроме энного диска от ориентира к другому ориентиру, используя третье в качестве «временного хранения».)

C-3.13 Опишите рекурсивную функцию для преобразования ряда цифр в в -

тигр это представляет. Например, «13531» представляет целое число 13, 531. C-3.14 Опишите рекурсивный алгоритм, который включает число узлов отдельно

связанный список. C-3.15 Напишите рекурсивный C ++ программа, которая произведет все подмножества ряда

n элементы (не повторяя подмножеств). C-3.16 Напишите короткий рекурсивный C ++ функция, которая находит минимум и макси -

мама оценивает во множестве международных ценностей, не используя петель. C-3.17 Опишите рекурсивный алгоритм, который проверит если множество целых чисел

содержит целое число [я], который является суммой двух целых чисел, которые кажутся ранее в A, то есть, такими что [я] = [j] + [k] для j, k <я.

C-3.18 Напишите короткий рекурсивный C ++ функция, которая перестроит множество интервала

ценности так, чтобы весь даже ценности появились перед всеми странными ценностями. C-3.19 Напишите короткий рекурсивный C ++ функция, которая берет строку символов s и

производит его перемену. Так, например, перемена «pots&pans» была бы «snap&stop».

C-3.20 Напишите короткий рекурсивный C ++ функция, которая определяет, является ли последовательность s a

палиндром, то есть, это равно своей перемене. Например, «гоночный автомобиль» и «gohangasalamiimalasagnahog» - палиндромы.

152

Глава 3. Множества, связанные списки и рекурсия

C-3.21 Используйте рекурсию, чтобы написать C ++ функция для определения, если последовательность s имеет

больше гласных, чем согласные.

C-3.22 предположим Вам дают два циркулярных связанных списка, L и M, то есть, два

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

C-3.23 Учитывая циркулярный связанный список L, содержащий четное число узлов, de -

писец, как разделить L на два циркулярных связанных списка половины размера.

Проекты

P-3.1 Напишите C ++ функция, которая берет два трехмерных множества целого числа и

добавляет их componentwise.

P-3.2 Напишите C ++ программа для матричного класса, который может добавить и умножиться произвольный

двумерные множества целых чисел. Сделайте это, перегрузив дополнение (» + «) и умножение (» * «) операторы.

P-3.3 Напишите класс, который поддерживает лучшие 10 музыки к применению игры, im-

plementing добавление и удаляет функции Раздела 3.1.1, но использует отдельно связанный список вместо множества.

P-3.4 Выполните предыдущий проект, но используйте вдвойне связанный список. Кроме того, Ваш

внедрение удаляет (i), должен сделать наименьшее количество числа перелетов указателя, чтобы добраться до входа игры в индексе i.

P-3.5 Выполните предыдущий проект, но используйте связанный список, который является оба циркулярным

связанный и вдвойне связанный.

P-3.6 Напишите программу для решения загадок суммирования, перечислив и теста -

луг все возможные конфигурации. Используя Вашу программу, решите три puz-zles данный в Разделе 3.5.3.

P-3.7 Напишите программу, которая может выполнить шифрование и декодирование, используя площадь -

шифр замены bitrary. В этом случае множество шифрования - случайный shuffling писем в алфавите. Ваша программа должна произвести случайное множество шифрования, его соответствующее множество декодирования, и использовать их, чтобы закодировать и расшифровать сообщение.

P-3.8 Напишите программу, которая может решить случаи Башни проблемы Ханоя

(от упражнения C-3.12).

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

Фундаментальные структуры данных множеств и связанных списков, а также рекурсии, обсужденной в этой главе, принадлежат фольклору информатики. Они были сначала отмечены в литературе информатики Knuth в его оригинальной книге по Фундаментальным Алгоритмам [59].

Глава

4

Аналитические инструменты

Содержание

4.1

Семь функций, используемых в этой книге....

.

.

.

154

4.1.1 Постоянная функция............

.

.

..

154

4.1.2 Функция логарифма...........

.

.

..

154

4.1.3 Линейная функция..............

.

.

..

156

4.1.4 Функция N-Log-N............

.

.

..

156

4.1.5 Квадратная функция............

.

.

..

156

4.1.6 Кубическая функция и другие полиномиалы.

.

.

..

158

4.1.7 Показательная функция...........

.

.

..

159

4.1.8 Сравнение темпов роста...........

.

.

..

161

4.2 Анализ алгоритмов...............

.

.

.

162

4.2.1 Экспериментальные исследования.............

.

.

..

163

4.2.2 Примитивные операции.............

.

.

..

164

4.2.3 Асимптотическое примечание.............

.

.

..

166

4.2.4 Асимптотический анализ..............

.

.

..

170

4.2.5 Используя большое о примечание..........

.

.

..

172

4.2.6 Рекурсивный алгоритм для вычислительных мощностей

.

.

..

176

4.2.7 Еще некоторые примеры анализа алгоритма.

.

.

..

177

4.3 Простые методы оправдания.........

.

.

.

181

4.3.1 Примером..................

.

.

..

181

4.3.2 Нападение «мятежника».............

.

.

..

181

4.3.3 Индукция и инварианты петли........

.

.

..

182

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

.

.

.

185

154

4.1