Как сделать поиск в глубину максимально быстро во внешней памяти?
Интересует алгоритм или/и пример кода на C++.
Дополнительная информация из комментариев:
Граф задан списками смежности: один файл с вершинами + указателями на место в другом файле, где находятся смежные этой вершине вершины. Но можно преобразовать это в другой формат, конечно, если будет быстрее.
Размер графа на порядок больше размера оперативной памяти. Вершины для простоты -- натуральные числа. Можно использовать сколько угодно потоков, но не понимаю, как это поможет. Задача не в использовании чего-то готового, а в придумывании алгоритма/кода по алгоритму.
Надо придумать алгоритм, который минимизирует количество чтений из внешней памяти во внутреннюю, потому что это узкое место.
Ответы (1 шт):
Поиск в глубину можно реализовать ака рекурсивно, так и итеративно. В данном случае первый вариант алгоритмам может не подойти из-за глубокого дерева рекурсии, которое получается в ходе выполнения алгоритма и может вызвать ошибку переполнения памяти.
А во втором варианте используется стек. С примером кода на С++ можно познакомиться здесь: Нерекурсивный поиск в глубину