На этом шаге мы приведем общие сведения о графах.
Сложность получения ответа на тот или иной вопрос относительно алгоритмических или структурных свойств данного графа зависит, естественно, от программного способа представления графа. Поэтому в алгоритмах на графах взаимосвязь "Алгоритм + Структура данных" проявляется весьма сильно. Один и тот же алгоритм, реализованный на различных структурах данных, часто приводит к:
Однако, переход от одного представления к другому относительно прост и может быть выполнен за O(|V|2) операций, где |V| - количество вершин графа [Рейнгольд,Нивергельт,Део,1980,с.355]. Поэтому если решение задачи на графе обязательно требует числа операций, по крайней мере пропорционального |V|2, то время её решения не зависит от способа представления графа, т.к. оно может быть изменено за O(|V|2) операций.
И хотя те алгоритмы и реализации, которые описаны ниже, едва ли пригодны для решения практически важных задач, мы всё же надеемся, что читатель, интересующийся прикладными аспектами программирования на языке Haskell, получит представление о их достоинствах и недостатках.
Нашей главной целью является знакомство с методами программирования на языке Haskell, поэтому все определения, связанные с теорией графов, будут даны в той мере, в какой это необходимо.
На следующем шаге мы рассмотрим матрицу смежности.