Я работал над этой проблемой графика из набора задач UVa. Это проблема одного источника с кратчайшими путями без отрицательных весов ребер. Из того, что я понял, алгоритм с наилучшим временем выполнения big-O для таких задач - это Дейкстра с кучей Фибоначчи в качестве очереди приоритетов, хотя практически говоря, двоичная куча проще в реализации и работает довольно хорошо.
Однако может показаться, что даже двоичная куча занимает довольно много времени, а в соревновании время ограничено. Мне известно, что STL предоставляет некоторые алгоритмы кучи и очереди с приоритетами, но они, похоже, не обеспечивают функцию уменьшения ключа, которая нужна Дейкстре. Или я здесь не прав?
Кажется, что другая возможность - просто не использовать Дейкстры. В этой ветке форума есть люди, утверждающие, что они решили вышеупомянутую проблему с помощью поиска в ширину / Bellman-Ford, который гораздо проще кодировать. (Правка: OTOH, у Дейкстры с несортированным массивом для очереди приоритетов истекло время ожидания.) То, что BFS / Bellman-Ford работал, меня немного удивило, так как я думал, что размер ввода был довольно большим. Я предполагаю, что разные проблемы потребуют решений различной сложности, но мой вопрос заключается в том, как часто мне нужно будет использовать Дейкстру на таких соревнованиях? Стоит ли больше практиковаться в более простых, но медленных алгоритмах?