Вопрос

Рассмотрим функцию подсчета $ \ {x \} ^ * \ \ prightarrow \ mathbb n $ , который подсчитывает количество вхождений символа $ x $ .

Я запутался в отношении (асимптотической) сложности вычисления этой функции, , где выход должен быть представлен в ненарной системе (например, двоично) . Моя интуиция решительно предполагает, что это должно быть линейным, то есть $ O (n) $ где $ n $ Это количество вхождений символа $ x $ на входе.

Насколько мое понимание идет с множественными интерпретациями вычислений - например,

    .
  • Однополосные Turging Machines, для которых моя лучшая идея имеет время выполнения $ \ Omega (n ^ 2 \ log n) $ Я думаю (<класс Span= «Математический контейнер»> $ \ log n $ исходит из предположения, что функция двоичного преемника имеет $ \ Omega (n) $ время выполнения, где $ N $ - это длина двоичного представления натурального числа, а также $ n ^ 2 $ Исходящий из предположения, что Turging Machine должен пройти через все $ x $ , чтобы достичь его текущего подсчета),
  • Multi-Band Turing Machines, для которых я думаю, у меня есть представление о времени выполнения $ \ Omega (n \ log n) $ ,
  • Машины произвольных доступа, которые я вообще не знаю.

Так что мой вопрос следующий.

Что такое вычислительная сложность функции подсчета в различных моделях вычислений? Это линейно в любом из них?

Если вообще актуально, я прошу с точки зрения абстрактной алгебры, где я пытаюсь оценить вычислительную сложность задачи задачи в какой-то конкретной группе.

Это было полезно?

Решение

Turging Machines - хорошая модель с несколькими преимуществами, в основном их простота, но они не первый выбор при анализе алгоритмов. Алгоритмы, как правило, неявно проанализированы на модели машины RAM, а в некоторых случаях, на модель BSS .

Вот некоторые комментарии к вычислительной сложности подсчета в различных моделях:

Машина для ленты: Они считаются только поскольку на них относительно легко доказать более низкие оценки. Они еще менее реалистичны модель вычислений, чем мульти-ленточные машины.

multi-tult turging machine: это стандартный пример в амортизированной сложности, что увеличенный счетчик может быть реализован с использованием $ O (1) $ амортизированные битные операции. Это связано с тем, что половина времени, только один бит меняется, одна четверть времени, только два бита, и так далее, для общего количества измененных битов, которые являются $ 1/2 + 2 / 4 + 3/8 + \ CDOTS= 2 $ . Сложность Turing Machine является линейной в том, что и поэтому подсчет может быть реализован в $ O (N) $ .

RAM MACHINE: машина RAM состоит из конечного момента многих регистров и памяти случайной доступности. Регистры являются $ O (\ log n) $ long, где $ n $ это размер из ввода. Разумные операции на регистры занимают постоянное время. В частности, увеличение счетчика, которое может рассчитывать до $ \ mathit {Poly} (n) $ требует $ o (1 ) $ худший случай время. В частности, ваша функция будет работать в $ O (n) $ .

BSS-машина: нужно быть осторожным при выполнении арифметики на больших количествах. На машине RAM арифметика принимает постоянное время только в том случае, если величина операндов составляет $ \ mathit {Poly} (n) $ . Машина BSS позволяет получить доступ к специальным регистрам, которые хранят значения в каком-то поле, скажем, реальные числа. Вы можете выполнять арифметические и сравнения постоянной времени, но не функционируют, как пол. Вам также не разрешено использовать такие значения для индексации. (Если вы не ограничиваете себя достаточно, вы скоро будете решать сидеть в многочленом времени.) Вы можете подумать о машине BSS в качестве размещения операций с плавающей запятой, что на практике занимает постоянное время, игнорируя конечную точность ,

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top