Рассмотрим У меня есть список смежности миллиардов узлов структурирован с использованием хэш-таблицы, расположенных следующим образом:алгоритм/подход найти узел назначения от исходного узла ровно к ребер неориентированного графа миллиардов узлов без цикла
ключа = узел источника
значение = hash_table {узел1, узел2, node3}
входные значения из текстового файла в виде
от, к
1,2
1,5
1,11
... так далее
например. ключ = '1'
значение = { '2', '5', '11'}
означает 1 соединен с узлами 2,5,11
Я хочу знать алгоритм или подход к найти узел назначения из исходного узла точно к краям в неориентированном графе миллиардов узлов без цикла
например. из узла 1 я хочу найти узел 50 только до глубины 3 или до 3 ребер.
Мое предположение, что алгоритм находит 1 - 2 - 60 - 50, который является самым коротким путем, но как бы перемещение было эффективным с использованием указанной структуры списка смежности? Я не хочу использовать Hadoop/Map Reduce.
Я придумал наивное решение, как показано ниже в Python, но неэффективно. Единственное, что хэш-таблица ищет ключ в O (1), поэтому я мог просто искать соседей и их миллиардеров соседей непосредственно для ключа. Следующий алгоритм занимает много времени.
- начать с исходного узла
- использовать поиск хэш-таблицы для нахождения ключ
- идти 1 уровень глубже с хэш-таблицы соседних узлов и найти их значения для узлов назначения, пока узел не найден
- Остановить, если узел не найдены на глубине К
& NBSP & NBSP |
{2 & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 11}
& nbsp & nbsp | & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp | & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp |
{3,6,7} {nodes} {nodes} .... подключенные узлы
& nbsp | & nbsp | & NBSP | & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp | & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp |
{nodes} {nodes} {nodes} .... миллионов подключенных узлов.
Просьба предложить. Вышеупомянутый алгоритм, подобный BFS, занимает более 3 часов для поиска всех возможных отношений ключевого значения. Может быть, это будет уменьшено с помощью другого метода поиска?
Почему вы говорите, что ваше * наивное решение неэффективно? Если есть миллионы кандидатов, нет другого пути, чем искать среди них. – trincot
Это, кажется, проще всего решить, как вы можете искать элемент. Я действительно говорю, что это наивное решение, поскольку может быть возможность параллельных поисков или многопоточных поисков, которые я не знаю. – bhavin1191