Каков наиболее эффективный способ генерации большого (~ 300k вершин) случайного планарного графа (здесь случайный) означает равномерно распределенный)?Создание большого случайного планарного графика
ответ
Хорошо, один метод заключается в том, чтобы попытаться создать случайный граф, который удовлетворяет аналогичным ограничениям как планарный граф (например, ребра < = 3 * vertices - 6) и проверить, является ли оно плоским в O (n) времени, используя Алгоритм тестирования планарности Тарьяна. Если он не является плоским, сгенерируйте его снова. Не уверен, насколько эффективно это будет для 300K вершин !, хотя (или если он даже даст вам графики с равномерной вероятностью).
Существует некоторая литература по созданию планарных графов, я мог бы найти здесь один документ: Generating Labeled Planar Graphs, который, судя по всему, ожидал O (n^4), и может и не стоить того. Возможно, ссылки там помогут вам отследить то, что может помочь.
Удачи вам!
Без каких-либо других требований, я бы сказал, искать случайное поколение лабиринтов. Если вам нужны циклы на графике, случайно удалите некоторые стены из простого лабиринта. Пересечения в лабиринте становятся узлами вашего графика, а удаленные стены - это края. Это означает, что вы можете выбрать количество узлов, выбрав размер лабиринта.
Лабиринты, как правило, выполняются на 2-й сетке, состоящей не более чем из 4-х соединений от одной точки к другой, но нет ничего, что помешает вам сделать лабиринт на шестигранниках или что-то еще.
Если по однородности вы имеете в виду равномерно распределенное пространство, то это довольно быстрый алгоритм, который я разработал для создания планарных графов для пространственного экологического/эволюционного симулятора. Он будет генерировать случайные плоские графики с ожидаемой степенью, которую вы укажете, конечно, с некоторыми изменениями вокруг нее. Вы могли бы расширить его, чтобы выбрать ожидаемую степень, основанную на равномерном случайном числе, если бы вы хотели равномерные случайные градусы в вашем планарном графе.
https://github.com/briandconnelly/seeds/blob/master/seeds/plugins/topology/CartesianTopology.py
Кажется, этот алгоритм может генерировать графики, края которых пересекаются? Это не плоский граф. Например, если в круге данного радиуса есть 4 точки, все они будут соединяться друг с другом, а диагонали пересекаются, делая график непланарным. –
Другая возможность состоит в выборе координат случайным образом, а затем вычислить триангуляционную, который представляет собой плоский граф (и выглядит хорошо, как хорошо). См. http://en.wikipedia.org/wiki/Delaunay_triangulation Существуют алгоритмы O (n log (n)) для вычисления такой триангуляции.
, но он будет иметь фиксированную степень 3? –
У него не будет фиксированной степени 3, но он будет плоским. –
О, извините, вы правы - я думаю о двойном. –
Вы посмотрели на выбор Больцмана? См. Статью Эрика Фуси «Равномерная случайная выборка плоских графов в линейном времени». Бумага и реализация доступны в его homepage, который, по словам газеты, может генерировать экземпляры размером 100 тыс. За несколько секунд.
- 1. Окраска определенного типа планарного графика
- 2. Java-графика случайного текста
- 3. Создание графика/графика графика
- 4. Поиск компонентов очень большого графика
- 5. Создание случайного int
- 6. Создание случайного числа
- 7. Создание случайного числа
- 8. Создание случайного числа объектов
- 9. Создание уникального случайного массива
- 10. Создание случайного массива битов
- 11. Создание случайного изображения мерцания
- 12. Создание случайного дерева?
- 13. Создание случайного итератора (перестановка)
- 14. Создание случайного значения GLfloat
- 15. Создание случайного двоичного файла
- 16. Swift - Создание случайного пути
- 17. Создание случайного строчного строчка
- 18. Создание случайного логического соединения
- 19. Создание произвольного случайного класса
- 20. Создание случайного 2D-массива
- 21. Создание случайного двоичного генератора
- 22. Использование VBO/IBO для рисования большого графика
- 23. Создать нефиксированную длину большого случайного числа (bigint)
- 24. Окраска неориентированного планарного графа в Prolog
- 25. Создание графика в Java
- 26. [Latex] -Создание взвешенного графика
- 27. Создание графика гистограммы
- 28. Создание цветного графика рассеяния
- 29. JSP: Создание графика
- 30. создание нескольких объектов графика
наверняка почти все случайные графы не являются плоскими? –