Jump to content

Обход графа внешней памяти

Обход графа внешней памяти — это тип обхода графа , оптимизированный для доступа к внешне хранимой памяти.

Обход графа — это подпрограмма в большинстве графовых алгоритмов. Цель алгоритма обхода графа — посетить (и/или обработать) каждый узел графа. Алгоритмы обхода графа, такие как поиск в ширину и поиск в глубину , анализируются с использованием модели фон Неймана , которая предполагает равномерную стоимость доступа к памяти. Эта точка зрения игнорирует тот факт, что в огромных экземплярах часть графа находится на диске, а не во внутренней памяти. Поскольку доступ к диску происходит намного медленнее, чем доступ к внутренней памяти, существует необходимость эффективного обхода внешней памяти .

Модель внешней памяти

[ редактировать ]

Для алгоритмов внешней памяти модель внешней памяти Аггарвала и Виттера [1] используется для анализа. Машина задается тремя параметрами M , B и D. : M — размер внутренней памяти, B — размер блока диска, а D — количество параллельных дисков. Мерой производительности алгоритма внешней памяти является количество операций ввода-вывода, которые он выполняет.

[ редактировать ]

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

Мунагала и Ранаде

[ редактировать ]
Визуализация вычисления L(t) в алгоритме поиска Мунагалы-Ранаде в ширину .

Для неориентированного графа , Мунагала и Ранаде [2] предложил следующий алгоритм внешней памяти:

Позволять обозначим узлы на уровне поиска в ширину t и пусть быть мультимножеством соседей уровня t-1. Для каждого т, может быть построен из путем преобразования его в набор и исключения из него ранее посещенных узлов.

  1. Создавать путем доступа к списку смежности каждой вершины в . Этот шаг требует Ввод/вывод.
  2. Следующий создан из путем удаления дубликатов. Этого можно добиться путем сортировки , за которым следует этап сканирования и уплотнения, требующий Ввод/вывод.
  3. рассчитывается путем параллельного сканирования и и требует Ввод/вывод.

Общее количество операций ввода-вывода этого алгоритма следует с учетом того, что и и есть .

Визуализация трех описанных шагов, необходимых для вычисления L ( t ), изображена на рисунке справа.

Мельхорн и Мейер

[ редактировать ]

Мельхорн и Мейер [3] предложил алгоритм, основанный на алгоритме Мунагалы и Ранаде (MR) и улучшающий их результат.

Он состоит из двух этапов. На первом этапе граф предварительно обрабатывается, на втором этапе выполняется поиск в ширину с использованием информации, собранной на первом этапе.

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

Фаза поиска в ширину аналогична алгоритму MR. алгоритм поддерживает отсортированный внешний файл H. Кроме того , Этот файл инициализируется с помощью . Кроме того, узлы любого созданного уровня поиска в ширину содержат идентификаторы файлов. соответствующих подграфов . Вместо использования произвольного доступа для создания файл H. используется

  1. Выполнить параллельное сканирование отсортированного списка и Х. ​Извлеките списки смежности для узлов , это можно найти в H .
  2. списки смежности для остальных узлов, которые не удалось найти в H. Необходимо получить Сканирование закончено возвращает идентификаторы разделов. После сортировки и удаления дубликатов соответствующие файлы могут быть объединены во временный файл F' .
  3. Недостающие списки смежности можно извлечь из F' с помощью сканирования. Затем оставшиеся списки смежности объединяются в H за один проход.
  4. создается путем простого сканирования. Информация о разделе прикреплена к каждому узлу в .
  5. Алгоритм аналогичен алгоритму MR.

Ребра могут сканироваться чаще в H , но количество неструктурированных операций ввода-вывода для получения списков смежности сокращается.

Общее количество операций ввода-вывода для этого алгоритма равно

[ редактировать ]

Алгоритм поиска в глубину исследует граф вдоль каждой ветви как можно глубже перед обратным отслеживанием.

Для ориентированных графов Бухсбаума, Гольдвассера, Венкатасубраманиана и Вестбрука. [4] предложил алгоритм с Ввод/вывод.

Этот алгоритм основан на структуре данных, называемой деревом буферизованного репозитория (BRT). Он хранит множество элементов из упорядоченной вселенной. Элементы идентифицируются по ключу. БТР предлагает две операции:

  • insert(T, x), который добавляет элемент x к T и требует амортизированные входы/выходы. N — количество предметов, добавленных в БТР.
  • extract(T, k), который сообщает и удаляет из T все элементы с ключом k . Это требует Ввод-вывод, где S — размер набора, возвращаемого экстрактом .

Алгоритм имитирует внутренний алгоритм поиска в глубину. Стек S узлов удерживается. Во время итерации узла v поверх S поместите непосещенного соседа на S и выполните итерацию. Если непосещенных соседей нет, pop v .

Трудность состоит в том, чтобы определить, является ли узел непосещенным, не делая Число операций ввода-вывода на каждое ребро. Для этого для узла v входящие ребра помещаются в BRT D при v первом обнаружении . Далее, исходящие ребра ( v , x ) помещаются в приоритетную очередь P ( v ), определяемую рангом в списке смежности.

Для вершины u вершине S все ребра ( u , x ) извлекаются из D. на Такие ребра существуют только в том случае, если x был обнаружен с момента последнего нахождения u на вершине S (или с момента запуска алгоритма, если u впервые оказался на вершине S ). Для каждого ребра ( u , x ) операция удаления ( x ) выполняется над P ( u ). Наконец, операция удаления мин на дает следующий непосещенный узел. Если P ( u ) пусто, u извлекается из S .

Псевдокод этого алгоритма приведен ниже.

1  procedure BGVW-depth-first-search(G, v):
2      let S be a stack, P[] a priority queue for each node and D a BRT
3      S.push(v)
4      while S is not empty:
5          v := S.top()
6          if v is not marked:
7              mark(v)
8          extract all edges (v, x) from D, ∀x: P[v].delete(x)
9          if (u := P[v].delete-min()) is not null:
10             S.push(u)
11         else:
12             S.pop()

13  procedure mark(v)
14      put all edges (x, v) into D
15      ∀ (v, x): put x into P[v]
  1. ^ Аггарвал, Алок; Виттер, Джеффри (1988). «Сложность ввода/вывода сортировки и связанные с ней проблемы» . Коммуникации АКМ . 31 (9): 1116–1127. дои : 10.1145/48529.48535 .
  2. ^ Мунагала, Камешвар; Ранаде, Абхирам (1999). «I/O-сложность графовых алгоритмов». Материалы десятого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам . СОДА '99. Балтимор, Мэриленд, США: Общество промышленной и прикладной математики. стр. 687–694.
  3. ^ Мельхорн, Курт; Мейер, Ульрих (2002). «Поиск в ширину во внешней памяти с сублинейным вводом-выводом». Алгоритмы -- ЕКА 2002 . ЕКА 2002. Рим, Италия: Springer Berlin Heidelberg. стр. 723–735.
  4. ^ Бухсбаум, Адам Л.; Гольдвассер, Майкл; Венкатасубраманиан, Майкл; Уэстбрук, Суреш (2000). «Об обходе графа внешней памяти». Материалы одиннадцатого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам . СОДА '00. Сан-Франциско, Калифорния, США: Общество промышленной и прикладной математики. стр. 859–860.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d6c4541cfd2097a2e2e9072ae39b4cf8__1710256680
URL1:https://arc.ask3.ru/arc/aa/d6/f8/d6c4541cfd2097a2e2e9072ae39b4cf8.html
Заголовок, (Title) документа по адресу, URL1:
External memory graph traversal - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)