Преобразование матрицы смежности в матрицу расстояний или прыжков

Можно ли преобразовать матрицу смежности из единиц и нулей, как определено здесь в матрицу расстояний, как определено здесь, где каждая ссылка будет иметь единичную длину 1?


person pyCthon    schedule 09.04.2012    source источник
comment
У вас есть информация о весе каждой ссылки?   -  person Manlio    schedule 10.04.2012
comment
да я отредактировал вопрос   -  person pyCthon    schedule 10.04.2012


Ответы (1)


Матрица смежности единиц и нулей — это просто представление неориентированного графа. Чтобы получить расстояния между любыми двумя вершинами невзвешенного графа, вы можете использовать поиск в ширину. .

Предполагая, что у вас есть матрица n на n:

for each vertex i:
    initialize an nxn matrix M
    run breadth-first search starting at i
    copy distances into row i of M
    return M
person tskuzzy    schedule 09.04.2012
comment
Вместо поиска в ширину, вероятно, было бы лучше использовать алгоритм для задачи поиска кратчайшего пути для всех пар - person Hans; 10.04.2012
comment
это займет вечность для большого дела - person pyCthon; 10.04.2012
comment
@Hans: Floyd-Warshall занимает O(V^3) время, тогда как BFS занимает O(V^2+VE). BFS всегда быстрее и значительно быстрее для разреженных графов. Самый быстрый способ найти кратчайший путь в неориентированном графе — это всегда BFS. - person tskuzzy; 10.04.2012
comment
@tskuzzy: что такое В и Е? Количество узлов/ребер? Здесь нужны расстояния между всеми парами, насколько я понимаю, BFS находит только расстояние до корневого узла - можно поподробнее? Кроме того, в реальной жизни константы действительно имеют значение... - person Hans; 11.04.2012
comment
@Hans: Да, V — это количество вершин, а E — количество ребер. Мы запускаем BFS для каждой вершины, чтобы вычислить кратчайший путь для всех пар. Константы, связанные с BFS, сравнимы с константами FW, если не меньше. Если вы сравните их, вы увидите, что BFS лучше. - person tskuzzy; 11.04.2012
comment
оба хороших момента мне пришлось использовать алгоритм Дейкстры с кучами Фибоначчи из реализации, которую я нашел в Интернете - person pyCthon; 15.04.2012