Я недавно реализовал алгоритм Дейкстры для практики Java. Сейчас я думаю о том, как построить случайные тестовые графы (с однонаправленными ребрами).
В настоящее время я использую наивный метод. Узлы создаются в случайных местах в 2d пространстве (где x и y - целые числа без знака между 0 и некоторой константой MAX_SPACE). Ребра создаются случайным образом для соединения узлов, так что каждый узел имеет степень не менее 1 (и не более MAX_DEGREE). Indegree не применяется. Затем я ищу путь между первым и последним узлами в наборе, который может или не может быть подключен.
В более реалистичной ситуации вероятность подключения узлов будет пропорциональна их близости в 2-мерном пространстве. Какова хорошая стратегия для построения случайных тестовых графиков с этим свойством?
ПРИМЕЧАНИЯ
В первую очередь я буду использовать это для построения графиков, которые можно рисовать и проверять вручную, но масштабирование на более крупные графики является соображением.
Стратегия должна быть легко изменена для поддержки следующих констант (и, возможно, других - дайте мне знать, если вы думаете о каких-либо интересных):
- MIN_NODES, MAX_NODES: диапазон размеров для графика
- СОЕДИНЕНИЕ: средний уровень
- БЛИЗОСТЬ: вес, отданный предпочтению соединения проксимальных узлов