Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






АТД графа






Мы разрабатываем наши алгоритмы обработки графов, используя для этой цели абстрактный тип данных (АТД), который позволяет сформулировать фундаменталь­ные задачи, используя стандартный механизм, введенный в главе 4. Программа 17.1 представляет собой интерфейс АТД, который будет использоваться для этих целей. Базовые представления и реализации графа для этого АТД рассматриваются в главах 17.3-17.5. Далее в этой книге, всякий раз, когда мы будем рассматривать новые за­дачи обработки графов, мы будем также проводить исследования алгоритмов их ре­шения и реализации этих алгоритмов в контексте клиентских программ и абстракт­ных типов данных, которые получают доступ к графам через этот интерфейс. Такая схема позволит решать задачи обработки графов в диапазоне от элементарных фун­кций поддержки до сложных решений трудных проблем.

В основу рассматриваемого интерфейса положен применяемый нами стандартный механизм, который скрывает представления и реализации от клиентских программ (см. раздел 4.8). Он также включает определение простой структуры, которая позволяет на­шим программам манипулировать ребрами некоторым единообразным способом. Такой интерфейс предоставляет в распоряжение клиентов базовый механизм, который позво­ляет им строить графы (сначала строится граф, затем к нему добавляются ребра), осуще­ствлять поддержку графов (путем удаления некоторых ребер и добавления новых) и ис­следовать графы (путем использования итератора для обработки вершин, смежных по отношению к заданной вершине).



Часть 5. Алгоритмы на графах


Программа 17.1. Интерфейс АТД графа

Этот интерфейс представляет собой отправную точку для реализации и тестирования алгоритмов обработки данных. Он определяет два типа данных: тривиальный тип данных Edge, включающий функцию конструктора, которая строит ребро по двум заданным вершинам, и тип данных GRAPH, определение которого дается в соответствии с методологией стандартного, независимого от представления интерфейса АТД, описанного в главе 4.

Конструктор GRAPH принимает два аргумента: целое, задающее число вершин, и булевское значение, которое показывает, является ли граф ориентированным или неориентированным (орграф), при этом неориентированный граф подразумевается по умолчанию.

Базовые операции, которые мы используем для обработки графов и орграфов, суть функции АТД, обеспечивающие их построение и уничтожение, функции для подсчета числа вершин и ребер, а также для добавления и удаления ребер. Класс итератора adjlterator позволяет клиентам проводить обработку любых вершин, смежных по отношению к заданной вершине. Программы 17.2 и 17.3 служат иллюстрацией его использования.

struct Edge { int v, w;

Edge(int v = -1, int w = -1): v(v), w(w) { } };

class GRAPH { private:

// Код, зависящий от реализации public:

GRAPH(int, bool); -GRAPH (); int V() const; int E() const; bool directed() const; int insert(Edge); int remove(Edge); bool edge (int, int); class adjlterator { public:

adjlterator (const GRAPH &, int); int beg(); int nxt(); bool end(); }; >;

АТД в программе 17.1 представляет собой основной механизм, который позволяет нам разрабатывать и осуществлять тестирование алгоритмов; это отнюдь не универсальный интерфейс. Как обычно, мы работаем с простейшим интерфейсом, который поддержи­вает базовые операции обработки графов, исследование которых мы намерены провес­ти. Определение такого интерфейса для использования в практических приложениях тре­бует достижения многочисленных компромиссов между простотой, эффективностью и универсальностью. Далее мы рассмотрим лишь некоторые из таких компромиссов; ос­тальные мы будем анализировать в контексте реализаций и приложений, которые будут встречаться на протяжении всей этой книги.



Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал