Алгоритмы и структуры данных
В конце концов, только знание инструментов и технологий
обеспечит правильное решение поставленной задачи, и только определенный
уровень опыта обеспечит устойчиво профессиональные результаты.
Реймонд Филдинг. Технология специальных
эффектов в кинематографе
Исследование алгоритмов и структур данных является одной из основ программирования,
а также богатым полем элегантных технологий и сложных математических изысканий.
И это — что-то большее, чем развлечение для теоретически подготовленных:
хороший алгоритм или структура данных могут позволить решить в течение
нескольких секунд проблему, которая без них решалась бы годы.
В таких специальных областях, как графика, базы данных, синтаксический
разбор, цифровой анализ и моделирование, возможность решения задачи целиком
и полностью зависит от наличия специальных алгоритмов и структур данных.
Если вы разрабатываете программы в новых для вас областях программирования,
то вы должны выяснить, какие наработки уже существуют, иначе вы потратите
свое время впустую в попытках плохо сделать то, что уже кем-то было сделано
хорошо.
Каждая программа зависит от алгоритмов и структур данных, но редко бывает
нужно изобретать новые алгоритмы. Даже в сложной программе, например в
компиляторе или Web-браузере, структуры данных по большей части являются
массивами, списками, деревьями и хэш-таб-лицами. Когда программе нужна
более изощренная структура, она, скорее всего, будет основываться на этих
более простых структурах. Соответственно, задача программиста — знать,
какие алгоритмы и структуры доступны, а также понимать, как выбрать среди
них нужные.
Такова, вкратце, ситуация. Есть лишь горстка основных алгоритмов, которые
применяются практически в каждой программе, — это, прежде всего, поиск
и сортировка, и даже эти алгоритмы зачастую включены в библиотеки. Почти
все структуры данных также сделаны на основе нескольких фундаментальных
структур. Поэтому материал данной главы знаком почти всем программистам.
Мы написали работающие версии программ, чтобы дискуссия была более конкретной,
и при желании вы можете обратиться непосредственно к исходному коду, но
делайте это, только если вы разобрались в том, что вам могут предложить
ваш язык программирования и его библиотеки.
|