Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

13.3. Пересечения графа 611

13.3.2 Осуществление глубины сначала ищет

Как мы упомянули выше, структура данных, которую мы используем, чтобы представлять граф, влияет на исполнение алгоритма DFS. Например, список смежности может использоваться, чтобы привести к продолжительности O (n + m) для того, чтобы пересечь граф с n вершинами и m краями. Используя матрицу смежности, с другой стороны, привел бы к продолжительности O (n2), так как каждое из требований n к функции incidentEdges возьмет O (n) время. Если граф плотный, то есть, у него есть близко к O (n2) края, то различие между этими двумя выбором незначительно, поскольку они оба управляли бы в O (n2) временем. Но если бы граф редок, то есть, у него есть близко к O (n) края, тогда подход матрицы смежности был бы намного медленнее, чем подход списка смежности.

Другая важная деталь внедрения соглашения с путем вершины и края представлена. В частности у нас должен быть способ отметить вершины и края, как посещается или нет. Есть два простых решения, но у каждого есть недостатки.

• Мы можем построить нашу вершину, и край возражает, чтобы содержать посещаемую область, которая может

используйтесь алгоритмом DFS для маркировки. Этот подход довольно прост,

и поддерживает постоянно-разовую маркировку и немаркировку, но это предполагает, что мы проектируем наш граф с DFS в памяти, который не всегда будет действителен. Кроме того, этот подход напрасно ограничивает DFS графами с вершинами, имеющими посещаемую область. Таким образом, если мы хотим универсальный алгоритм DFS, который может взять любой граф в качестве входа, у этого подхода есть ограничения.

• Мы можем использовать вспомогательную хеш-таблицу, чтобы сохранить все исследуемые вершины и края

во время алгоритма DFS. Эта схема общая, в котором она не делает пере -

печатный лист любые специальные области в положениях графа. Но этот подход не достигает худшего случая постоянное время для маркировки и немаркировки краев вершин. Вместо этого такая хеш-таблица только поддерживает отметку (вставка), и тест (находят) операции в постоянное ожидаемое время (см. Раздел 9.2).

К счастью, есть компромисс между этими двумя крайностями.

Образец декоратора

Отмечание исследуемых вершин в пересечении DFS является примером шаблона программирования декоратора. Этот образец используется, чтобы добавить художественные оформления (также названный признаками) к существующим объектам. Каждое художественное оформление определено ключом iden-tifying это художественное оформление и стоимостью, связанной с ключом. Использование decora-tions мотивировано потребностью некоторых алгоритмов и структур данных, чтобы добавить дополнительные переменные или временные данные о царапине, к объектам, у которых обычно нет такого vari-ables. Следовательно, художественное оформление - пара значения ключа, которая может динамично быть привязана к объекту. В нашем примере DFS мы хотели бы иметь «decorable» вершины и края с посещаемым художественным оформлением и Булевым значением.