Некоторые сложные алгоритмы ( объединение-поиск ) имеют почти постоянную обратную функцию Аккермана, которая появляется при асимптотической сложности времени, и являются оптимальными по времени в худшем случае, если почти постоянный обратный член Аккермана игнорируется.
Существуют ли примеры известных алгоритмов со временем выполнения, в которых задействованы функции, которые растут в основном медленнее, чем обратный Аккерман (например, инверсии функций, которые не эквивалентны Аккерманну при полиномиальных или экспоненциальных преобразованиях и т. Д.), Которые дают наиболее известное время наихудшего случая сложность для решения основной проблемы?
Ответы:
Сет Петти придумал алгоритм для вычисления чувствительности минимального остовного дерева во времени , улучшив алгоритм Тарьяна, который вычисляет то же самое во времени O ( m α ( m , n) ) ) . (Сравните это с алгоритмом Шазеля O ( m α ( m , n ) ) для вычисления минимального остовного дереваO ( м журналα ( м , н ) ) O ( m α ( m , n ) ) O ( m α ( m , n ) ) сама.) Проблема чувствительности требует вычислить для данного графика и заданного минимального остовного дерева то, насколько может измениться каждый вес ребра без изменения минимального остовного дерева.
(Спасибо Цви Копеловиц за эту ссылку.)
источник
источник
Когда Алан Тьюринг обнаружил компьютер, предлагалось несколько моделей для этого компьютера. Тьюринг доказал, что некоторые (3) из этих моделей могут моделировать друг друга и вычислять функцию Аккермана, тогда как другие модели могут моделировать друг друга, но не функцию Аккермана (поэтому они не могли моделировать 3). Поэтому эти 3 модели (машина Тьюринга, фон Нейман и одна, которую я не знаю) были выбраны в качестве архитектуры для компьютера. Это не означает, что функция Аккермана - это предел компьютера, но я полагаю, что это сложная наука. Мне неизвестны какие-либо вычислимые функции, которые растут быстрее, чем функция Аккермана.
Я не думаю, что есть практическая проблема, которая соответствует вашему вопросу, но, возможно, мы сможем ее решить. Мы должны наложить ограничения на вход, хотя. Поскольку мы не можем использовать O (n), мы не можем проверить весь ввод. На самом деле, мы даже не можем проверить длину ввода, так как это будет O (log n). Итак, нам нужно в качестве первого параметра представить длину остальной части входных данных, например, c, так что Ackermann (c) - это длина входных данных. Поскольку это также не подходит, мы требуем в качестве первого значения на нашем входе параметр c, так что bb (c) примерно равна длине входа, где bb - функция занятого бобра. Эта функция не вычислима, но bb (c), безусловно, существует. Затем алгоритм выглядит так:
Цель алгоритма состоит в том, чтобы проверить, что если c является обратным к bb, то если входная длина больше, чем bb (c).
Если есть вычислимая функция, которая растет быстрее, чем функция Аккермана, я думаю, что мы можем использовать ее обратно, чтобы создать алгоритм, который отвечает на ваш вопрос на любом входе.
источник