Предположим, что у меня есть очень большой неориентированный, невзвешенный граф (начиная с сотен миллионов вершин, ~ 10 ребер на вершину), не распределенный и обрабатываемый только одним потоком, и что я хочу выполнить поиск в первой строке Это. Я ожидаю, что они будут связаны с I/O-привязкой, поэтому мне нужен макет страницы с хорошим для 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/
EDIT: информация о том, как выглядят графики и что BFS может начинаться повсюду. EDIT: идея разбиения подграфов