Нещодавнє запитання обговорювало класичний алгоритм динамічного програмування для TSP, незалежно від Bellman та Held-Karp . Алгоритм повсюдно повідомляється працювати в часу. Однак, як нещодавно зазначив один з моїх учнів, цей час роботи може зажадати необґрунтовано потужної моделі обчислення.
Ось короткий опис алгоритму. Вхід складається з спрямованого графіка з вершинами і функцією невід’ємної довжини . Для будь-яких вершин і і будь-якого підмножини вершин, що виключає і , нехай позначає довжину найкоротшого гамільтонового шляху від до в індукованому підграфові . Алгоритм Беллмана-Холда-Карпа заснований на наступному повторенні (або, як економісти та теоретики управління називають його «рівняння Беллмана»):
Для будь-якої вершини довжина оптимального туру продавця подорожі становить . Оскільки перший параметр є постійним у всіх рекурсивних викликах, є різні підпрограми, і кожна підпроблема залежить щонайбільше інших. Таким чином, алгоритм динамічного програмування працює в час.L ( s , V ∖ { s } , s ) s Θ ( 2 n n ) n O ( 2 n n 2 )
Або це ?!
Стандартна цілочисельна модель ОЗУ дозволяє маніпулювати цілими числами з бітами , але принаймні для арифметичних та логічних операцій великі цілі числа повинні бути розбиті на шматки розміру слова. (Інакше можуть трапитися дивні речі .) Чи це також не стосується доступу до довших адрес пам'яті? Якщо алгоритм використовує суперполіномічний простір, чи розумно вважати, що для доступу до пам'яті потрібен лише постійний час?
Зокрема, для алгоритму Bellman-Held-Karp алгоритм повинен перетворити опис підмножини в опис підмножини для кожного , щоб отримати доступ до таблиці запам'ятовування. Якщо підмножини представлені цілими числами, ці цілі числа потребують біт і тому не можуть бути маніпульовані постійним часом; якщо вони не представлені цілими числами, їх представлення не може використовуватися безпосередньо в якості індексу в таблиці запам'ятовування.X ∖ { v } v n
Отже: Який власне асимптотичний час роботи алгоритму Беллмана-Холд-Карпа?