Алгоритм Графа Для Нахождения Всех Связей Между Двумя Произвольными Вершинами
Я пытаюсь определить наилучший алгоритм эффективного времени для выполнения задачи, описанной ниже.
у меня есть набор записей. Для этого набора записей у меня есть данные соединения, которые указывают, как пары записей из этого набора соединяются друг с другом. Это в основном представляет собой неориентированный граф, причем записи являются вершинами, а данные соединения-ребрами.
все записи в наборе есть информацию о соединении (т. е. нет бесхозных записей присутствует; каждая запись в наборе подключается к одной или нескольким другим записям в наборе).
Я хочу выбрать любые две записи из набора и иметь возможность показать все простые пути между выбранными записями. Под "простыми путями" я подразумеваю пути, которые не имеют повторяющихся записей в пути (т. е. только конечные пути).
Примечание: две выбранные записи всегда будут разными (т. е. начальная и конечная вершины никогда не будут одинаковыми; нет циклов).
для пример:
If I have the following records:
A, B, C, D, E
and the following represents the connections:
(A,B),(A,C),(B,A),(B,D),(B,E),(B,F),(C,A),(C,E),
(C,F),(D,B),(E,C),(E,F),(F,B),(F,C),(F,E)
[where (A,B) means record A connects to record B]
если бы я выбрал B в качестве начальной записи и E в качестве конечной записи, я бы хотел найти все простые пути через соединения записей, которые соединят запись B с записью E.
All paths connecting B to E:
B->E
B->F->E
B->F->C->E
B->A->C->E
B->A->C->F->E
это пример, на практике у меня могут быть наборы, содержащие сотни тысяч записей.
Comments