Представление чисел со знаковой системой счисления и свойством "не смежности"
Non-adjacent form
Представление чисел со знаком (NAF): уникальный способ записи, минимизирующий вес Хэмминга. Каноническая форма для эффективных вычислений и сжатия данных.
Все это допустимые представления числа 7 с использованием знаковых цифр, но только последнее представление, (1 0 0 −1), находится в неприлегающей форме. Неприлегающая форма также известна как каноническое представление числа с подписью.
All are valid signed digit representations of 7, but only the final representation, (1 0 0 −1), is in non adjacent form. The non adjacent form is also known as "canonical signed digit" representation.
Свойства
NAF обеспечивает уникальное представление целого числа, но главное его преимущество заключается в минимизации веса Хэмминга значения. Для обычных двоичных представлений значений в среднем половина всех битов отлична от нуля, тогда как при использовании NAF это число снижается до одной трети всех цифр. Это позволяет эффективно реализовывать сети сложения и вычитания (например, умножение на константу) в аппаратно реализованных цифровых системах обработки сигналов. Очевидно, что не более половины цифр отличны от нуля, что и послужило причиной введения NAF Г. В. Райтвейснером для ускорения ранних алгоритмов умножения, подобно кодированию Бута. Поскольку каждая ненулевая цифра должна соседствовать с двумя нулями, NAF-представление можно реализовать так, чтобы для значения, которое обычно представляется в двоичном виде с помощью m битов, требовалось максимум m + 1 битов. Благодаря своим свойствам NAF полезен в различных алгоритмах, особенно в криптографии, например, для уменьшения количества умножений, необходимых для вычисления степени. В алгоритме возведения в степень через квадраты количество умножений зависит от числа ненулевых битов. Если показатель степени задан в NAF-форме, то значение цифры 1 подразумевает умножение на основание, а значение цифры −1 – на обратную величину основания. Другие способы кодирования целых чисел, избегающие последовательных единиц, включают кодирование Бута и кодирование Фибоначчи.
NAF assures a unique representation of an integer, but the main benefit of it is that the Hamming weight of the value will be minimal. For regular binary representations of values, half of all bits will be non zero, on average, but with NAF this drops to only one third of all digits. This leads to efficient implementations of add/subtract networks (e. g. multiplication by a constant) in hardwired digital signal processing. Obviously, at most half of the digits are non zero, which was the reason it was introduced by G. W. Reitweisner for speeding up early multiplication algorithms, much like Booth encoding. Because every non zero digit has to be adjacent to two 0s, the NAF representation can be implemented such that it only takes a maximum of m + 1 bits for a value that would normally be represented in binary with m bits. The properties of NAF make it useful in various algorithms, especially some in cryptography; e. g., for reducing the number of multiplications needed for performing an exponentiation. In the algorithm, exponentiation by squaring, the number of multiplications depends on the number of non zero bits. If the exponent here is given in NAF form, a digit value 1 implies a multiplication by the base, and a digit value −1 by its reciprocal. Other ways of encoding integers that avoid consecutive 1s include Booth encoding and Fibonacci coding.