Предположим, что у меня есть очень большой неориентированный невзвешенный граф (начинающийся с сотен миллионов вершин, ~ 10 ребер на вершину), нераспределенный и обрабатываемый только одним потоком, и что я хочу выполнить поиск по нему в ширину. Я ожидаю, что они будут привязаны к вводу-выводу, поэтому мне нужен макет страницы диска, подходящий для BFS, место на диске не является проблемой. Поиск может начинаться в каждой вершине с равной вероятностью. Интуитивно это означает минимизацию количества ребер между вершинами на разных страницах диска, что является проблемой разбиения графа.
Сам граф выглядит как спагетти, представьте себе случайный набор точек, случайно связанных между собой, с некоторым уклоном в сторону более коротких краев.
Проблема в том, как один граф разделов может быть таким большим? Я обнаружил, что доступные разделители графов работают с графами, которые помещаются только в память. Мне не удалось найти никаких описаний или реализаций каких-либо алгоритмов разделения потокового графа.
ИЛИ, может быть, есть альтернатива графику разбиения для получения разметки диска, которая хорошо работает с BFS?
Прямо сейчас в качестве приближения я использую тот факт, что вершины имеют привязанные к ним пространственные координаты, и помещаю вершины на диск в порядке сортировки Гильберта. Таким образом, пространственно близкие вершины оказываются на одной странице, но наличие или отсутствие ребра между ними полностью игнорируется. Могу я сделать лучше?
В качестве альтернативы я могу разбить граф на части, используя порядок сортировки Гильберта для вершин, разбить подграфы, сшить их обратно и принять плохое разделение по швам.
Некоторые вещи я уже изучил:
- Как хранить большой ориентированный невзвешенный граф с миллиардами узлов и вершин
- http://neo4j.org/ - я не нашел никакой информации о том, как он выполняет разметку графика на диске
Реализации секционирования (если я не ошибаюсь, все они должны уместить граф в память):
- http://glaros.dtc.umn.edu/gkhome/views/metis
- http://www.sandia.gov/~bahendr/chaco.html
- http://staffweb.cms.gre.ac.uk/~c.walshaw/jostle/
- http://www.cerfacs.fr/algor/Softs/MESHPART/
РЕДАКТИРОВАТЬ: информация о том, как выглядят графики и что BFS может запускаться везде. РЕДАКТИРОВАТЬ: идея разбиения подграфов