Этого интервью вопрос, который я недавно нашел в Интернете:Эффективный способ найти степень разделения между двумя узлами в графе
Как бы вы найти степень разделения между двумя людьми на Facebook? Обсудите различные идеи, алгоритмы и компромиссы. (Определение степени saparation: http://en.wikipedia.org/wiki/Six_degrees_of_separation)
Вот что я думаю об этом:
Алгоритмы кандидатов, что я могу думать, являются: поиск в ширину (BFS), поиск в глубину (DFS) , поиск по глубине (DLS), поиск с итерационным углублением (IDS).
Во-первых, DFS следует принимать во внимание. Очень вероятно, что даже когда эти два человека связаны (то есть степень разделения = 1), алгоритм может продолжать поиск по неправильному пути в течение длительного времени.
BFS гарантирует минимальную степень разделения (так как график не взвешен). Предположим, что максимальный коэффициент ветвления равен b, а фактическая степень разделения между двумя целевыми людьми равна d, как временная сложность, так и сложность пространства - O (b^d).
Поскольку максимальная возможная степень разделения неизвестна (хотя она не должна превышать 6), возможно, не рекомендуется использовать DLS. Однако IDS, по-видимому, является лучшей идеей, чем BFS - сложность времени также O (b^d) (хотя фактическое время стоит немного выше, чем BFS из-за повторного посещения промежуточных узлов), тогда как его пространственная сложность равна O (bd), что намного лучше, чем O (b^d).
В конце концов, я бы выбрал IDS. Это приемлемый ответ в интервью? Неужели я ошибся в вышеупомянутом выводе? Или есть какие-то лучшие решения, которые я пропустил?
Заранее спасибо.
Я раньше не думал о двунаправленном поиске. Спасибо, что упомянули. – quantumrose