#javascript #data-structures #graph #graph-theory #cytoscape.js
#javascript #структуры данных #График #теория графов #cytoscape.js
Вопрос:
Я пытаюсь написать функцию для генерации случайного ориентированного ациклического графа (DAG) с n узлами. Я написал эту функцию для генерации узлов, теперь мне нужно сгенерировать ребра, но, похоже, я не могу обмозговать это. У меня есть некоторые ограничения, граф ациклический, и узел может иметь максимум 3 родителя.
var colors = ["#FF0000","#00FF00","#0000FF"]
var alpahbet = "abcdefghijklmnopqrstuvwxyz"
var intializeNodes = function (numOfNodes){
for(i = 0; i< numOfNodes; i ){
nodes.push({
group: 'nodes',
data: {id: alpahbet.charAt(i), color: colors[Math.floor(Math.random() * colors.length)]},
});
nodes.push()
}
}
Спасибо за помощь!
Комментарии:
1. Итак, вы создали несколько узлов. Что вы пробовали в создании краев?
2. Я не думаю, что это так же просто, как добавить все узлы сразу, а затем добавить несколько ребер. Вы должны предотвратить изолированные узлы и поддерживать максимальное количество дочерних узлов. Кажется, я читал статью о генерации DAG с помощью цепи Маркова. Если вы можете, ознакомьтесь с текущими подходами к реализации случайной генерации DAG, я нашел несколько интересных статей.
3. В зависимости от требуемого размера, может быть достаточно просто случайным образом добавлять ребра, проверяя для каждого, что граф остается ациклическим, и на цели не более максимального количества входящих узлов. Вероятно, это станет проблематичным, если количество ребер будет слишком близко к максимально возможному, но если мы не близки к этому, это, вероятно, самый простой метод. Поочередно добавляйте все потенциальные ребра и повторно удаляйте случайные, пока не будут выполнены критерии.
4. Eeeh, случайный означает, что могут быть довольно ожидаемые результаты. Если вы хотите убедиться, что соответствуете критериям, я не думаю, что это так просто, как просто добавить несколько ребер и надеяться, что удаление некоторых сделает граф ациклическим. Уже есть 26 узлов с, по крайней мере, вероятно, от 2 до 5 исходящих ребер.