В этом разделе вы узнаете:
- Что нового появилось во втором издании книги.
- О чем эта книга.
- О чем эта книга.
- Чем она отличается от других книг.
- Кому она может пригодиться.
- Что необходимо знать перед чтением.
- Какие программы и оборудование могут понадобиться читателю.
- Как организован материал книги.
Второе издание
Второе издание книги было доработано для того, чтобы читателям было проще усваивать материал, а преподавателям — использовать его на занятиях по програм- мированию. Помимо ряда дополнительных тем, в конце каждой главы появились контрольные вопросы, эксперименты и программные проекты для самостоятельной работы.
Дополнительные темы
В книге рассматривается целый ряд новых интересных тем, которые можно использоваться для создания программных проектов. Вот лишь несколько примеров:
- Обход в глубину и игровое программирование.
- Задача Иосифа Флавия.
- Коды Хаффмана и сжатие данных.
- Задача коммивояжера.Гамильтоновы циклы.
- Задача обхода доски ходом шахматного коня Алгоритм Флойда.
- Алгоритм Уоршелла.
- Деревья 2-3.
- Задача о рюкзаке.
- Генерирование перестановок K объектов из N.
- Применение свертки при хешировании.
- Поразрядная сортировка.
Вопросы
В конце каждой главы приводится список вопросов по ключевым положениям этой главы. Ответы на них приведены в приложении В. Вопросы предназначены для самоконтроля — по ним читатели смогут проверить, насколько глубоко усвоен материал
Упражнения
Мы также предлагаем несколько полезных упражнений для читателя. Одни упраж- нения связаны с выполнением каких-либо операций с приложениями Workshop или примерами программ для исследования особенностей алгоритмов, другие выполняются с карандашом и бумагой, а то и вовсе относятся к категории «умозрительных экспериментов».
Программные проекты
И самое важное: в конце каждой главы читателю предлагается несколько (обычно пять) программных проектов. Простейшие проекты представляют собой простые вариации на тему программ-примеров, а самые сложные — реализации тем, которые упоминались в тексте без приведения программного кода. Решения в книге не приводятся.
О чем эта книга
Книга посвящена использованию структур данных и алгоритмов в программировании. Структуры данных определяют способ организации данных в памяти компьютера (или на диске). Алгоритмы обеспечивают выполнение различных операций с этими структурами.
Структуры данных и алгоритмы используются почти во всех компьютерных программах, включая самые простые. Для примера возьмем программу для печати адресных наклеек. Такая программа может использовать массив с адресами; содержимое массива перебирается в простом цикле for, и каждый адрес выводится на печать.
Массив в этом примере является структурой данных, а цикл for, обеспечивающий последовательный доступ к элементам, выполняет простой алгоритм. Для простых программ с небольшими объемами данных такого простого решения может оказаться достаточно. Но для программ, обрабатывающих хотя бы умеренные объемы данных или решающих хоть сколько-нибудь нетривиальные задачи, требуются более сложные методы. Простого знания синтаксиса языка программирования, будь то Java или C++, недостаточно.
В этой книге рассказывается о том, что необходимо знать после изучения языка программирования. Изложенный материал обычно преподается в институтах и университетах на второй год преподавания информатики, после того как студент освоит азы программирования.
Чем эта книга отличается от других
О структурах данных и алгоритмах написаны десятки книг. Чем эта книга отличается от них? Три основных отличия:
- Работая над книгой, мы прежде всего стремились к тому, чтобы материал излагался понятно и доступно.
- Демонстрационные приложения Workshop наглядно поясняют рассматрива- емые темы, шаг за шагом показывая, как работают структуры данных и алгоритмы
- Примеры кода написаны на языке Java, более понятном, чем C, C++ или �as- cal (языки, традиционно использовавшиеся для написания примеров в учебни- ках по программированию).Давайте рассмотрим каждое отличие более подробно.
Доступность
Типичный учебник по программированию содержит теорию, математические формулы и заумные примеры кода. В этой книге, напротив, основное внимание уделяется простому объяснению методов решения практических задач. Мы избегаем сложных обоснований и математических выкладок. Текст поясняется многочисленными иллюстрациями.Многие книги о структурах данных и алгоритмах включают материал, отно- сящийся к программотехнике — дисциплине, направленной на проектирование и реализацию крупных и сложных программных проектов. Однако мы полагаем, что структуры данных и алгоритмы сложны и без привлечения дополнительных дисциплин, поэтому мы намеренно отказались от рассмотрения программотехни- ческих вопросов в книге. (О связи структур данных и алгоритмов с программотехникой рассказано в главе 1, «Общие сведения»).Конечно, мы используем объектно-ориентированный подход и рассматриваем различные аспекты объектно-ориентированной архитектуры, включая мини-курс ООП в главе 1. И все же основное внимание уделяется самим структурам данных и алгоритмам.
Приложения Workshop
С сайтов издательств «Питер» можно загрузить демонстрационные приложения Workshop для обсуждаемых тем. Приложения оформлены в виде апплетов Java, работающих в большинстве современных браузеров. (За дополнительной информацией обращайтесь к приложению А.) Приложения Workshop строят графические схемы, которые показывают, как работает алгоритм в режиме «замедленной съемки». Например, в одном из приложений при каждом нажатии кнопки на гисто- грамме выполняется очередной шаг процесса сортировки столбцов по возрастанию. Также выводятся значения переменных, задействованных в алгоритме сортировки, чтобы при выполнении алгоритма было точно видно, как работает программный код. Текстовые сообщения поясняют, что происходит в данный момент.
Другое приложение моделирует двоичное дерево. При помощи стрелок, пере- мещающихся по дереву вверх-вниз, пользователь следит за тем, что происходит при вставке или удалении узла из дерева. В книге используется более 20 приложений Workshop — не менее одного для каждой из основных тем.
Приложения Workshop объясняют, как в действительности устроена структура данных или как работает алгоритм, намного эффективнее любого текстового описания. Конечно, текстовые описания тоже присутствуют. Именно сочетание приложений Workshop, понятного текста и иллюстраций упрощает восприятие материала.
Приложения Workshop являются автономными графическими программами. Их можно использовать как обучающие средства, дополняющие материал книги. Не путайте приложения Workshop с примерами кода, приводимыми в тексте книги, — о них будет рассказано ниже.
Для кого написана эта книга
Книга может использоваться как изложение учебного курса «Структуры данных и алгоритмы», который обычно читается на второй год преподавания информатики. Впрочем, она также пригодится профессиональным программистам — и вообще всем, кто захочет сделать следующий шаг после изучения языка программирования. Ввиду доступности материала книга также может рассматриваться как дополнительный источник информации для более академичного и формального курса.
Что необходимо знать читателю
От читателя требуется только одно — владение каким-либо языком программирования.
Хотя примеры кода написаны на Java, вам не обязательно знать Java, чтобы разобраться в происходящем. Язык Java понять несложно, а мы постарались ограничиться общим синтаксисом, по возможности избегая экзотических или существующих только в Java конструкций.
Конечно, если читатель уже знаком с Java, это пойдет ему только на пользу. Также пригодится знание C++, так как синтаксис Java строился на базе C++. Для наших программ различия между этими языками несущественны (если не считать столь полезного исчезновения указателей); они будут кратко рассмотрены в главе 1.
Необходимые программы
Для запуска приложений Workshop вам понадобится браузер — например, Microsoft Internet explorer или netscape . Также может пригодиться программа для просмотра апплетов. Такие программы входят в комплект многих систем программирования на Java.
Для запуска примеров программ понадобится окно командной строки в Microsoft Windows или аналогичная консольная среда.
Если вы захотите изменить исходный код примеров или написать собственную программу, вам понадобится система разработки на языке Java. Существует несколько коммерческих систем такого рода;
Как организован материал книги
Информация в этом разделе предназначена для преподавателей и читателей, которые хотят получить представление о содержимом книги. Предполагается, что читатель уже знаком с основными понятиями и терминами из области структур данных и алгоритмов.