Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Алгоритмические головоломки

Покупка
Артикул: 706980.03.99
Книга является уникальной коллекцией 150 головоломок, каждая из которых снабжена указанием и решением. Задачи сгруппированы в зависимости от уровня сложности. Издание дополнено двумя обучающими разделами по стратегиям разработки и анализа алгоритмов. В настоящее время алгоритмические головоломки часто используются на собеседованиях при приеме на работу. Они призваны развить аналитическое мышление и просто разнообразить досуг. Для всех любителей математики.
Левитин, А. Алгоритмические головоломки : научно-популярное издание / А. Левитин, М. Левитина ; пер. с англ. Ж. А. Меркуловой, Н. А. Меркулова. - 3-е изд. - Москва : Лаборатория знаний, 2023. - 328 с. - ISBN 978-5-93208-640-7. - Текст : электронный. - URL: https://znanium.com/catalog/product/2032503 (дата обращения: 28.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
АЛГОРИТМИЧЕСКИЕ
ГОЛОВОЛОМКИ

Algorithmic
PUZZLES

ANANY LEVITIN
MARIA LEVITIN

Алгоритмические
ГОЛОВОЛОМКИ

АНАНИЙ ЛЕВИТИН
МАРИЯ ЛЕВИТИНА

Москва
Лаборатория знаний
2023

Перевод с английского
Ж. А. Меркуловой,
Н. А. Меркулова

3-е издание, электронное

УДК 51-028.41+794
ББК 22.1я92
Л36

Левитин А.
Л36
Алгоритмические головоломки / А. Левитин, М. Левитина ; 
пер. с англ. Ж. А. Меркуловой, Н. А. Меркулова. — 
3-е изд., электрон. — М. : Лаборатория знаний,
2023. — 328 с. — Систем. требования: Adobe Reader XI ;
экран 10". — Загл. с титул. экрана. — Текст : электронный.
ISBN 978-5-93208-640-7
Книга является уникальной коллекцией 150 головоломок,
каждая из которых снабжена указанием и решением. Задачи
сгруппированы в зависимости от уровня сложности. Издание
дополнено
двумя
обучающими
разделами
по
стратегиям
разработки и анализа алгоритмов.
В
настоящее
время
алгоритмические
головоломки
часто
используются
на
собеседованиях
при
приеме
на
работу.
Они
призваны
развить
аналитическое
мышление
и
просто
разнообразить досуг.
Для всех любителей математики.
УДК 51-028.41+794
ББК 22.1я92

Деривативное издание на основе печатного аналога: Ал-
горитмические
головоломки
/
А. Левитин,
М. Левитина
;
пер. с англ. Ж. А. Меркуловой, Н. А. Меркулова. — 2-е изд. —
М. : Лаборатория знаний, 2019. — 325 с. : ил.
ISBN 978-5-00101-188-0

В
соответствии
со
ст. 1299
и
1301
ГК
РФ
при
устранении
ограничений, установленных техническими средствами защиты
авторских прав, правообладатель вправе требовать от нарушителя 
возмещения убытков или выплаты компенсации

ISBN 978-5-93208-640-7
© 2011 by Oxford University Press.
Algorithmic Puzzles, First Edition by Anany Levitin and Maria
Levitin. Впервые опубликовано на английском языке в 2011 г.
Этот перевод опубликован по договоренности с «Оксфорд
Юниверсити Пресс». ООО «Лаборатория знаний» несет полную
ответственность за этот перевод оригинального произведения,
и «Оксфорд Юниверсити Пресс» не несет ответственности
за любые ошибки, упущения, неточности или двусмысленности
в этом переводе или за убытки, причиненные в связи с его
использованием.
Algorithmic Puzzles, First Edition by Anany Levitin and Maria
Levitin was originally published in English in 2011. This
translation is published by arrangement with Oxford University
Press. BKL Publishers is solely responsible for this translation from
the original work and Oxford University Press shall have
no liability for any errors, omissions or inaccuracies or ambiguities
in such translation or for any losses caused by reliance thereon.

© Лаборатория знаний, 2017

Посвящается Максу с любовью

ОГЛАВЛЕНИЕ

Предисловие в вопросах и ответах . . . . . . . . . . . . . . . . . . . . . .
7

О чем эта книга?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7

Для кого эта книга?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7

Какие головоломки включены в книгу?
. . . . . . . . . . . . . . .
9

Подсказки, решения и комментарии
. . . . . . . . . . . . . . . . . .
10

Что представляет собой учебный раздел? . . . . . . . . . . . . . .
11

Почему в книге два указателя?
. . . . . . . . . . . . . . . . . . . . . . .
11

Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12

Список головоломок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13

Головоломки учебного раздела
. . . . . . . . . . . . . . . . . . . . . . . .
13

Головоломки основного раздела
. . . . . . . . . . . . . . . . . . . . . . .
14

Головоломка в качестве эпиграфа: кто это сказал?
. . . .
18

Глава 1. Учебный раздел . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19

Общие стратегии разработки алгоритмов . . . . . . . . . . . . . .
19

Методы анализа алгоритмов . . . . . . . . . . . . . . . . . . . . . . . . . . .
42

Глава 2. Головоломки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55

Лёгкие головоломки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55

Головоломки средней сложности
. . . . . . . . . . . . . . . . . . . . . .
68

Сложные головоломки
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87

Глава 3. Подсказки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Глава 4. Решения
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

Лёгкие головоломки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Головоломки средней сложности
. . . . . . . . . . . . . . . . . . . . . . 159

Сложные головоломки
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

Список литературы
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

Указатель
головоломок,
сгруппированных по
методам
разработки и анализа алгоритмов
. . . . . . . . . . . . . . . 315

Анализ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Инварианты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Поиск с возвратом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Уменьшай и властвуй
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

Разделяй и властвуй
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

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

Полный перебор
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

Жадный подход
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

Итерационное улучшение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Преобразуй и властвуй . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Другие методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

Предметно-именной указатель . . . . . . . . . . . . . . . . . . . . . . . . . . 323

ПРЕДИСЛОВИЕ В ВОПРОСАХ
И ОТВЕТАХ

О ЧЕМ ЭТА КНИГА?

Эта книга представляет собой сборник алгоритмических головоломок — 
головоломок, для решения которых требуются,
в явном или неявном виде, чётко определённые процедуры
решения
задач.
Книга
представляет
собой
уникальный
сборник
таких
головоломок.
В
неё
включены
как
старые
классические
задачи,
вошедшие
в
фольклор
математиков
и специалистов по информатике, так и новые головоломки,
которые
предлагают
решить
во
время
собеседования
в крупных компаниях при приёме на работу.
У этой книги есть две цели:

♦ развлечь
широкий
круг
читателей,
интересующихся
головоломками;

♦ способствовать развитию
алгоритмического мышления
на
высоком
уровне
(без
компьютерного
программирования)

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

Решение
алгоритмических
головоломок — это
наиболее
продуктивный и уж точно самый приятный способ развить
и улучшить навыки алгоритмического мышления.

ДЛЯ КОГО ЭТА КНИГА?

Эта книга может быть интересна для трёх больших категорий 
читателей:

♦ любителей головоломок;

♦ тех,
кто
хочет
развить
алгоритмическое
мышление,
в том числе учителей и учащихся;

Предисловие в вопросах и ответах

♦ тех,
кто
готовится
к
собеседованию
при
приёме
на
работу,
во
время
которого
предлагают
головоломки,
а также тех, кто проводит эти собеседования.

Любителям головоломок понравится этот сборник, содержащий 
головоломки разных типов и тем. Они встретят как
головоломки, любимые во все времена, так и малоизвестные
«жемчужины». Никаких знаний по информатике или даже
интереса к ней не требуется. Читатель, не обладающий та-
кими знаниями, может просто пропустить описание страте-
гий разработки и анализа алгоритмов в разделе «Решения».
В последнее время термин «алгоритмическое мышление»
очень часто употребляется преподавателями по информати-
ке, и не без оснований: повсеместное распространение ком-
пьютеров в современном мире действительно делает необ-
ходимым овладение навыками алгоритмического мышления
практически
для
каждого
студента.
Головоломки — идеаль-
ное средство для приобретения этих важных навыков в силу
двух причин.
Во-первых, головоломки — это
занятно
и че-
ловек обычно готов приложить больше усилий для реше-
ния головоломок, чем для решения обычных скучноватых
упражнений.
Во-вторых,
алгоритмические
головоломки
за-
ставляют мыслить на более абстрактном уровне. Даже сту-
денты,
обучающиеся информатике,
чаще
думают
о
реше-
нии алгоритмических задач в терминах компьютерного язы-
ка, который они знают, и не пытаются применить общие
стратегии
разработки
и
анализа
алгоритмов.
Головоломки
помогают восполнить этот существенный недостаток.
Головоломки в этой книге, безусловно, можно использо-
вать для самостоятельного обучения. Вместе с обучающим
материалом
они,
на
наш
взгляд,
позволяют
ознакомиться
с основными алгоритмическими понятиями и методами. Го-
ловоломки могут использовать и преподаватели компьютер-
ных курсов как в университетах, так и в средней школе,
в качестве вспомогательных упражнений
и материала
для
проектов. Эта книга также может быть интересна для обу-
чения на курсах по принятию решений, особенно на тех
курсах, которые основаны на решении головоломок.
Для людей, готовящихся к собеседованию, эта книга бу-
дет полезна по двум причинам. Во-первых, в ней есть много
примеров головоломок, с которыми они могут встретиться,
с полным решением и комментариями. Во-вторых, в книге

Какие головоломки включены в книгу?
9

содержится краткий учебный материал по стратегиям разра-
ботки и методам анализа алгоритмов. По словам менедже-
ров, предлагающих на собеседовании решить головоломки,
для них в большей степени важно увидеть правильный под-
ход к решению головоломки, а не само решение. На потен-
циального работодателя произведёт очень хорошее впечатление, 
если вы продемонстрируете ваш опыт в применении
общих стратегий разработки алгоритмов.

КАКИЕ ГОЛОВОЛОМКИ ВКЛЮЧЕНЫ В КНИГУ?

Алгоритмические головоломки составляют малую часть среди

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

Во-вторых, мы хотели, чтобы они были красивыми и элегантными, 
хотя эти качества, конечно, субъективны.
В-третьих, мы хотели, чтобы головоломки были различного 
уровня сложности. Сложность головоломки трудно точно 
определить; иногда головоломки, которые легко решают
ученики средней школы, ставят в тупик профессоров математики. 
Тем не менее, мы поделили нашу книгу на три
раздела — головоломки лёгкие, средней сложности и сложные — 
чтобы помочь читателю оценить уровень головоломки. 
В пределах каждого раздела мы также отсортировали
головоломки по уровню сложности. Для решения головоломок 
из раздела «Лёгкие головоломки» нужна только математика 
средней школы. Для решения некоторых задач из
следующих двух разделов применяется метод индукции, но
в общем, чтобы решить все головоломки в книге, будет достаточно 
школьной математики. Кроме того, во второй части 
учебного раздела вкратце освещаются такие темы, как
бинарные числа и простые рекуррентные соотношения. Конечно, 
это не означает, что все головоломки в книге — лёгкие. 
Некоторые из них — особенно в конце последнего раздела — 
являются по-настоящему сложными. Но их трудность
вовсе не в том, что они требуют сложной математики, поэтому 
они не должны отпугивать читателя.
В-четвёртых, мы чувствовали себя обязанными включить
несколько
головоломок,
имеющих
историческое
значение.

Предисловие в вопросах и ответах

В заключение отметим, что мы включили в книгу головоломки 
только с ясной постановкой задачи и решением, избегая 
таких трюков, как преднамеренная двусмысленность,
игра слов и т. д.
Нужно сделать ещё одно замечание. Многие головоломки
из этой книги можно решить с помощью полного перебора 
или поиска с возвратом (эти стратегии описаны в первой
части учебного раздела). Однако, это не тот подход, которым 
нужно наслаждаться при решении этих головоломок.
Он требуется только в случаях, когда это специально указано. 
Поэтому мы исключили такие категории головоломок,
как
судоку и
криптарифмы,
которые можно
решить или
полным перебором (перебором с возвратом), или же благодаря 
гениальной проницательности и озарению. Мы также
решили не включать головоломки, относящиеся к физическим 
объектам, которые не очень легко описать, такие как
Китайские кольца и кубик Рубика.

ПОДСКАЗКИ, РЕШЕНИЯ И КОММЕНТАРИИ

В книге для каждой головоломки приведены подсказка, решение 
и комментарии. Книги по головоломкам редко включают 
подсказки, но мы считаем их ценным дополнением.
Они могут слегка подтолкнуть в правильном направлении,
оставляя, тем не менее, шанс читателю самому решить головоломку. 
Все подсказки собраны в отдельном разделе.
К каждой головоломке приведено решение. Как правило,
оно начинается с короткого ответа. Это сделано для того,
чтобы дать
читателю
последнюю возможность самому
решить 
головоломку: если ответ читателя не тот, что в решении, 
он может прекратить чтение решения и попытаться
снова решить головоломку.
Алгоритмы
описаны
без
использования
специального
формата или псевдокода. Акцент делается на идеях, а не на
незначительных деталях. Переписать решения в более формальном 
виде — это уже само по себе полезное упражнение.
Большинство комментариев обращают внимание на общую
идею алгоритма, которую демонстрируют головоломка и её
решение. Иногда в комментариях также есть ссылки на похожие 
головоломки из этой книги или из других источников.
В большинстве книг, посвящённых головоломкам, не указывается 
происхождение головоломки. Обычно это объясняется
тем, что пытаться найти автора головоломки — всё равно, что

Почему в книге два указателя?
11

пытаться найти автора шутки. Хотя в этом и есть значительная

доля
правды,
мы
решили
упомянуть
о
самых
ранних
источниках головоломок, которые нам известны. Однако читатель 
должен иметь в виду, что мы не производили хоть
сколько-нибудь серьёзного поиска источников головоломок. Если 
бы мы это сделали, получилась бы совсем другая книга.

ЧТО ПРЕДСТАВЛЯЕТ СОБОЙ УЧЕБНЫЙ РАЗДЕЛ?

В книгу включён учебный раздел, где на примерах голово-
ломок описаны общие стратегии разработки и методы ана-
лиза алгоритмов. Хотя почти все головоломки в книге мож-
но решить без малейшего знания тем, освещённых в учеб-
ном разделе, вне сомнения он поможет решить головолом-
ки гораздо легче и, что важно, с большей пользой. Кроме
того, в решениях, комментариях и некоторых подсказках ис-
пользуется та же терминология, объяснение которой даётся
в учебном разделе.
Учебный
раздел
написан
на
максимально
доступном
уровне, чтобы быть понятным широкому кругу читателей.
Если читатель — специалист по информатике, то он вряд ли
найдёт там для себя что-то новое, разве что примеры голо-
воломок. В то же время, такой читатель может быстро осве-
жить свои знания фундаментальных идей разработки и ана-
лиза алгоритмов.

ПОЧЕМУ В КНИГЕ ДВА УКАЗАТЕЛЯ?

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

Мы
надеемся,
что
читатели
найдут
книгу
как
занима-
тельной, так и полезной. Мы также надеемся, что они раз-
делят наше восхищение красотой и удивительной человече-
ской изобретательностью, которые видны во многих голово-
ломках этой книги.
Ананий Левитин,
Мария Левитина
Май 2011 г.
algorithmicpuzzles.book@gmail.com