УДК 621.397.6
И.А. КУЛИК, С. В. КОСТЕЛЬ
БЫСТРОДЕЙСТВУЮЩИЙ МЕТОД БИНОМИАЛЬНОГО НУМЕРАЦИОННОГО КОДИРОВАНИЯ
Предлагается быстродействующий метод биномиального нумерационного кодирования на основе комбинаторного алгоритма вычисления номера двоичной комбинации, использующего рекуррентные последовательности биномиальных коэффициентов. Приведено теоретическое обоснование правильности разработанного алгоритма биномиальной нумерации, а также его блок-схема. Рассматривается пример вычисления номера двоичной комбинации согласно быстродействующему методу биномиального нумерационного кодирования.
1. Введение
Методы нумерационного кодирования позволяют сжимать данные, вероятностные характеристики которых являются неизвестными. Это положительное качество выгодно отличает нумерационное кодирование от методов статистического сжатия, которым для эффективной работы необходимо, как правило, проведение предварительной оценки информации и составление таблиц условных вероятностей. Кроме того, получаемый при нумерации равномерный код, во-первых, упрощает меры синхронизации работы передающего и приемного устройств, а, во-вторых, является более устойчивым к сериям ошибочных изменений значений разрядов. Приведенные достоинства обеспечивают достаточно широкое распространение методов нумерационного кодирования, предопределяют актуальность и перспективу дальнейшей их разработки [1, 2].
Эффективность метода нумерации обеспечивается:
1) "разумными" ограничениями на элементы нумеруемых последовательностей, поскольку от содержания таких ограничений напрямую зависят существование и распространенность нумеруемых последовательностей;
2) объемом вычислительных затрат при нахождении номера последовательности.
Особое место среди методов нумерации двоичных последовательностей занимает
метод биномиального нумерационного кодирования, основанный на применении числовой функции биномиальной системы счисления [3, 4]. Практическую значимость данного метода обуславливает тот факт, что нумеруемыми последовательностями являются равновесные комбинации, поскольку в качестве ограничения рассматривается равенство количества двоичных единиц заданному фиксированному значению. Равновесный код широко используется в системах передачи информации, управления и шифрования данных. Более того, любую двоичную последовательность можно представить как равновесную при известном значении числа содержащихся в ней единиц. Таким образом, биномиальное нумерационное кодирование позволяет перечислять (сжимать) любые двоичные последовательности и генерировать любой равновесный код, содержащий заданное число единиц.
Следует отметить, что приведенными достоинствами биномиальной нумерации (сжатия) эффективно воспользоваться можно только в том случае, если скорость проведения вычислений номера будет достаточно высокой, а объем вычислительных затрат при этом небольшим и приемлемым с точки зрения требований аппаратно-программной реализации. Основной вклад в сложность вычислений номера вносит поиск значений весовых коэффициентов биномиальной числовой функции. В качестве весовых коэффициентов используются числа сочетаний, в параметрах которых присутствуют значения п - длины нумеруемой последовательности и k - количества содержащихся в ней двоичных единиц. Нахождение точных значений чисел сочетаний, как это требует числовая функция биномиальной системы счисления, при достаточно больших п и k сталкивается с определенными трудностями, основными из которых являются значительное время вычислений и переполнение разрядной сетки в связи с огромными значениями факториалов чисел. При этом следует отметить, что наиболее полно преимущества биномиального нумерационного кодирования
раскрываются при нумерации длинных последовательностей. Таким образом, для дальнейшего развития метода биномиального нумерационного кодирования важными являются задачи:
- увеличение скорости преобразования двоичной последовательности в номер;
- упрощение вычисления номера и, как следствие, снижение объема аппаратно-программных затрат при практической реализации.
В качестве одного из решений указанных выше задач предлагается использование рекуррентного алгоритма вычисления весовых коэффициентов биномиальной числовой функции. Предлагаемый алгоритм не требует применения сложных цифровых устройств при технической реализации и является весьма эффективным с точки зрения скорости его работы.
2. Метод биномиального нумерационного кодирования
В соответствии с методом биномиального нумерационного кодирования нумеруемыми (сжимаемыми) последовательностями являются последовательности У = (уп-1...у; ...у^о) ,
п-1
сумма двоичных разрядов у; которых удовлетворяет ограничению 2 у1 = к .
1=0
Такие двоичные последовательности представляют равновесный код с параметрами п - длина кодовой комбинации и к - количество содержащихся в ней единиц. При этом следует отметить, что любая двоичная последовательность может быть рассмотрена как равновесная при известном значении количества к составляющих ее единиц.
Переход от исходной последовательности У = (уп-1...у; ...у1у0) к соответствующему номеру р осуществляется в два этапа, на первом из которых производится преобразование
У = (у п-1...у1...у1уо) к биномиальному числу X -(хг-1...х;...х1х0), а на вт°р°м - преобразование биномиального числа X -(хг-1...х;...х1х0) в номер Б. Первое преобразование выполняется в соответствии с системами ограничений для биномиальных чисел X [3, 4]:
к < г < п -1 Я - к
хо -1
и
п - к - г - я
0 < к-1, (1)
хо - 0
где г - длина биномиального числа X, а я - количество содержащихся в X двоичных единиц. Анализ ограничений (1) показывает, что первое преобразование состоит в отбрасывании в двоичной последовательности У единиц справа до первого появления нуля или отбрасывании нулей справа до первого появления единицы.
Второе преобразование, заключающееся в получении номера р из биномиального числа
X -(хг_ 4...х;...х1х0 ) осуществляется на основании числовой функции двоичной биномиальной системы счисления [3, 4]:
Р - хг-1ск-Яг-1 +...+х1сп-Я+1 +...+хоСк-Я0 - Е1х1ек-гч+1 (2)
1-0
где - сумма единичных значений разрядов х1 от (г -1) -го разряда до (1 +1) -го включительно:
г
- 2 хг, (3)
г-1+1
здесь яг-1 - хг - 0 .
Весовой коэффициент 1 -го разряда в числовой функции (2) представляет собой число сочетаний С-Я+р которое зависит как от позиции 1 - 0,1,...,г -1 рассматриваемого разряда, так и от суммы Я1 предшествующих этому разряду двоичных значений х1.
Общий алгоритм биномиального нумерационного кодирования двоичной последовательности длины п, содержащей количество к единиц, представлен на рис. 1.
Рис. 1. Общий алгоритм биномиального нумерационного кодирования
Разработаны различные способы аппаратно-программной реализации биномиального нумерационного кодирования двоичных последовательностей, отличающиеся друг от друга такими характеристиками, как быстродействие и объем аппаратно-программных затрат [3, 4].
Наиболее высоким быстродействием обладает табличный способ нахождения номеров, где в качестве адреса (индекса) в таблице служит двоичная последовательность, которой соответствует ячейка с требуемым номером. Номера заранее заносятся в таблицу согласно биномиальной числовой функции. Данный способ реализуется с помощью устройств памяти. На вход устройства памяти подаются равновесные комбинации, а на выходе устанавливаются соответствующие номера. Однако с ростом длины двоичных последовательностей объем памяти, а следовательно, и аппаратно-программные затраты при реализации табличного способа резко возрастают.
Другим способом реализации рассматриваемого метода кодирования является способ последовательного перебора двоичных равновесных последовательностей, который обладает наименьшим быстродействием. Согласно этому способу последовательно перебираются равновесные комбинации, организованные в лексикографическом порядке, и одновременно с ними перебираются двоичные номера. Практическая реализация данного способа основывается на двух счетчиках, один из которых является биномиальным, а другой -обычным двоичным счетчиком. Синтез структуры биномиального счетчика осуществляется в соответствии с биномиальной числовой функцией. При относительно больших значениях длины равновесного кода количество всех возможных кодовых комбинаций становится весьма значительным, в связи с чем резко снижается скорость биномиальной нумерации кодовых последовательностей.
С точки зрения высокого быстродействия и малого объема аппаратно-программных затрат оптимальным способом реализации метода биномиального нумерационного кодирования можно считать способ, использующий комбинаторные рекуррентные соотношения для весовых коэффициентов числовой функции (2), в качестве которых служат числа сочетаний, поскольку именно нахождение чисел сочетаний требует значительных времени и объема аппаратно-программных затрат.
3. Вычисление биномиальных коэффициентов
Основными причинами, усложняющими процесс нахождения биномиальных коэффициентов ск при больших значениях параметров п и к , являются:
1) огромные значения факториалов п! и к!, используемых при вычислении сП ;
2) большое количество выполняемых операций умножения и деления.
Избежать огромных значений факториалов, исключить операции деления и существенно снизить количество операций умножения позволяет метод вычисления биномиальных коэффициентов на основе канонического разложения чисел [5]. Метод основывается на разложении чисел сочетаний, а также факториалов их параметров на простые числа, возведенные в определенные степени. При этом операции умножения и деления сводятся к арифметическим операциям над степенями простых чисел. Недостатком данного метода является необходимость хранить или вычислять все простые числа до значения нижнего параметра числа сочетаний.
При программной реализации вычисления спк часто используют алгоритм на основе рекуррентного соотношения
Ск - сп-к - п - к + 1 ск-1 , ,
Сп - Сп - , ' Сп . (4)
к
Данный метод является достаточно простым, однако при его аппаратной реализации возникают трудности, связанные с необходимостью выполнять операции умножения и деления над большими числами.
В работе [6] предлагается метод вычисления биномиальных коэффициентов при помощи последовательностей чисел сочетаний, в котором не применяются операции умножения и деления. В основу данного метода положены формулы рекуррентного разложения биномиальных коэффициентов следующего вида:
Сп - Сп-1 + Сп-2 + ... + Сп-к-Р (5)
. Ск - Сп-1+Сп-2+...+Ск-1. (6)
При вычислении С-+j создается 1 -я последовательность биномиальных коэффициентов, содержащая j +1 элементов, где 1 - 0,1,...,п - к, а j - 0,1,...,к . Число сочетаний С^ при этом представляется как j -й элемент, расположенный в 1 -й последовательности. В случае необходимости определить коэффициент С!^ строится новая (1 +1) -я последовательность на основе 1 -й предшествующей. В общем виде 1 -я последовательность будет выглядеть как
С0 ... ^ ... Ск+к. (7)
При 1 - п - к и j - к число сочетаний С-+ - Ск-к+к - С, т.е. к -й элемент (п - к) -й последовательности представляет собой искомый биномиальный коэффициент С .
Начальная последовательность 1 - 0 состоит из (к +1) единиц согласно С0 - С1 -... - Ск -1. Элементы следующей последовательности 1 -1 в соответствии с формулой (5) получаются в процессе суммирования единиц нулевой последовательности, начиная с самой левой и до номера искомого элемента включительно, который представляет собой значение верхнего параметра искомого числа сочетаний. Аналогично может быть получена вторая, третья и т. д. последовательности.
Для упрощения вычисления элементов новой последовательности можно воспользоваться значениями уже вычисленных элементов формируемой последовательности.
Теорема 1. В последовательностях биномиальных коэффициентов, построенных согласно рекуррентному разложению (5), сумма значений j -го элемента (1 -1) -й последовательности и (j -1) -го элемента 1 -й последовательности представляет собой значение j -го элемента 1 -й последовательности:
СН - С(1 -1)+j + ^+0-1). (8)
Доказательство. В выражении (8) перегруппируем переменные 1 и j в нижних параметрах чисел сочетаний: сj+j - с(+j)-l + С(^)_1. Введя переменную ъ вместо суммы (1 + j), приходим к известному правилу Паскаля: СЪ - СЪ- + С- . Теорема 1 доказана.
В результате для вычисления j -го элемента X -й последовательности биномиальных коэффициентов необходимо просуммировать j -й элемент предшествующей (X -1) -й последовательности с (j -1) -м элементом искомой X -й последовательности.
Пример. Вычислить значение биномиального коэффициента с4о с помощью последовательности чисел сочетаний.
Решение. Поскольку номер искомого элемента в последовательности чисел сочетаний j = 4 , а сумма номеров строки и элемента X + j = 10, то в соответствии с методом вычисления номер последовательности X = 6 . Таким образом, j = 0,4, X = 0,6 и, следовательно, необходимо построить семь последовательностей, состоящих из пяти биномиальных коэффициентов.
Последовательности биномиальных коэффициентов, получившиеся в результате применения метода для заданных параметров п = 10 и к = 4, сведены в табл. 1.
Таблица 1. Пример вычисления С40
0 1 2 3 4
X
0 1 1 1 1 1
1 1 2 3 4 5
2 1 3 6 10 15
3 1 4 10 20 35
4 1 5 15 35 70
5 1 6 21 56 126
6 1 7 28 84 210
Число, расположенное на пересечении четвертого столбца и шестой строки, соответствует значению биномиального коэффициента с параметрами п = 10 и к = 4, т.е. с40 = 210.
Рассмотренный метод вычисления биномиальных коэффициентов имеет следующие достоинства:
1) достаточно простая аппаратная реализация метода, поскольку содержит только операции сложения;
2) удобство применения для нумерационной функции (2), поскольку при вычислении биномиального коэффициента производится расчет биномиальных коэффициентов с меньшими значениями параметров, что соответствует порядку определения слагаемых суммы (2). Данная особенность позволяет ускорить процесс определения номера исходной последовательности.
4. Комбинаторный алгоритм вычисления номера двоичной комбинации
На основе общего алгоритма биномиального нумерационного кодирования, представленного на рис. 1, строится комбинаторный алгоритм вычисления номера двоичной комбинации.
Как следует из системы ограничений (1), преобразование равновесной комбинации у в г-разрядное биномиальное число X (преобразование 1) может выполняться двумя способами: 1) отбрасыванием подряд расположенных (п - г) нулей, начиная с у0 = 0, до появления первой единицы, которая становится самым младшим единичным разрядом х0 = 1 числа X ; 2) отбрасыванием подряд расположенных (п - г) единиц, начиная с У0 = 1, до появления первого нуля, который становится самым младшим нулевым разрядом х0 = 0 числа X .
Переход от биномиального числа X к номеру Б равновесной комбинации (преобразование 2) осуществляется на основании числовой функции биномиальной системы счисления (2). Значения биномиальных коэффициентов, входящих в состав числовой функции (2), вычисляются при помощи последовательности чисел сочетаний (7).
Теорема 2. Номер разряда 1 двоичного биномиального числа X - (хг-1...х1...х1х0), 1 - 0г -1, связан с номером разряда 8 > п - г двоичной равновесной комбинации
У -(Уп- -1-.ys-.y1y0), имеющей число к единиц, следующим соотношением
1 - 8 - п + г . (9)
Доказательство. Двоичная равновесная комбинация У - (уп-1..у8.. у1у0) характеризуется количеством п составляющих ее разрядов и числом к содержащихся в ней единиц. Получение г -разрядного биномиального числа X - (хг-1 ...х1...х1х0 ), которое соответствует у, осуществляется на основе систем (1) ограничений. Как следует из (1), преобразование выполняется путем отбрасывания подряд стоящих единиц или нулей. Количество исключаемых двоичных разрядов составляет (п - г). Тогда номер 1 разряда биномиального числа X отличается от номера 8 разряда равновесной комбинации у на величину (п - г), т.е. 1 - 8 - п + г . Поскольку минимальное значение 1т1п - 0, то отсюда 8т1п - 1т1п + п - г - п - г и, следовательно, должно быть 8 > п - г . Теорема 2 доказана.
Теорема 3. Если в биномиальном числе X -(х^^.х^.х^) последняя цифра х0 - 0, то сумма единиц в соответствующей X равновесной комбинации У -(Уп- -1- .У8 -Уп-г11-1) с нулевого по (п - г - 1) -й разряд
п - г-1
2 У8 - п - г.
8-0
Доказательство. Количество единиц в равновесной комбинации У
п—1 п-г-1 п—1
к - 2 У8 - 2 У8 + 2 У8.
8-0 8-0 8-п-г
Так как из теоремы 2 следует 1 - 8 - п + г, то, перейдя к значениям х1 соответствующего биномиального числа X, при 8 > п - г получим
п-г-1 г—1 п—г—1
к- 2 У8 + 2х1 - 2 У8 + я.
8-0 1-0 8-0
Из системы (1) ограничений для числа X при х0 - 0 находим я - г - (п - к). Подставив в предыдущее выражение значение я - г - (п - к), имеем
п - г—1
2 У8 - к - я - к - г + (п - к)- п - г.
8-0
Теорема 3 доказана.
Следствие 1. Количество нулей в соответствующей X -(хг-1...х1...х10) равновесной комбинации У -(уп—1...У8...Уп—г 11...1) с нулевого по (п - г -1) -й разряд равно нулю.
Теорема 4. Если в биномиальном числе X -(хг-1.„х1„.х11) последняя цифра х0 -1, то сумма единиц в соответствующей X равновесной комбинации
У -(Уп- -1-.У8 -.Уп-г00 -0) с нулевого по (п - г - 1) -й разряд
п—г—1
2 У8 -0.
8-0
Доказательство. В отличие от доказательства предыдущей теоремы из системы (1) ограничений при х0 -1 имеем я - к . Следовательно, из последнего выражения доказа-
п - г—1
тельства теоремы 3: 2 У8 - к - я - к - к - 0. Теорема 4 доказана.
8-0
Следствие 2. Количество нулей в соответствующей X = (хг-1...х;...х10) равновесной комбинации У = (уп-1...у8...уп-г11...1) с нулевого по (п - г -1) -й разряд равно (п - г).
Введем следующие обозначения: п8 для переменной, которая представляет собой число разрядов в равновесной комбинации У = (уп-1..у8..у1у0 ) от нулевого до разряда 8 включительно:
п8 = 8 +1; (10)
к8 для переменной, которая представляет собой сумму двоичных разрядов равновесной комбинации У = (уп-1...у8...у1у0 ), начиная с нулевого и по разряд 8 включительно, т.е., другими словами, количество двоичных единиц на кодовом отрезке длины п8:
в
к8 = Е уг; (11)
г=0
т8 для переменной, которая представляет собой количество двоичных нулей равновесной комбинации У = (уп-1..у8 .. у1у0 ) , начиная с нулевого и по разряд в включительно:
т8 =п8 - к8. (12)
Теорема 5 Сумма единичных значений к8 равновесной комбинации
У = (уп - -1...у8...у1у0) связана с суммой единичных значений -п+г биномиального числа X = (хг-1...х;...х1х0 ) при п - г < в < п -1 следующим соотношением:
к8 = к - 48-п +г. (13)
Доказательство. Количество к двоичных единиц в равновесной комбинации у
п-1 в п-1
к = Е уг = Е уг + Е уг .
г=0 г=0 г=в+1
Согласно (11) первое слагаемое выражение есть не что иное как значение к8. Что касается второго слагаемого, то здесь необходимо учесть, что, во-первых, в соответствии с теоремой 2 для номера в разряда равновесной комбинации у выполняется в = 1 + п - г и, следовательно, из условия теоремы п - г < в < п -1 следует 0 < 1 < г -1; во-вторых, при п - г < в < п -1 выполняются равенства уп-г+1 = х1, уп-г+2 = х2, ..., уп-1 = хг-1. Принимая во внимание сказанное выше и хг = 0 , можно заключить, что второе слагаемое представляется как
п—1 г—1 г
Е уг = Е хг = Е хг = 4§-п+г.
г=в+1 г=§-п+г+1 г=§-п+г+1
Таким образом, к = кв + ч8-п+г или кв = к - -п+г. Теорема 5 доказана.
Теорема 6. Число сочетаний С^-^ нумерационной функции (2) биномиальной системы счисления представляет собой кв -й элемент (тв -1) -й последовательности биномиальных коэффициентов (7):
j = к8, 1 = т8 -1, (14)
где п - г < в < п -1.
Доказательство. Используя выражения (9) и (13) из теорем 2 и 5, значение 1-го биномиального коэффициента С^-^ нумерационной функции (2) можно записать как
Ск-41 = Ск-Чв-п+г = С1^ п-г+1 п-г+в-п+г ^ •
Чтобы определить значение С^ при помощи последовательностей биномиальных коэффициентов (7), приведем его к виду С-+j, воспользовавшись соотношениями (10) и (12):
Скв = Скв = Скв ^ -1 -1+кв .
Как следует из полученного равенства, j - к8, 1 - т8 -1. Теорема 6 доказана.
Из соотношения (14) видно, что указателем на номер последовательности биномиальных коэффициентов является количество нулей в равновесной комбинации. При этом важно заметить, что новая последовательность рассчитывается на основе предыдущей и, следовательно, расчет чисел сочетаний должен начинаться с нулевой последовательности. Как видно из следствия 2, при переходе от равновесной комбинации У к биномиальному числу X, для случая, когда разряд х0 -1, отсчет количества нулей начинается со значения (п - г). Следовательно, возникает необходимость в вычислении неиспользуемых (п - г) последовательностей. Это накладывает дополнительные временные затраты и уменьшает скорость преобразования равновесной комбинации У в ее порядковый номер X. Для устранения этого недостатка воспользуемся свойством симметрии чисел сочетаний
Ск8 +т8 -1 - Ск8 +т8 -1 . При этом теперь
j - т8 -1, 1 - к,. (15)
Таким образом, алгоритм разбивается на две ветви. Первая ветвь соответствует случаю, когда последняя цифра биномиального числа X равна х0 -1 ( у0 - 0). Вычисление значения нумерационной функции (2) осуществляется при помощи суммирования значений (т8 -1) ячеек к8 последовательностей биномиальных коэффициентов в соответствии с равенствами (15). Вторая ветвь алгоритма соответствует случаю, когда последняя цифра биномиального числа X равна х0 -
0 (У 0 - 1) . Для этого случая вычисление значения нумерационной функции (2) осуществляется при помощи суммирования значений к8 ячеек (т8 -1) последовательностей биномиальных коэффициентов в соответствии с равенствами (14).
Количество чисел сочетаний, располагающихся в последовательности биномиальных коэффициентов, для первого случая составляет (тахт8 -1) +1 - (т -1) +1 - т , а для второго - тахк8 +1 - к +1.
Блок-схема разработанного алгоритма представлена на рис. 2.
Для упрощения записи блок-схемы алгоритма обозначим через Mj переменную со
значением биномиального коэффициента, расположенного в ]-м элементе текущей 1 -й последовательности чисел сочетаний.
Рассмотрим работу алгоритма более подробно. Имеется некоторая равновесная комбинация У - (уп-1...у8 .. у1у0 ) длиной п бит, содержащая к единиц (вес равновесной комбинации) и т нулей, номер которой необходимо вычислить.
Изначально производится обнуление счетчика единиц к8 , счетчика нулей т8 , счетчика позиции 8 и ячейки памяти К, в которой будет храниться номер Б равновесной комбинации. Также на данном этапе формируется нулевая последовательность чисел сочетаний, содержащая единицы во всех элементах Mj. Счетчик позиции 8 определяет номер разряда равновесной комбинации У , с которым работает алгоритм.
На первом этапе преобразования необходимо перейти от равновесной комбинации У к биномиальному числу X . Из равновесной комбинации считывается 8 -й бит. Если соседние биты у8 и у8-1 равны между собой, то счетчик позиции 8 увеличивает свое значение на единицу и выполняется новый цикл проверки. В противном случае этап перехода от равновесной комбинации У к биномиальному числу X считается завершенным. Счетчик позиции 8 будет указывать на младший разряд х0 биномиального числа. Также на данном этапе производится подсчет количества к8 единиц и количества т8 нулей для текущего значения 8 .
На втором этапе производится вычисление номера Б исходной равновесной комбинации У. Как указывалось выше, в зависимости от значения у0 алгоритм разделяется на две ветви. Первая ветвь соответствует случаю, когда У0 - 0 . Если значение у8 -го бита равно
нулю, то инкрементируется счетчик нулей т8 . В противном случае инкрементируется счетчик единиц к8 и вычисляется новая к8 -я последовательность биномиальных коэффициентов.
Рис. 2. Блок-схема комбинаторного алгоритма вычисления номера равновесной комбинации Вычисление новой последовательности производится по циклу в соответствии с выражением (8). После перерасчета последовательности к номеру равновесной комбинации,
который хранится в ячейке памяти N прибавляется (Мш8-1) -й элемент текущей к8-й последовательности биномиальных коэффициентов. Вторая ветвь, которая соответствует случаю у0 = 1, выполняется аналогичным образом, с той лишь разницей, что указателем на номер последовательности является счетчик нулей ш8, а указателем на элемент последовательности является счетчик единиц к8. После выполнения указанных операций счетчик позиции 8 увеличивается на единицу. Если содержимое счетчика позиции не достигло
величины п , то производится выборка следующего у8 -го разряда из равновесной комбинации и цикл вычисления номера повторяется. В противном случае определение номера считается завершенным, а искомое значение хранится в ячейке памяти N .
5. Пример работы алгоритма вычисления номера двоичной комбинации
Согласно методу биномиального нумерационного кодирования вычислить номер для двоичной последовательности 11010100. Параметры заданной комбинации следующие: длина п = 8, количество единиц к = 4, количество нулей ш = 4 .
Сначала производится обнуление счетчиков 8 = 0, к8 = 0, ш8 = 0 и ячейки памяти N = 0, хранящей искомый номер равновесной комбинации. Формируется нулевая последовательность биномиальных коэффициентов, состоящая из четырех элементов: 1111.
Считывается нулевой разряд равновесной кодовой комбинации. Поскольку у0 = 0, инк-рементируется счетчик нулей ш8 = 1 и осуществляется переход к следующему разряду с индексом 8 = 1. Поскольку разряды у0 и у1 равновесной комбинации равны между собой, повторяются те же действия, что и для нулевого разряда. Значения разрядов у1 и у2 уже не равны. Следовательно, двоичное биномиальное число, соответствующее исходной последовательности, получено и преобразование 1 завершено. При этом счетчики позиции,
единиц и нулей содержат следующие значения: 8 = 2, к8 = 0, ш8 = 2, а биномиальное число имеет вид 110101
Поскольку нулевой разряд равновесной комбинации у0 = 0, выполняется первая ветвь алгоритма. Так как у2 = 1, то содержимое счетчика единиц увеличивается на единицу и становится к8 = 1. Счетчик нулей при этом сохраняет свое состояние ш8 = 2. Далее, производится расчет первой последовательности биномиальных коэффициентов, которая теперь будет иметь следующий вид: 1 2 3 4 . К содержимому ячейки памяти N = 0, хранящей номер равновесной комбинации, прибавляется значение 1У1шч -1 = М1 первого элемента последовательности биномиальных коэффициентов, т.е. N = N + М1 = 2.
Далее рассматриваются остальные разряды биномиального числа и выполняются аналогичные действия до тех пор, пока счетчик позиции 8 не достигнет значения п = 8.
Последовательности значений переменных для каждого цикла алгоритма представлены в табл. 2.
Таблица 2. Пример вычисления номера равновесной комбинации 11010100
8 у8 к8 ш8 к8-я последовательность Бином коэф. N
0 0 0 1 1 1 1 1 — 0
1 0 0 2 1 1 1 1 — 0
2 1 1 2 1 2 3 4 2 2
3 0 1 3 1 2 3 4 — 2
4 1 2 3 1 3 6 10 6 8
5 0 2 4 1 3 6 10 — 8
6 1 3 4 1 4 10 20 20 28
7 1 4 4 1 5 15 35 35 63
В результате работы алгоритма был получен номер равновесной комбинации N[iioioioo] = 63<10> = 00111111<2> . 6. Выводы
Разработанный комбинаторный алгоритм биномиальной нумерации двоичных комбинаций на основе рекуррентного вычисления последовательностей биномиальных коэффициентов позволяет достигнуть:
- достаточно существенного увеличения быстродействия метода биномиального нумерационного кодирования;
- снижения объема аппаратно-программных затрат при практической реализации биномиальной нумерации двоичных комбинаций.
Достигнутые результаты стали возможными благодаря исключению времязатратных
операций умножения и деления над параметрами k - , n - r + i чисел сочетаний C,
представляющих весовые коэффициенты числовой функции (2), и замене их простыми операциями сложения. Кроме того, снимается проблема переполнения разрядной сетки во время вычисления значений биномиальных коэффициентов, так как исчезает необходимость определения факториалов верхнего и нижнего параметров C^-q+i. Полученный комбинаторный алгоритм биномиального нумерационного кодирования приобретает особую практическую значимость при больших значениях пи k сжимаемых двоичных последовательностей.
Список литературы: 1. Амелькин В.А. Методы нумерационного кодирования. Новосибирск: Наука, 1986. 155 с. 2. Cover, Thomas M. Enumerative Source Encoding / IEEE Transactions on Information Theory, vol. IT-19, No. 1. Jan. 1973. Р. 73-77. 3. Борисенко А.А. Биномиальный счет. Теория и практика: Монография. Сумы: ИТД "Университетская книга", 2004. 170 с. 4. КуликИ.А., Костель С.В., Скордина Е.М. Использование биномиальных чисел для сжатия бинарных изображений / Вюник СумДУ. 2009. № 2. с. 29-36. 5. Кулик И.А. , Скордина Е.М. Метод вычисления биномиальных коэффициентов на основе канонического разложения чисел / Вюник СумДУ. 2008. № 1. С. 158-165. 6. БорисенкоА.А. Введение в теорию биномиального счета: Монография. Сумы: ИТД "Университетская книга", 2004. 89 с.
Поступила в редколлегию 12.11.2009
Кулик Игорь Анатольевич, канд. техн. наук, доцент кафедры электроники и компьютерной техники Сумского государственного университета. Научные интересы: системы сжатия и передачи данных, комбинаторное кодирование. Адрес: Украина, 40007, Сумы, ул. Римско-го-Корсакова, 2, тел. (0542) 33-55-39. e-mail: kulik@pe.sumdu.edu.ua.
Костель Сергей Викторович, аспирант кафедры электроники и компьютерной техники Сумского государственного университета. Научные интересы: нумерационное кодирование и сжатие информации, программирование. Адрес: Украина, 40007, Сумы, ул. Римско-го-Корсакова, 2, тел. (0542) 33-55-39. e-mail: eikt@ukr.net.