У меня есть простой класс Graph, и мне нужно создать граф с узлами и ребрами.Между двумя узлами есть ребро, nodeA
, nodeB
, если массив в nodeA
и nodeB
имеет некоторые сходства.
Например:
const example = [{
"node": "A",
"data": [ 1, 2, 3 ]
}, {
"node": "B",
"data": [ 3, 4, 5 ]
}, {
"node": "C",
"data": [ 5, 6, 7 ]
}, {
"node": "D",
"data": [ 7, 8, 9 ]
}]
Это означаетчто существует грань между:
A
и B
, потому что 3 массива на обоих data
массивах.
B
и C
, потому что 5 массивов на обоих data
массивах.
C
и D
, потому что 7 рядов на обоих data
массивах.
По сути, у нас есть ребро из A -> B -> C -> D
Мне удалось создать график и использовать список смежности для хранения ребер, но проблема в том, что я не знаю, как создавать ребрамежду узлами, которые имеют сходство.Наивным решением было бы посмотреть на example[i - 1]
и example[i]
.Но это неправильно, потому что данные приходят не по порядку.
class Graph {
constructor(numOfVertex) {
this.adj = new Map();
}
addNodes(node) {
this.adj.set(node, []);
}
addEdge(nodeA, nodeB) {
this.adj.get(nodeA).push(nodeB);
this.adj.get(nodeA).push(nodeB);
};
}
и для заполнения графика я делаю:
const graph = new Graph(example.length);
for (let i = 0; i < example.length; i++) {
const { node, data } = example[i];
graph.addVertex(title)
G.addEdge(...)
}
Любые идеи о том, как я могу перебрать данныемассив каждого узла, чтобы эффективно видеть сходства?
Ради вопроса я привел небольшой пример данных, на самом деле, я перебираю большой набор данных.