В недавнем вопросе обсуждался теперь классический алгоритм динамического программирования для TSP, независимо от Беллмана и Хельда-Карпа . Алгоритм повсеместно сообщается работать в времени. Однако, как недавно заметил один из моих учеников, это время выполнения может потребовать неоправданно мощной модели вычислений.
Вот краткое описание алгоритма. Вход состоит из ориентированного графа с вершинами и неотрицательной функцией длины . Для любых вершин и и любого подмножества вершин, исключающих и , пусть обозначает длину кратчайшего гамильтонова пути от до в индуцированном подграфе . Алгоритм Беллмана-Хелда-Карпа основан на следующем повторении (или, как любят его называть экономисты и теоретики управления, «уравнение Беллмана»):
Для любой вершины длина оптимального тура коммивояжера составляет L ( s , V ∖ { s } , s ) . Поскольку первый параметр s является постоянным во всех рекурсивных вызовах, существует Θ ( 2 n n ) различных подзадач, и каждая подзадача зависит не более чем от n других. Таким образом, алгоритм динамического программирования выполняется за O ( 2 n n 2 ) времени.
Или это ?!
Стандартная целочисленная модель ОЗУ допускает манипулирование целыми числами с битами в постоянное время, но по крайней мере для арифметических и логических операций большие целые числа должны быть разбиты на куски размером в слово. (В противном случае могут происходить странные вещи .) Разве это также не относится к доступу к более длинным адресам памяти? Если алгоритм использует суперполиномиальное пространство, разумно ли предполагать, что доступ к памяти требует только постоянного времени?
В частности, для алгоритма Беллмана-Хелда-Карпа алгоритм должен преобразовать описание подмножества в описание подмножества X ∖ { v } для каждого v , чтобы получить доступ к таблице памятки. Если подмножества представлены целыми числами, эти целые числа требуют n битов и поэтому не могут управляться в постоянное время; если они не представлены целыми числами, их представление нельзя использовать непосредственно в качестве индекса в таблице памятки.
Итак: Каково фактическое время асимптотики алгоритма Беллмана-Хелда-Карпа?