Как сравнить сходство между двумя многомерными массивами в Java - PullRequest
0 голосов
/ 27 марта 2011

Я сделал программу, которая строит 3 графика (дуга и узел).Графики были построены на основе двумерных массивов 1 и 0. Первый график - это идеальный график, с которым будут сравниваться два других.Я бродил, если есть способ сравнения сходства между двумя графами, т. Е. Сколько вершин в графе 2 похожи на вершины в графе 1.

Альтернативный вопрос: Графики были построены на основе двумерных массивов1 и 0, так что если есть способ сравнить 2D-массив для Графа 1 с массивом для Графа 2, вместо этого это решило бы мою проблему.

Я не ожидаю, что вы все поставите коды, но яЯ просто пытаюсь понять, если есть метод, который может сделать это.И если так, как это можно сделать.Любая помощь очень ценится!

Привет всем,

Просто чтобы прояснить ситуацию: у меня есть два двумерных массива, например:

double [][] MatrixOfOriginalGraph= {{1,1,1,1}, {0,1,0,0}, {0,0,1,0}, {0,0,0,1}}; double [][] MatrixToBeComparedWithOriginal= {{1,0,0,1}, {0,1,1,0}, {0,0,1,1}, {0,0,0,1};

Первый массив используется для рисования первого графика, а второй - для рисования второго графика.Первый граф в основном представляет собой граф из 4 узлов, где первый узел связан со всеми остальными узлами.Другие узлы не связаны друг с другом.Второй график смешанный.Я хочу знать, сколько узлов в вершинах второго графа совпадает с узлами в графе 1.

Спасибо, jetnori.

1 Ответ

0 голосов
/ 28 марта 2011

Надеюсь, я вас правильно понял. У вас есть график, и ваш массив MatrixOfOriginalGraph будет представлять собой следующую матрицу смежности:

1111
0100
0010
0001

А сходство определяется подобными связями?

Может быть, хорошей отправной точкой может быть расстояние Хэмминга между парами узлов, каждая из одного графика?

So

double [] [] MatrixOfOriginalGraph = {{1,1,1,1}, {0,1,0,0}, {0,0,1,0}, {0,0,0,1} };
double [] [] MatrixToBeComparedWithOriginal = {{1,0,0,1}, {0,1,1,0}, {0,0,1,1}, {0,0,0,1};

приведет к чему-то вроде

int node1 = computeDistance({0,1,0,0}, {0,1,1,0});
int node2 = computeDistance({1,1,1,1}, {1,0,0,1});

и так далее. Но имейте в виду, что при использовании расстояния Хэмминга в обеих сравниваемых структурах должно быть одинаковое количество переменных. Я не знаю, является ли это ограничением вашей проблемы. Если это будет ограничением, вы можете вместо этого попробовать расстояние Левенштейна .

Чем меньше расстояние, тем больше узлов. Затем вы можете суммировать расстояния Хемминга всех узлов (ну, на самом деле, вы могли бы просто рассчитать расстояние по всей последовательности единиц и нулей) или вычислить среднее значение и отклонение и так далее, в зависимости от того, что вам нужно или как вы определяете сходство.

...