Table Of ContentComputer
Science
Ап
Interdisciplinary Approach
Robert Sedgewick
Kevin Wayne
Princeton University
"� Addison-Wesley
Bosto• Cno lumb•u Isn dianap• Noewli Yso r•k S anF ranci• sAmcsot erda• mС ареT own
Duba•i L ondo• nM adri• dM ilan• Munic• hP ar•i Mso ntre• aTlo ron• tDoe lh• Mie xicoC ity
SaoP aul• oS ydne• Hyo ngK ong• S eou• Sli ngap•o Traei p• eTio kyo
РОБЕРТ СЕДЖВИК, КЕВИН УЭЙН
COMPUTER
SCIENCE
ОСНОВЫ ПРОГРАММИРОВАНИЯ НА JAVA.
ООП1 АЛГОРИТМЫ И СТРУКТУРЫ ДАННЫХ
Санкт-Петербург • Москва • Екатеринбург· Воронеж
Нижний Новгород • Ростов-на-Дону
Самара· Минск
2018
ББК 32.973.2-018
УДКОО4.42
С28
Седжвик Р., Уэйн К.
С28 Computer Science: основы nроrраммирования на Java, ООП, алгоритмы и струк
туры данных. -СПб.: Питер, 2018. -1072 с.: ил. -(Серия «Классика computer
science»).
ISBN 978-5-496-02700-7
Преподаватели Принстонскогоу ниверситетаР оберr Седжвиик Ке винУ эйн создаулнии версальное
введенви Cеo mputSecri enнcаeя зыкJеav a, которое идеальнпоо дходкиатк с тудентамт,а ки профес
сионаламВ.ы начнетсе о сново,с воитсео временнкурсый объектно-ориентированпнроогоrр аммн
рованu и перейдектко ен цеПЦЮ1м болевеы сокогоу ровш:ал горитмами структурам даннытхе,о рии
вычислении айр хите�сrуре компьютеров.
И главно-е всят еорuр ассматриваетнсапя р актическии яхр кипхр имерапхр:и кладнаям атема
тика, физикаи биолоГИJ1,ч исловмыетео ды,в иэуал3аЦИ1и1 данныхс,и нтеззв укоаб,р аботкrар афики,
финансовмооед елированиие м ногоед ругое.
16+ (В сото ветствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.)
ББК 32.973.2-018
УДКОО4.42
Права на издание получены по соглашению с Addisoп-Wesley Loпgmaп. Все права защищены. Никакая часть
данноiii книги не может быть воспроизведена а кaкoiii бы то ни было форме без письменного разрешения вла
дельцев авторских прав.
Информация, содержащаяся в данноiii книге, получена из источников, рассматриваемых издательством как на
дежные. Тем не менее, имея в виду возможные челоееческие или технические ошибки, издательство не может
гарантировать абсоnютную точность и полноту приводимых сеедениiii и не несет ответственности за возможные
ошибки, связанные с использованием книги.
ISBN 978-0134076423 анm. © 2017 Реагsоп Educatioп, lпс.
ISBN 978-5-496-02700-7 ©Перевод на pyccкиiii язык ООО Издательство «Питер», 2018
© Издание на русском языке, оформление ООО Издательство
«Питер», 2018
©Серия «Кnассика computer scieпce», 2018
Краткое содержание
Предисловие • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 1 6
Гnава 1. Основы проrраммировани• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •2 5
Гnава 2. Функции и модуnи • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 1 99
Гnава З. Объектно-ориентированное проrраммирование • • • • • • • • • • • • • • •3 26
Гnава 4. Аnrоритмы и струкrуры данных • • • • • • • • • • • • • • • • • • • • • • • • • • • • •4 79
Гnава 5. Теори• вычислений • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •6 87
Гnава 6. Вычислитеn1она• маwина • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •8 38
Гnава 7. Построение вычислите111оноrо устройства • • • • • • • • • • • • • • • • • • • •9 48
Эакп�очение • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •1 054
Гnоссарий • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 1 057
API . . . . . . . . . . . . . . . . . . . . . . . . . . . • . . . . . . . . . . . . . . . • . . . • • . . . . • • • • • .1 086
Оглавление
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
От научного редактора русского издания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
.
От издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
.
Глава 1. Основы проrраммирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 5
.
1 .1. Ваша первая программа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
.
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
.
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
.
1.2. Встроенные типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
.
Выводы 57
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы (строки) . . . 57
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы (целые числа) . . . . . 58
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы (числа с плавающей точкой) . . . . . . . . . . . . . . . . . . . . . . 60
.
Вопросы и ответы (переменные и выражения) . . 61
. . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
.
1.3. Условные переходы и циклы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
.
Выводы . . . . 95
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
.
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
.
1.4 . Массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
.
Выводы . . . . . . . 131
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
.
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
.
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
1.5. Ввод и вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
.
Выводы . . . . . . . . . 172
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
.
Упражнения . . . . 174
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
.
Оглавление 7
1.6. Пример: случайный серфинг . . . .. .. . . . . . . .. .. . . . . . . . . .. . .. . . . . . . . . . 180
Выводы 195
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . .. .... . . . .. . 196
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения повышенной сложности. . . . ... . 198
. . . . . . . . . . . . . . . . . . . . . . . . .
Гпава 2.Ф ункции и модупи .... ......... ........... ........... ... . 199
2.1. Определение функций . . .. . . .. . . . . . .. .. . . . . . . . . . .. . . .. .. . . . . .. . .. 200
.
Вопросы и ответы . . . . .. . . . . . . . .. . .. . . . . . . . .. . . . . . . .. . .. . . . . . . . . . . 224
Упражнения . . . . .. . . . . .. .. .. . . . . .. . .. . . . . . . .. . .. . . . . . . .. . .. .. . . . 225
.
Упражнения повышенной сложности . . . . .. . . .. . . . . . .. . .. . . . . . . .. .. 228
.
2.2. Библиотеки и клиенты . . . . . 231
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы .. .. . .. . . . .. . . .. . . . . . . .. . . . . . . . . .. . . . . . . . . .. . .. 260
.
Упражнения .. . . . . .. . . . .. . .. . . . . . . .. . . . .. . . .. .. . . . . . . . .. . . .. . . . . 260
.
Упражнения повышенной сложности . . . . .. . . . . . . . . .. . . . . . . . . . .. . . . 263
.
2.3. Рекурсия .. . . .. . . .. . . . .. . . . .. . . . . . . .. . . . . . . . .. .. . . . . . . . .. .. .. . . . . 265
Выводы . ... ... ..... .. .. . . 292
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы .. . . . .. . . . . . . . . . .. . . .. . . . .. . . .. . . . . . . .. . . . . . . . . 293
.
Упражнения . . .. . . . .. .. . . . . . .. . .. . . . . . .. . . .. . . . . . . . .. . . . . . .. . .. . 294
.
Упражнения повышенной сложности . . . . . . .. . . . . . . . . .. .. . . . . . . . . . . 296
.
2.4. Пример: задача о протекании . .. . . . . . . .. .. . . . . . . .. .. . . . . . .. .. . .. . . . 300
Выводы . . . . .. . . . . . . . .. 318
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы . .. . . . . .. . . . . . . . . .. .. . . .. . . .. .. . . . . . . . . . . . .. . . . 321
.
Упражнения . . . . .. . . . .. . . . . . .. . . . . .. . . .. .. . . . . .. .. . .. . . . . . . .. . .. 322
.
Упражнения повышенной сложности . . . . . . . . . . .. . . . . .. . .. . .. . . . . . . 323
.
Гпава З. Объектно-ориентированное программирование . . . . . . . . . . . • .. 326
3.1. Использование типов данных . . . .. . .. . . . . . . . . .. . . . . .. . .. . . . . . . .. . . 327
.
Вопросы и ответы .. . . .. .. . . . . . .. . .. . . . . .. . . . . . . . .. . . . . .. . .. . . . . . . 365
Упражнения .. . . .. . .. . . . . .. . .. . . . . .. .. . .. . . .. . . . . . . . . .. . .. .. .. . .. 369
Упражнения повышенной сложности .. . . . . . . . .. .. . . . . . . .. . . . . . . . .. 372
.
3.2. Создание типов данных . . . .. . . . . .. .. . . . . .. . .. . . . . . .. . . . . . . .. . . . . . 375
.
Вопросы и ответы .. . . . .. . . . . .. .. . . . . . . .. . . . .. . . . . . . .. . . . . .. .. .. . 409
.
Упражнения . . . . .. . .. . . . .. .. . . . . . .. . . . . .. . . .. . . .. . . . . .. . . . . . . .. . 411
.
Упражнения повышенной сложности . .. . .. . . .. . . . . .. . . . . . .. . . . . . . . 415
.
8 Оглавление
3.3. Проектирование типов данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
.
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
.
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
.
Упражнения по проектированию типов данных . . . . . . . . . . . . . . . . . . . . . . 463
.
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
.
3.4. Пример: моделирование задачи п тел . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
.
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
Упражнения . .. . . 477
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
.
Гnеве 4. Аnгоритмы и структуры денных . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
4.1. Быстродействие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
.
Выводы 504
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
.
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
.
Упражнения повышенной сложности . . . . 512
. . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Сортировка и поиск . . . . . . 515
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Выводы . . . . .. . 539
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
.
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
.
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
.
4.3. Стеки и очереди . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
.
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
.
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
.
Упражнения для связных списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
.
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
4.4. Таблицы символов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
.
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
.
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
.
Упражнения для бинарных деревьев . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
.
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
4.5. Пример: феномен «тесного мира» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
.
Выводы . . . . .. . 676
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
.
Оmавление 9
Упражнения 679
. . . . . . . . . . . . . . . . . . . . . . . • . . . . . . . . . . . . . . • . . . . . . . . . . . . . .
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . 683
. . . . . • .
Г11ава 5. Теория вычиспений . • . . . . . • • . . • • . • . . • • • • . • • • • • • . . • • . . . • • . 687
5.1. Формальные языки . . . . . . . . 690
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . • .
Выводы 729
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . • .
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
.
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
. . . . . . . . . . . . . . . . . . . • .
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
.
5.2. Машины Тьюринга . . . . . 737
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . •
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752
.
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752
. . . . . . . . . . . . . . . . . . . . . •
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
.
5.3. Универсальность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
.
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
.
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
.
5.4. Вычислимость 774
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787
.
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
.
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789
.
5.5. Вычислительная сложность . . 790
. . . . . . . . . . . . . . . . . . . . . . . . . . . . • . . . . . . • .
Главный вопрос . . . . . . . . . . . . . . . . . . . . . . . . . 809
. . . . . . . . . . . . . . . . . . . . . . . • .
Вопросы и ответы 827
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . •
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
.
Упражнения повышенной сложности . . . . . . . . . . . . . 835
. . . . . . . . . . . . . . . . . •
Г11ава 6. Вычис11ите11ьная маwина • • • • • • • . . . • • • • . • . • • . • • . • . • • • . . • • • 838
6.1. Представление информации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839
.
Выводы 866
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . • . . . . .
Вопросы и ответы 867
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . • .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 870
.
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873
.
6.2. МашинаТОУ 874
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вопросы и ответы . . 896
. . . • . . . . . . . . . . . . . . . • . . . . • . . . . . . . . . . • . . . . . . . . • .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897
.