Для моих двух центов, если вы просто пытаетесь пройти весь график, не имеет большого значения, какой алгоритм вы используете, если только он попадает на каждый узел один раз. Кажется, это то, что вы говорите, когда отмечаете:
Я просто пытаюсь пройти весь график
Это означает, что ваша терминология технически неверна - вы говорите о хождении графе, а не поиске графа. Если вы на самом деле не пытаетесь найти что-то конкретное, чего, по-видимому, вы вообще не упоминаете в этом вопросе.
С учетом вышесказанного, Facebook и Twitter очень разные графические структуры, которые влияют на то, как вы их проходите:
Facebook - это принципиально неориентированный граф. Если X дружит с Y, Y ДОЛЖЕН дружить с X. (Или в отношениях с, или связанных с, и т. Д.).
Twitter - это принципиально ориентированный граф. Если вы X следует Y, Y не обязательно следует X.
Эти проблемы будут существенно влиять на алгоритм обхода графа. Если честно, если вы просто хотите посетить все узлы, нужен ли вам график? Почему бы просто не повторить их все? Если у вас есть все узлы в некоторой структуре данных MY_DATA, которая является итеративной, вы можете просто получить выражение генератора, например:
def nodeGenerator(MY_DATA)
for node in MY_DATA:
yield node
Понятно, что вам нужно настроить внутренние компоненты nodeGenerator, чтобы справиться с тем, как вы фактически получаете доступ к узлам. При этом большинство структур графов реализует итератор узла. Тогда вы можете просто создать итератор в любое время, когда захотите, с помощью:
for node in nodeGenerator(MY_DATA):
(Do something here)
Возможно, я просто упускаю суть вопроса здесь, но в настоящее время вы задали вопрос об алгоритмах поиска без проблемы поиска. Из-за характера оптимизации и поиска No Free Lunch ценность любого алгоритма поиска будет полностью зависеть от проблемы поиска, которую вы пытаетесь исследовать.
Это верно даже для одного и того же набора данных. В конце концов, если бы вы искали всех, чье имя начинается с буквы D, отличный способ - просто отсортировать всех по алфавиту и выполнить бинарный поиск. Если вместо этого вы пытаетесь найти степень отделения каждого от Кевина Бэкона, вам понадобится алгоритм, который начинается с мистера Бэкона и рекурсивно перебирает всех, кто его знает, и всех, кого они знают. Это обе вещи, которые вы МОЖЕТЕ сделать в Facebook или Twitter, но без каких-либо подробностей на самом деле нет способа рекомендовать алгоритм. Следовательно, если вы ничего не знаете, просто переберите всех в виде списка. Это так же хорошо, как и все остальное. Если вы хотите оптимизировать, кэшируйте любые вычисления.