Вычислительная сложность подсчета символов
-
29-09-2020 - |
Вопрос
Рассмотрим функцию подсчета $ \ {x \} ^ * \ \ prightarrow \ mathbb n $ , который подсчитывает количество вхождений символа $ x $ .
Я запутался в отношении (асимптотической) сложности вычисления этой функции, , где выход должен быть представлен в ненарной системе (например, двоично) . Моя интуиция решительно предполагает, что это должно быть линейным, то есть $ O (n) $ где $ n $ Это количество вхождений символа
Насколько мое понимание идет с множественными интерпретациями вычислений - например,
- .
- Однополосные 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) $ амортизированные битные операции. Это связано с тем, что половина времени, только один бит меняется, одна четверть времени, только два бита, и так далее, для общего количества измененных битов, которые являются
BSS-машина: нужно быть осторожным при выполнении арифметики на больших количествах. На машине RAM арифметика принимает постоянное время только в том случае, если величина операндов составляет $ \ mathit {Poly} (n) $ . Машина BSS позволяет получить доступ к специальным регистрам, которые хранят значения в каком-то поле, скажем, реальные числа. Вы можете выполнять арифметические и сравнения постоянной времени, но не функционируют, как пол. Вам также не разрешено использовать такие значения для индексации. (Если вы не ограничиваете себя достаточно, вы скоро будете решать сидеть в многочленом времени.) Вы можете подумать о машине BSS в качестве размещения операций с плавающей запятой, что на практике занимает постоянное время, игнорируя конечную точность ,