Как сделать поиск в глубину максимально быстро во внешней памяти?

Интересует алгоритм или/и пример кода на C++.

Дополнительная информация из комментариев:

Граф задан списками смежности: один файл с вершинами + указателями на место в другом файле, где находятся смежные этой вершине вершины. Но можно преобразовать это в другой формат, конечно, если будет быстрее.

Размер графа на порядок больше размера оперативной памяти. Вершины для простоты -- натуральные числа. Можно использовать сколько угодно потоков, но не понимаю, как это поможет. Задача не в использовании чего-то готового, а в придумывании алгоритма/кода по алгоритму.

Надо придумать алгоритм, который минимизирует количество чтений из внешней памяти во внутреннюю, потому что это узкое место.


Ответы (1 шт):

Автор решения: roddar92

Поиск в глубину можно реализовать ака рекурсивно, так и итеративно. В данном случае первый вариант алгоритмам может не подойти из-за глубокого дерева рекурсии, которое получается в ходе выполнения алгоритма и может вызвать ошибку переполнения памяти.

А во втором варианте используется стек. С примером кода на С++ можно познакомиться здесь: Нерекурсивный поиск в глубину

→ Ссылка