Научная статья на тему 'Применение факториальной системы для решения комбинаторных задач'

Применение факториальной системы для решения комбинаторных задач Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
4035
169
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПЕРЕСТАНОВКИ / ФАКТОРИАЛЬНАЯ СИСТЕМА СЧИСЛЕНИЯ / FACTORIAL NUMBER SYSTEM / ДВОИЧНОЕ КОДИРОВАНИЕ ФАКТОРИАЛЬНЫХ ЧИСЕЛ / BINARY CODING OF FACTORIAL NUMBERS / ПРЕОБРАЗОВАНИЕ ДВОИЧНОГО ЧИСЛА В ФАКТОРИАЛЬНОЕ И ОБРАТНО / TRANSFORMATION OF BINARY NUMBER INTO A FACTORIAL ONE AND BACK / РАЗМЕЩЕНИЯ / СОЧЕТАНИЯ ЭЛЕМЕНТОВ / COMBINATIONS OF ELEMENTS / PERMUTATIONS / DISTRIBUTIONS

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Поляков В.И., Скорубский В.И., Экало Ю.В.

Рассматриваются свойства факториальной системы счисления и некоторые новые сферы ее применения для решения ряда комбинаторных задач в программировании и проектировании компьютерных систем. Факториальные числа могут быть однозначно пронумерованы десятичными или двоичными числами и интерпретированы перестановками элементов любого типа. Декодирование двоично-кодируемой записи перестановки в факториальной системе счисления позволяет каждой перестановке однозначно поставить в соответствие размещение дискретных объектов (элементов, ссылок и др.) в некотором фиксированном дискретном пространстве. Перестановки и размещения могут быть применены в задачах автоматизации конструкторского проектирования, коммутации каналов вычислительных систем и в защите данных.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Применение факториальной системы для решения комбинаторных задач»

УДК 681.3.053, 681.3.06 DOI: 10.17586/0021-3454-2015-58-6-436-442

ПРИМЕНЕНИЕ ФАКТОРИАЛЬНОЙ СИСТЕМЫ ДЛЯ РЕШЕНИЯ КОМБИНАТОРНЫХ ЗАДАЧ

В. И. Поляков1, В. И. Скорубский1, Ю. В. Экало

2

1Университет ИТМО, 197101, Санкт-Петербург, Россия E-mail: v.i.polyakov@mail.ru 2ОАО „НИЦЭТУ", 197376, Санкт-Петербург, Россия

2,

Рассматриваются свойства факториальной системы счисления и некоторые новые сферы ее применения для решения ряда комбинаторных задач в программировании и проектировании компьютерных систем. Факториальные числа могут быть однозначно пронумерованы десятичными или двоичными числами и интерпретированы перестановками элементов любого типа. Декодирование двоично-кодируемой записи перестановки в факториальной системе счисления позволяет каждой перестановке однозначно поставить в соответствие размещение дискретных объектов (элементов, ссылок и др.) в некотором фиксированном дискретном пространстве. Перестановки и размещения могут быть применены в задачах автоматизации конструкторского проектирования, коммутации каналов вычислительных систем и в защите данных.

Ключевые слова: перестановки, факториальная система счисления, двоичное кодирование факториальных чисел, преобразование двоичного числа в факто-риальное и обратно, размещения, сочетания элементов.

Введение. Среди множества систем счисления в вычислительной технике наиболее используемыми остаются десятичная и двоичная. От большинства других систем счисления [1] пришлось отказаться, так как присущие им недостатки превалировали над достоинствами. Однако не исключено, что с развитием информационных технологий и техники интерес к использованию нетрадиционных систем счисления будет расти. Ряд задач, связанных с размещением элементов конечного множества в конструктиве или с коммутацией каналов и устройств в вычислительных устройствах, носят комбинаторный характер. Факториальная система кодирования чисел [2] позволяет интерпретировать перестановки применительно к различным конечным множествам элементов. В настоящей работе рассматриваются свойства этой системы и приводится пример использования в ряде практических задач, решаемых средствами как программирования, так и схемотехники.

Факториальная система счисления. Позиционная система счисления обеспечивает запись натурального числа N в виде цифрового слова Г = /„ /п-1 ... _/!, состоящего из упорядоченного набора символов /¡, взятых из множества основных символов А (алфавита системы счисления). Число 0 записывается в виде цифрового слова 0. В факториальной записи числа каждый символ _// записи цифры /-го разряда числа Г выбирается из множества ^={0, 1, ..., / - 1}, каждому натуральному числу N однозначно соответствует запись в факториальной системе

(р(г) — вес i-го разряда) и существует рекурсивный алгоритм преобразования

n

(1)

(2)

или по рекурсивной формуле

{£¿+1 = Si(n-i) + fn-b So = 0, i = 1, 2, ..., n}.

Таким образом, с целью получения последовательности цифрf1,f2, ...,fn факториального числа для исходных десятичного или двоичного чисел находим {целая часть £1 = £0/2 = N/2 и остаток целочисленного деления f1 =£0 % 2 =N % 2 = 0 (% — операция получения остатка целочисленного деления)} или в виде рекурсивного алгоритма

{Si = SM/(i + 1), f = Si-1 % (i +1);}, S0 = N, i = 1, 2, ..., n.

Например, если N =100, то {f =100 % 2=0, S2 =100 / 2=50}, f =50 % 3 =2, S3 =16}, {f =16 % 4 = 0, S4 = 4}, /4 = 4 % 5 = 4, S5 = 0}.

Следовательно, число 100 в факториальной системе счисления представляется в виде F = f4 /з f2 f1 = 4020/

В программе преобразования на языке Си выбранный порядок нумерации для некоторых индексов меняется, так как он определяет порядок доступа к ячейкам памяти, для которых принят унифицированный порядок BigEndian — нулевой индекс массива F[0], младший индекс и далее размещаются, последовательно доступны элементы F[1], F[2], ... с адресами +1, +2, +3, ... c индексами 1, 2, 3, ...

Приведем фрагмент программы преобразования двоичного числа в факториальное на языке программирования Си.

char M=5; //количество разрядов факториального числа char F[4], .N=100; j=3; // j=3,2,1,0 — номер позиции элемента в F[j]

DtoF() //преобразование двоичного числа в факториальное {char i, j=4; for(i=1; i<=M; i++)

{F[i -1]=N% i; N=N/i; j—;} }

Обратное преобразование числа F из факториальной системы счисления в десятичную или двоичную форму записи выполняется пересчетом согласно формуле (2). Например, в десятичной системе

N = 4020f = 4 х 4! + 0 х 3! + 2 х 2! + 0 х 1! = 100.

Таким образом, между целыми неотрицательными числами и их представлениями в факториальной системе счисления существует взаимно-однозначное соответствие.

Двоично-кодированная запись числа в факториальной системе счисления может быть использована в некоторых арифметических операциях c положительными числами (+1, -1, +,-).

В частности, результат поразрядного сложения {Si} двух чисел в факториальной системе счисления с разрядами {Xi} и {Yi} представляет собой сложение Xi + Yi с переносом единицы в следующий разряд, т.е. если Xi + Yi < i +1, то Si = (Xi + Yi) и Si+1 = Si+1 и Si+1 = Si+1, иначе Si = (Xi + Yi) - (i + 1) и Si+1 = Si+1 и Si+1 = Si+1 +1.

Для двоичного кодирования цифр максимального пятиразрядного факториального числа F=X5X4X3X2X1 = 54321/= 120 необходимо 11 бит информации (для кодирования 5 и 4 необходимо по три бита, для 2 и 3 — по два и для 1 — один). При доведении до максимального, кратного rn=[log2n +1] (n = 5, m = 3), числа битов, используемых для кодирования каждой цифры записи 5-разрядного двоично-факториального числа, требуется nxm=15 бит информации. Таким образом, оптимальным машинным представлением чисел является двоичное кодирование, поэтому в преобразованиях в факториальную систему счисления используются двоичные числа. Двоичный 8-разрядный код с максимальным значением 255 может определить любую из 5! перестановок, 16-битный код — любую из 8! перестановок.

Алгоритм формирования перестановки. В настоящей работе предлагается метод интерпретации факториального числа перестановками конечного множества элементов любого

типа, который ставит в соответствие перестановкам естественный порядок в десятичной системе. На основе этого метода могут быть предложены эквивалентные машинные программы или аппаратные решения практических задач из различных областей с перестановками.

Рассмотрим пример формирования перестановки элементов из пятиэлементного множества символов Q={q4,q3,q2,q1,q0} = {a,b,c,d,e}. Общее число перестановок равно 51=120. Каждой перестановке соответствует десятичное число от 0 до 119 (номер перестановки), представляющее собой десятичную запись четырехразрядного числа в факториальной системе счисления. Из предыдущего примера выберем перестановку с номером #=100.

Преобразуем десятичный номер перестановки в его запись в факториальной системе счисления Ff =/3/2/1/0 = 4020/. Определим перестановку R={r4,r3,r2,r1,r0}, соответствующую номеру #=100. Для этого будем последовательно заполнять элементами a,b,c,d,e множества Q позиции r4,r3,r2,r1,r0 перестановки R слева направо на основе значений разрядов числа 100, записанного в факториальной системе счисления.

Для контроля выбранных и незанятых позиций перестановки R в процедуре заполнения используем двоичный вектор S={54,53,52,51,50} с начальным значением £={0,0,0,0,0}.

Поставим элемент {a} c индексом q4 в Q в позицию r4 в перестановке R (это соответствует значению старшего разряда f4 = 4 числа 4020/ ) и получим R={a,r3,r2,r1,r0}. Отметим в двоичном векторе S соответствующий бит 54, который обозначает занятую позицию в R, значением 1. Получим двоичный код размещения S={1,0,0,0,0}.

Далее рассмотрим четыре оставшихся свободных места {r3,r2,r1,r0} в перестановке R. Для назначения места в перестановке R элементу q3 ={b} из множества Q выберем место r0, соответствующее значению следующего разряда f = 0 числа 4020/. Получим R={a,r3,r2,r1,b}и двоичный код размещения S= {1,0,0,0,1}.

Далее для свободных мест {r3,r2,r1} в R ставим в соответствие три свободные позиции {53,52,51} в S. Кодируем эти три бита разрядами двоичного кода (b2b1b0), элементу q2 ={c} из множества Q в перестановке R назначается позиция r3, соответствующая коду (b2b1b0)=(100) для /2=2 числа 4020/. Получим {53,52,51}=(b2b1b0)=(100), R={a,c,r2,r1,b} и код размещения S={1,1,0,0,1}.

Для элемента q1= {d} множества Q в перестановке R и в S остаются две свободные позиции {r2,r1} и {52,51}. Для/1 =0 выбираем код {52,51}= =(b1b0)= (01). Получим R={a,c,r2,d,b} и код размещения S= {1,1,0,1,1}.

Последнему элементу q0={e} множества Q в перестановке R остается единственное место r2. Получим R={a,c,e,d,b}, код размещения определяет завершение формирования перестановки S={1,1,1,1,1}.

Размещение элементов в R определяет индекс i = 4, 3, 2, 1, 0. Очевидно, можно принять инверсную нумерацию и размещение с индексами i = 0, 1, 2, 3, 4. Тогда индекс инвертируется вычитанием из четырех.

Прямая перестановка имеет вид

к = 4 3 2 1 0 ~ a b c d e i = 4 0 3 1 2 ~ a c e d b,

инверсная — i = 0 4 1 3 2 ~ b d e c a.

Приведем фрагмент программы формирования перестановки на языке Си:

char M=5; //количество элементов char £[5]; //прямая перестановка M=5 char F[5]; //факториальное число 40200 char .N=100; //двоичный номер перестановки char Q[]="abcde"; //исходное размещение unsigned char S=0;

DtoF() { } //преобразование двоичного числа в факториальное main()

{char df,j,i=0,k=0,S1;

Б'о.(); //факториальное число . £ог(7=4;7>=0;){ //перестановка с1£= .[7]; //чтение 7 цифры в . do{

(5&1) {5=5>>1; 1++;}; //просмотр 1 бит в 5 — пропуск единиц

1£(с1£) {df=df-1; 1++;} ; //расчет индекса размещения }

while(df|(5&1));

1£^==0) {£[1]=0[£++]; 51=5=51|(1<<1); }

}

}

Для используемой пары индексов (к, г) к — адрес выбираемого элемента из Q, а г — адрес позиции этого элемента в перестановке Я.

Приведем таблицу формирования прямой перестановки Q[k] —по шагам.

к г ■ЗД) Q[k] } Як(г)

4 4 10000 а 3 4 а0000

3 0 10001 Ъ 2 0 а000Ъ

2 3 11001 с 1 2 ас00Ъ

1 1 11011 d 0 0 ac0dЪ

0 2 11111 е — — acedЪ

Полученная перестановка Я порядка т может быть представлена квадратной ш*ш бинарной матрицей перестановки и использована при решении математических задач с матрицами [4].

Обратная задача — кодирование конкретных перестановок двоичными кодами — может быть сформулирована как задача восстановления двоично-факториальной записи с последующим преобразованием в двоичный номер.

Свойство симметрии перестановки относительно инверсии индексов [к,г]—^[/,к] интерпретируем как задачу восстановления исходного размещения элементов. Таким образом, повторное преобразование номера в перестановку позволяет восстановить исходное размещение с инверсным изменением порядка использования индексов. Для примера, прямое преобразование Q[5]—Я[5] с парами индексов [к, г] = {[4,4], [3,0], [2,3], [1,1], [0,2]} формирует перестановку Q = (а,Ъ,сД,е) —Я = (а,с,в,ё,Ъ).

Применение инверсных индексов [к,г]={[4,4], [0,3], [3,2], [1,1], [2,0]} к Я=(а,с,в,ё,Ъ) восстанавливает исходное размещение Q=(a,Ъ,c,d,e).

Если на множестве Q из М элементов выбрано некоторое подмножество из 1<ш<М элементов, а остальные представлены нулями, то применяя к ним все возможные перестановки, перечисляем все возможные их размещения (АМ) в Q. Для того чтобы ограничиться

только разными вариантами размещения в алгоритме перестановок с использованием счетчика факториальных чисел, требуется сортировка, при которой исключаются перестановки нулей.

Все возможные сочетания из п элементов по т определяются двоичными кодами длиной п, где каждый разряд соответствует одному из п элементов конечного множества £. Мощность системы собственных подмножеств и кодов совпадает — 2п, включая пустое и единичное множества. Если задать начальное размещение Q через т единиц, а остальные — через (М - т) нулей, то все возможные перестановки единиц, за исключением перестановок

нулевых элементов, будут обозначать все возможные сочетания ^ СМ ) и определять как подмножества, состоящие из элементов в позициях, соответствующих единицам в этих перестановках.

Задачи с перестановками

1) Коммутация каналов. Я можно интерпретировать как отображение Я.^—Я^), ставящее в соответствие упорядоченному множеству элементов Q его перестановку Я(<0).

Полученную перестановку можно использовать для быстрой последовательной коммутации исходных ссылок {a,b,c,d,e}, размещаемых в Q={^4,^3,^2,^1,^0} входных каналах в выходные каналы R={r4,r3,r2,r1,r0}, выбирая их последовательно для заданной перестановки Q^R. Значения множества Q можно рассматривать как начальные адреса массивов данных или ссылки на исполняемые функции. Программа, которая контролирует R, может выбрать соответствующую ссылку для приема массива данных или выполнения заданной функции.

В схемной реализации источники данных в соответствии с предложенным последовательным алгоритмом формирования пар индексов (i, j), ieQ, jsR из Q[5] подключаются через мультиплексор MXq к шине данных Bus, которая через распределитель R[5] подсоединяется к входам пяти приемников R последовательно. Мультиплексор задается индексом i, распределитель данных по приемникам — индексом j.

В стандарте преобразования кодов при передаче данных по Bluetooth-интерфейсу [5] используются схемы с парными перестановками на двухвходовых мультиплексорах — для формирования перестановок в 4^-4 и 5^-5 коммутаторах. При этом используются 14 управляющих сигналов и 14 мультиплексоров. В работе [5] не приведена систематическая процедура построения схемы в общем случае для конкретной перестановки, поэтому схема избыточна. Количество доступных кодов управления для выбора перестановок для четырех каналов 214 >>5!

Параллельная схема выбора перестановок может быть выполнена из n мультиплексоров c n входами. Входы задаются ]log2n[ управляющими сигналами. Использование кодов адресов при последовательном выборе входных каналов для i = 1, 2, ..., n мультиплексоров исключает повторную выборку, если исключается адрес, использованный в предыдущей выборке. При этом нарушается естественный последовательный порядок перечисления перестановок. Однако адрес к для i-го мультиплексора в конкретной перестановке можно визуально определить для известной пары индексов (к, i) или в алгоритме формирования перестановки по ее факториальному номеру.

2) Автоматизация проектирования. Задача конструкторского проектирования топологии печатных плат связана с размещением однотипных электронных компонентов, например микросхем, на многослойной плате, и трассировкой соединений по выбранному критерию.

Алгоритмически задача решается перебором перестановок R, для каждой из которых вычисляется значение функционала F(R), определяющего, например, число электрических переходов с одного слоя платы на другой или суммарную длину электрических соединений, и выбором перестановки R0, на которой достигается минимум этого функционала [6, 7].

Здесь также применимы локальные размещения и перестановки с учетом конструктивных ограничений.

3) Защита информации. Используется алгоритм преобразования 8-разрядных двоичных кодов, каждый из f разрядов в котором трактуется в факториальной системе как позиция i-го бита в двоичном коде некоторой перестановки битов в байте.

Для решения задачи защиты доступа, устранения искажений и восстановления информации в системах передачи и хранения данных может быть использована перестановка битов кодов. Кодирование перестановками обеспечивает высокую защищенность символьных данных. Уровень защищенности можно оценить объемом вычислений, необходимых для идентификации кода перестановки. Для повышения надежности и защиты возможно применение массива перестановок, такой подход использовался при защите программ в микроконтроллерах Mcs51FA фирмы Intel [8].

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

ность попадания в занятую страницу, но требует затрат времени на выбор нового адреса или перезагрузки. С применением предлагаемого метода формирования случайных перестановок битов кода эти затраты времени могут быть минимизированы.

5) Задачи анализа надежности вычислительных систем. Предлагаемый алгоритм можно использовать при построении и исследовании устройств реконфигурации отказоустойчивых многофункциональных вычислительных систем на основе перестановок настроек [9, 10].

Заключение. В статье рассмотрены свойства факториальной системы счисления, которые могут быть использованы в разных приложениях. Предлагаются алгоритмы основных процедур преобразования целых чисел в факториальные и способы их использования для формирования перестановок и коммутации применительно к заданным исходным размещениям множества элементов.

список литературы

1. Системы счисления. Факториальная система [Электронный ресурс]: <http://numsy.ru/education-page/ factorial_system.html>.

2. Скорубский В. И., Экало Ю. В. Факториальная система счисления // Изв. вузов. Приборостроение. 1977. Т. 20, № 5. С. 70—73.

3. А. с. № 766011. Коммутатор / М. Л. Александров, Г. Д. Андреев, В. И. Скорубский, Ю. В. Экало. Госреестр изобретений СССР. 28.05.1980.

4. Ланкастер П. Теория матриц. М.: Наука, 1982. 272 с.

5. Spécification of the Bluetooth System. 2014. 1081 р.

6. Андреев Г. Д., Экало Ю. В. Алгоритм оптимального и локально-оптимального разбиения печатных соединений на два слоя платы // Обмен опытом в радиопромышленности. 1977. № 2. С. 33—37.

7. Андреев Г. Д., Скорубский В. И., Экало Ю. В. Алгоритм размещения // Применение вычислительных машин в проектировании и производстве печатного монтажа. Л.: ЛДНТП, 1975.

8. Сташин В. В., Урусов А. В., Мологонцева О. Ф. Проектирование цифровых устройств на однокристальных микроконтроллерах. М.: Энергоатомиздат, 1990. 223 c.

9. Богатырев В. А. О модификации функции „перманент матрицы" и ее применении в комбинаторных методах анализа надежности вычислительных систем // Информационные технологии. 2002. № 1. С. 5—11.

10. Богатырев В. А. Надежность вычислительных систем с функциональной реконфигурацией на основе перераспределения задач // Информационные технологии. 2001. № 7. С. 22—27.

Сведения об авторах

Владимир Иванович Поляков — канд. техн. наук, доцент; Университет ИТМО, кафедра вычислительной техники; E-mail: vxpolyakov@mail.ru Владимир Иванович Скорубский — канд. техн. наук, доцент; Университет ИТМО, кафедра вычислительной техники; E-mail: vlis@km.ru Юрий Владимирович Экало — канд. техн. наук, доцент; ОАО „НИЦ ЭТУ"; генеральный директор;

E-mail: yury.ekalo@nicetu.ru

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Рекомендована кафедрой Поступила в редакцию

вычислительной техники 30.06.14 г.

Ссылка для цитирования: Поляков В. И., Скорубский В. И., Экало Ю. В. Применение факториальной системы для решения комбинаторных задач // Изв. вузов. Приборостроение. 2015. Т. 58, № 6. С. 436—442.

APPLICATION OF FACTORIAL SYSTEM TO COMBINATORIAL PROBLEMS SOLVING

V. I. Polyakov1, V. I. Skorubsky1, Yu. V. Ekalo2

1ITMO University, 197101, Saint Petersburg, Russia E-mail: v.i.poiyakov@maii.ru 2St. Petersburg Electro-Technical University, Research and Engineering Center OJSC, 197376, Saint Petersburg, Russia

Properties of the factorial number system are analyzed and several new fields of its application to combinatorial problems in programming and computer systems design are considered. Factorial numbers may be univalently enumerated with decimal or binary integers and interpreted as permutations of elements of any type. Decoding of binary-coded record of permutation in the factorial number system makes it possible to relate each permutation to a unique distribution of discreet objects (elements, references, etc.) in a specific discreet space. Permutations and distributions may be used in solving the problems of automation of design and commutation of calculating system channels, as well as in data protection.

Keywords: permutations, factorial number system, binary coding of factorial numbers, transformation of binary number into a factorial one and back, distributions, combinations of elements.

Reference for citation: Polyakov V. I., Skorubsky V. I., Ekalo Yu. V. Application of factorial system to combinatorial problems solving // Izvestiya Vysshikh Uchebnykh Zavedeniy. Priborostroenie. 2015. Vol. 58, N 6. P. 436—442 (in Russian).

DOI: 10.17586/0021-3454-2015-58-6-436-442

Yury V. Ekalo

Vladimir I. Polyakov

Vladimir I. Skorubsky

Data on authors

PhD, Associate Professor; ITMO University, Department of Computer Technique; E-mail: v_i_polyakov@mail.ru

PhD, Associate Professor; ITMO University, Department of Computer Technique; E-mail: vlis@km.ru

PhD, Associate Professor; St. Petersburg Electro-Technical University, Research and Engineering Center OJSC; Director General; E-mail: yury.ekalo@nicetu.ru

i Надоели баннеры? Вы всегда можете отключить рекламу.