Унарная система счисления — это самая простая система счисления для обозначения натуральных чисел : [1] для обозначения числа N , символ, обозначающий 1, повторяется N раз. [2]
В унарной системе число (ноль) представлено пустой строкой , то есть отсутствием символа. Числа 1, 2, 3, 4, 5, 6, ... представлены в унарном виде как 1, 11, 111, 1111, 11111, 111111, ... [3]
Унарная — биективная система счисления. Однако, поскольку значение цифры не зависит от ее позиции, она не является формой позиционной записи , и неясно, будет ли уместно говорить, что ее основание (или «основание») равно 1 , поскольку он ведет себя иначе, чем все другие базы. [ нужна цитата ]
Использование меток при подсчете является применением унарной системы счисления. Например, используя метку | (𝍷), число 3 представляется как ||| . В культурах Восточной Азии цифра 3 представлена как 三, символ, нарисованный тремя штрихами. [4] (Один и два представлены аналогично.) В Китае и Японии иероглиф 正, нарисованный пятью штрихами, иногда используется для обозначения пяти в качестве подсчета. [5] [6]
Унарные числа следует отличать от повторов , которые также записываются как последовательности единиц, но имеют обычную десятичную числовую интерпретацию.
Сложение и вычитание особенно просты в унарной системе, поскольку они требуют не более чем конкатенации строк . [7] Операция подсчета веса Хэмминга или совокупности, которая подсчитывает количество ненулевых битов в последовательности двоичных значений, также может интерпретироваться как преобразование унарных чисел в двоичные . [8] Однако умножение является более громоздким и часто используется в качестве тестового примера для проектирования машин Тьюринга . [9] [10] [11]
По сравнению со стандартными позиционными системами счисления унарная система неудобна и поэтому на практике не используется для больших вычислений. Это встречается в некоторых описаниях проблем решения в теоретической информатике (например, в некоторых P-полных задачах), где оно используется для «искусственного» уменьшения времени выполнения или требований к пространству для задачи. Например, предполагается, что проблема целочисленной факторизации требует больше, чем полиномиальная функция длины входных данных во время выполнения, если входные данные заданы в двоичном формате , но для этого требуется только линейное время выполнения, если входные данные представлены в унарном виде. [12] [13] Однако это потенциально может ввести в заблуждение. Использование унарного ввода для любого заданного числа происходит медленнее, а не быстрее; различие состоит в том, что двоичный ввод (или с большей базой) пропорционален логарифму числа по основанию 2 (или с большей базой), тогда как унарный ввод пропорционален самому числу. Таким образом, хотя требования к времени выполнения и пространству в унарном виде выглядят лучше в зависимости от размера входных данных, они не представляют собой более эффективное решение. [14]
В теории сложности вычислений унарная нумерация используется, чтобы отличить сильно NP-полные задачи от задач, которые являются NP-полными , но не сильно NP-полными. Задача, в которой входные данные включают некоторые числовые параметры, является строго NP-полной, если она остается NP-полной, даже когда размер входных данных искусственно увеличивается за счет представления параметров в унарном виде. Для такой задачи существуют сложные примеры, для которых все значения параметров не более чем полиномиально велики. [15]
Помимо применения в метках, унарная нумерация используется как часть некоторых алгоритмов сжатия данных, таких как кодирование Голомба . [16] Это также формирует основу аксиом Пеано для формализации арифметики в рамках математической логики . [17] Форма унарной записи, называемая кодировкой Чёрча , используется для представления чисел в лямбда-исчислении . [18]
Некоторые спам-фильтры электронной почты помечают сообщения несколькими звездочками в заголовке электронного письма, например X-Spam-Bar или X-SPAM-LEVEL . Чем больше число, тем больше вероятность того, что письмо будет считаться спамом. Использование унарного представления вместо десятичного числа позволяет пользователю искать сообщения с заданным рейтингом или выше. Например, поиск **** дает сообщения с рейтингом не ниже 4. [19]