2016-02-23 3 views
0

У меня есть матрица:Как подмножить матрицу и найти самый короткий путь между всеми узлами в Matlab?

 1   2   3   4   5   6  
    1 0.7431 0.2769 0.0000 0.1869 0.2760 0.9597 
    2 0.2769 0.0462 0.0344 0.4898 0.6797 0.3404 
    3 0.0000 0.0344 0.4387 0.4456 0.6551 0.0000 
    4 0.1869 0.4898 0.4456 0.6463 0.1626 0.2238 
    5 0.2760 0.6797 0.6551 0.1626 0.1190 0.7513 
    6 0.9597 0.3404 0.0000 0.2238 0.7513 0.2551 

Целые являются индекс. У меня есть хеш-таблица, в которой каждый индекс является человеком. Десятичные числа - это взаимодействия между индексами. Теперь я хочу Подмножество этой матрицы со списком индекса (1, 3, 6), что означает, что я только забочусь взаимодействие между 1, 3 и 6.

Subset: 

     1    3    6 
    1 0.7431  0.0000   0.9579 

    3 0.0000  0.4387   0.0000 

    6 0.9579  0.0000   0.2551 

Там нет взаимодействия между некоторыми людьми, например лицо 1 и 3 или лицо 3 и 6. Но 1 взаимодействует с 2, 4, 5 и 6, которые взаимодействуют с 3. Таким образом, 1 взаимодействует с 3 по 2, 4, 5 или 6. Это может быть 1-> 2-> 4 -> 3 или 1-> 4-> 3 что-то вроде этого. Я хочу найти кратчайший путь для тех двух узлов, у которых нет прямых взаимодействий. Я хочу подмножить исходную матрицу, а затем найти кратчайший путь между узлами, которые не имеют взаимодействия. Извините, ребята, я не прояснился.

+3

Что вы подразумеваете под расстояниями между всеми узлами и кратчайшими путями? – mikkola

+0

Можете ли вы привести небольшой пример? Я с @mikkola, где я не понимаю, чего вы хотите. – rayryeng

+0

Является ли это матрицей весов в полном графике? Если да, то почему у вас есть ненулевые значения по диагонали? – gariepy

ответ

0

Я думаю, что вы хотите посмотреть на Dijkstra's algorithm:

Существует Mathworks обмен файлами алгоритм, который вычисляет алгоритм Дейкстры здесь:

http://www.mathworks.com/matlabcentral/fileexchange/36140-dijkstra-algorithm

Я использовал его, прежде чем рассчитать кратчайший путь .. .it довольно эффективный и гарантированный оптимальный. Нет необходимости подмножать матрицу ... если есть узлы, которые вы не хотите рассматривать, просто не помещайте их в свою матрицу.