Заключение
При выборе алгоритма нужно сделать несколько шагов. Во-первых, следует
изучить существующие алгоритмы и структуры данных. Подумайте, какой объем
данных может обработать программа. Если задача предполагает скромные размеры
данных, то выбирайте простые технологии; если количество данных может
расти, то исключите решения, плохо приспосабливающиеся к этому росту.
Там, где возможно, используйте библиотеку или специальные средства языка.
Если ничего готового нет, то напишите или достаньте короткую, простую,
понятную реализацию. Попробуйте ее в действии. Если измерения показывают,
что она слишком медленная, только тогда вам стоит перейти к более продвинутым
технологиям.
Хотя есть много структур данных, часть которых просто необходима для
приемлемой производительности в определенных условиях, большинство программ
основано на массивах, списках, деревьях и хэш-таб-лицах. Каждая из этих
структур поддерживает набор операций-примитивов, обычно включающий в себя:
создание нового элемента, поиск элемента, добавление элемента куда-либо,
возможно, удаление элемента и применение некоторой операции ко всем элементам.
У каждой операции есть ожидаемое время выполнения, которое часто определяет,
насколько выбранный тип данных или его реализация подходит для конкретного
приложения. Массивы предоставляют доступ к элементам за константное время,
но зато плохо изменяют свои размер; Списки хорошо приспособлены для вставки
и удаления, но случайный доступ к элементам происходит лишь за линейное
время. Деревья и хэш-таблицы предоставляют разумный компромисс: быстрый
доступ к заданным элементам в сочетании с легкой расширяемостью, пока
в их структуре соблюдается определенный баланс.
Есть еще множество изощренных структур данных для специальных задач,
однако этот базовый набор вполне достаточен для написания подавляющего
большинства программ
|