отношения (7), имеющего в данном случае следующий вид:
1 g = Id1 (OZ i(l - pd (i)) + 2 (l - Pd (np )) Ipow (l) .
Комбинированный тест дает выигрыш по вычислительной сложности по сравнению с (11):
AIg = ^PdSIpow(l)- Id1 (l)Zi(1 - Pd()).
2 i=1
6. Результаты экспериментальных исследований вычислительной сложности
Комбинированный тест на простоту был реализован программно на 32-разрядной ПЭВМ. В ходе экспериментов получены значения времени выполнения теста с вероятностью необнаружения составного числа 2-100 для различных вероятностных тестов и комбинированного метода (табл. 3).
Таблица 3
Разрядность тестируемого числа, бит Время, с
Тест Лемана Тест Соловея- Штрассена Тест Рабина- Миллера Комбини- рованный метод
256 1,37 1,58 0,42 0,34
512 13,0 19,0 5,6 2,6
1024 116 158 81,0 49
Проведены эксперименты по определению эффективности использования комбинированного теста для обеспечения минимального времени генерации общесетевых параметров алгоритма ГОСТ Р 34.10 для длины 512 и 1024 бита. На длине тестируемого числа 512 бит при использовании таблицы из
100 делителей время генерации уменьшается в 2 раза. При длине тестируемого числа 1024 бита и таблице из 1000 делителей время генерации уменьшается более чем в 5 раз.
Литература: 1. Кнут Д. Искусство программирования для ЭвМ/Пер. с англ. М.: Мир, 1977. Т.2. 728 с. 2. Миллер Г.Л. Гипотеза Римана и способы проверки простоты чисел // Кибернетический сборник. М.: Мир, 1985. Вып. 23. С. 31-50. 3. Уильямс X. Проверка чисел на простоту с помощью вычислительных машин // Кибернетический сб. М.: Мир. 1985. Вып. 23. С. 51-99. 4. Василенко О.Н. Современные способы проверки простоты чисел // Кибернетический сб. М.: Мир, 1988. Вып. 25. C. 162-188. 5. Schneier B. Applied Cryptography Second Edition: protocols, algorithms and source code in C. New York: John Wiley & Sons. 1996. 758 p. 6. Горбенко И.Д., Качко Е.Г., Свинарев А.В., Мельникова О.А. Программирование операций многократной точности // Безопасность информации. 1995. №1. С. 18-21. 7. Свинарев А.В. Методы ускорения процедур цифровой подписи класса Эль-Гамаля // Радиотехника. 1997. Вып. 104. С. 173—178.
Поступила в редколлегию 22.03.98
Качко Елена Григорьевна, доцент кафедры ПОЭВМ ХТУРЭ. Научные интересы: криптология, системное программное обеспечение. Адрес: 310726, Украина, Харьков, пр. Ленина, 14, тел. 30-24-52, 45-53-45.
Свинарев Андрей Владимирович, аспирант кафедры ЭВМ ХТУРЭ. Научные интересы: криптографические методы защиты информации в компьютерных системах. Адрес:310726, Украина, Харьков, пр. Ленина, 14. тел. 3024-52.
Мельникова Оксана Анатольевна, ассистент кафедры ЭВМ ХТУРЭ. Научные интересы: криптографические методы защиты информации в компьютерных системах. Адрес: 310726, Украина, Харьков, пр. Ленина, 14, тел. 30-24-52,38-46-92.
УДК 681.3.04
ПОСТРОЕНИЕ ШТРИХОВЫХ КОДОВ С ПОВЫШЕННОЙ ПОМЕХОУСТОЙЧИВОСТЬЮ
ДИЧКА И.А., СУЛЕМА Е.С._______
В статье рассматривается задача построения шрихо-вых кодов с повышенной помехоустойчивостью. Задача решается с использованием методов теории помехоустойчивого кодирования, а именно V-кодов. Рассмотрены примеры построения штриховых кодов с повышенной помехоустойчивостью, а также алгоритм декодирования таких штриховых кодов.
Использование ШК подразумевает три этапа:
1) изготовление ШК-этикетки; 2) хранение информации в виде ШК; 3)считывание ШК с последующим декодированием исходной информации.
На каждом из этих этапов возможно возникновение ситуаций, приводящих к искажению ШК-символов, а значит, и к ошибкам в исходной информации. К ним можно отнести следующее:
1) сбой устройства печати, а также дефекты печати (неровности, светлые и темные пятна, неконтрастное изображение, сворачивание (расплывание)
краски); 2) непродуманное оформление ШК-этикет-ки (в качестве носителя ШК выбрана глянцевая бумага, материал типа полиэтилена с неустойчивой краской); 3) загрязнение ШК-этикетки в процессе хранения и использования; 4) сбой устройства считывания.
Основная идея построения ШК с обнаруживающей и корректирующей способностью знаков состоит в следующем: перейти от контроля правильности всего ШК -символа (ШК-символ — совокупность данных, представленных в виде ШК, построенная по определенным правилам) в целом, осуществляемого путем добавления к исходному слову контрольного символа, к контролю правильности каждого ШК-знака (под знаком понимают совокупность штрихов и пробелов, соответствующую определенному алфавитно-цифровому символу). Тогда можно построить ШК, который позволяет исправлять, например, все однократные ошибки, возникающие в пределах каждого знака. Значит, при представлении n-символьного исходного слова такой ШК теоретически позволит исправить n-кратную ошибку, возникшую в пределах всего ШК -символа.
Проведенные авторами исследования показали, что наиболее вероятными являются ошибки вставки разрядов в двоичном векторе знака (компоненты двоичного вектора знака—двоичные нули и едини-
РИ, 1998, № 1
47
цы; количество подряд стоящих единиц (нулей) соответствует ширине штриха (пробела) в ШК-знаке). Значит, необходимо построить штриховой код, знаки которого обладали бы способностью обнаруживать и исправлять такие ошибки. Построим сначала двоичный код с заданной помехоустойчивостью, а затем будем использовать его векторы для построения знаков штрихового кода.
Для этого обратимся к теории помехоустойчивого кодирования, а именно к Упг-кодам. Коды Vnr впервые были предложены Р.Р. Варшамовым и Г.М. Тененгольцем [ 1]. Они обладают способностью исправлять ошибки типа вставки и выпадения двоичного разряда, а также исправлять так называемые несимметричные ошибки.
Рассмотрим использование Упг-кодов для исправления несимметричных ошибок, например, ошибок вида 0^1 (при этом будем считать, что ошибки вида 1^0 невозможны). Тогда необходимо сделать такую проверку двоичных разрядов вектора X=x1x2...xn, чтобы результат этой проверки зависел только от номеров позиций 1 ...п. Для этого составим сумму:
П
S(X) = 2 Xi • І. (1)
i=i
В (1) ненулевые слагаемые соответствуют только единичным разрядам. Таким образом, S(X) равно сумме номеров позиций единиц в двоичном векторе
X.
Пусть в векторе X произошла ошибка вида 0^1 в) -м разряде, в результате чего получен новый вектор
Y. Из (1) следует: S(Y)=S(X)+j. Тогда
S(Y) - S(X) = j.
Следовательно, позиция ошибки определяется однозначно, а сама ошибка исправляется инвертированием единицы в j-й позиции.
Теперь рассмотрим использование кодов Vnr для исправления ошибок выпадения и вставки разрядов.
Рассмотрим код, для всех векторов которого справедливо равенство
S(X) mod г = 0, (2)
где г > п + 1.
Пусть в двоичном векторе X= xix2...xn произошло выпадение одного разряда, в результате чего получился вектор Y=y1y2 ... yn-1.
Обозначим через n1 число единиц, а n0 — число нулей, расположенных правее выпавшего разряда.
Числа n1 и n0 могут быть определены с помощью суммы
n—1
S(Y) = 2 i • Уі.
i=i
Действительно, если выпал 0, то S(X)-S(Y)= n1, а если выпала 1, то — S(X)-S(Y)=n-n0.
Таким образом,
n1, если выпал 0
n — n0, если выпала 1. (3)
Однако в [1] показано, что k представляет собой дополнение величины (S(Y) mod г) до г, т.е. k = г -S(Y) mod г.
Кроме того, если ra(Y) — вес вектора Y, то очевидно, что
fffl(Y) > ni
(to(Y) < n — n0 . (4)
Неравенства (4) позволяют определить по величине k, является выпавший разряд 0 или 1.
Если k<ro(Y), то выпал 0 и вставить его в вектор Y необходимо таким образом, чтобы правее него было k=n1 единиц, а если k>ro(Y), то выпала 1 и ее необходимо вставить так, чтобы правее нее было k=n-n0 нулей.
Пусть в векторе X= x1x2...xn произошла вставка одного разряда, в результате чего получился вектор Y=y1y2 ... yn+1. Тогда для исправления такой ошибки необходимо проанализировать значение
n+1
P=S(Y)modr=( 2 yi •1 )mod г:
1=1
1) если P=0, то отбрасывается последний разряд вектора Y; 2) если 0< Р<ю(У), то отбрасывается любой 0, правее которого находится Р единиц; 3) если P=ra(Y), то отбрасывается первый разряд вектора Y; 4) если Р>ю(У), то отбрасывается любая единица, правее которой есть n+1-P нулей.
Построим Упг-код с n=7, г=п+1=8. Для любого его вектора должно быть справедливо условие (2) существования кода, имеющее для случая V78 вид
7
(2 xi •i) mod 8 = 0. (5).
i=i
Получение векторов кода сводится к нахождению разбиений [2] всех чисел e=p1+p2+...+pw, кратных г (т.е. таких, что emodr= 0), у которых Pi < n (n=7). В нашем случае числа є кратны 8 (г=8). Каждое из слагаемых pi является номером позиции единичного разряда искомого n-разрядного двоичного вектора X.
Отметим, что любое натуральное число є можно представить р способами (р>1) в виде суммы:
є=pl+p2+...+pw, где q>0, pi>0, i=1...q.
Каждая из р последовательностей р1 р2 ... pw называется разбиением числа є на w слагаемых.
Векторы кода V78 приведены в табл. 1. Для каждого из них выполняется условие (5).
Пусть требуется построить ШК с повышенной помехоустойчивостью. При построении знаков ШК будем руководствоваться следующими требованиями: 1) все знаки должны быть различны; 2) все знаки должны допускать объединение их в единый ШК-символ; 3) ШК-знаки должны удовлетворять требованиям считывающего устройства по способности считывания (количество градаций ширины не должно превышать заданного значения); 4) все знаки должны однозначно выделяться из ШК -символа.
Тогда исходными данными для построения знаков ШК являются: 1) общее количество знаков N;
2) количество t элементов в знаке — четное (для того, чтобы обеспечить непрерывное объединение знаков в ШК-символ, когда за последним пробелом предыдущего знака следует штрих следующего); 3) количество градаций ширины (диапазон допустимых значений) L=2...5; 4) все знаки должны иметь одинаковое количество элементов и их двоичные векторы должны начинаться с одной и той же двоичной цифры, например, с единицы; 5) все знаки должны обладать способностью исправлять одно-
48
РИ, 1998, № 1
кратные ошибки вставки разряда в двоичном векторе знака.
Проанализируем векторы из табл. 1. Их общее количество — 15. Однако построить 15 ШК-знаков невозможно, так как не все векторы множества удовлетворяют перечисленным выше требованиям. Рассмотрим их подробнее.
Количество ШК-элементов в знаке (т.е. количество групп подрядстоящих нулей (единиц) в двоичном векторе знака) должно быть четным и при этом одинаковым для всех знаков. Векторов, удовлетворяющих данному условию, в коде У7,8 = 8. Это векторы, для которых t=4.
Таблица 1
Двоичный вектор Кол-во ШК-элементов, t Двоичный вектор Кол-во ШК-элементов, t
0000000 1 1111010 4
0111001 4 1110111 3
0110110 5 1100100 4
0101111 4 1100011 3
0100010 5 1011000 4
0010100 5 1010101 7
0010011 4 1001110 4
0001101 4 1000001 3
Количество градаций ширины не должно превышать 5. Это означает, что вектор не должен содержать больше, чем 5 подрядстоящих нулей (единиц). В рассматриваемом множестве все векторы удовлетворяют этому условию.
И, наконец, все ШК-знаки должны однозначно выделяться и декодироваться. Для этого двоичные векторы всех знаков должны начинаться либо с нуля, либо с единицы (т.е. с одинакового двоичного разряда). Пусть все двоичные векторы знаков начинаются с единицы.
Теперь попробуем выделить из множества всех векторов двоичного кода У78 подмножество векторов, удовлетворяющих всем указанным выше требованиям. Из табл. 1 видно, что можно получить только N=4 ШК-знака с заданными свойствами, их двоичные векторы: 1100100, 1011000, 1001110,
1111010.
Тогда для представления исходной информации в виде ШК ее следует предварительно преобразовать в четвертичную систему счисления. Если же необходимо, чтобы символика ШК состояла из большего количества знаков, то нужно построить двоичный код с большими значениями n и г.
В табл. 2 приведено количество векторов Упг, удовлетворяющих требованиям к построению ШК-знаков, для разных значений n и г.
Таблица 2
n 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
4 1
5 1 1 1 1
6 1 2 1 1 1 1 1 1
7 4 2 1 1 3 1 1 1 2 1 1 1
8 3 3 3 4 3 2 3 3 2 2 3 2
9 8 5 5 6 5 6 5 3 3 3 6
10 11 8 11 11 10 8 10 6 6 7
11 17 22 20 16 15 16 13 12 13
12 33 35 25 23 29 22 25 20
Пусть, например, требуется получить цифровой ШК (N=10). Из табл.2 видно, что такой ШК можно построить на основе кода У 10j11. Векторы этого кода (обозначим его InsertCode) и соответствующие им ШК-знаки приведены в табл. 3.
Таблица 3
Сим- вол Двоичный вектор знака ШК-знак
0 1101001100 III!
1 1100110100 1 II
2 1010111000 III
3 1001110110 1 II
4 1111010110 ■ II
5 1010001000 II 1
6 1001010000 1 II
7 1001000110 1 1 1
8 1110001010 ■ III
9 1011100010 II II
Ширина каждого из полученных знаков n=10 модулей (модуль — единица измерения ширины штрихов и пробелов).
Определим количество информации I, передаваемое знаком, физическую плотность J и информационную избыточность R полученных ШК-знаков:
I = ]log2 N[=]log210[=4 бита;
J =I/n=4/10=0.4 бит/модуль;
R=(n-I)/I=(10-4)/4=1,5.
Данные характеристики ШК показывают, что ШК InsertCode сравним с известным ШК 2/5, у которого J=0,36 бит/модуль, а R=1,75. Однако ШК InsertCode обладает корректирующей способностью, а ШК 2/5—нет.
Представим в виде ШК-символа информационную последовательность 48200022, используя знаки ШК InsertCode.
При этом служебные знаки “Старт” и “Стоп” (табл. 4) используются для ограничения информационных знаков ШК-символа. Искомый ШК-символ приведен на рисунке.
Определим ширину M, физическую плотность Q и информационную избыточность U ШК-символа, построенного из знаков ШК InsertCode:
M = nb + f • n + ne= 4+8-10+5=89 модуля, где пЬ(Є) — ширина знака “Старт” (“Стоп”), f — количество информационных знаков; Q = n • f/ M=10-8 / 89=0,9; U = (M - n • f) / n • f=(89-10-8) / 10-8=0,11.
Сравнивая ШК InsertCode с ШК EAN-8 (их ШК-символы содержат одинаковое количество информа-
РИ, 1998, № 1
49
ционных символов), придем к выводу, что ШК InsertCode ненамного уступает ШК EAN-8, для которого M=67 мод., Q=0,84, U=0,20. При этом ШК EAN-8 не обладает корректирующей способностью. Рассмотрим процесс считывания и декодирования
Таблица 4
“Старт” L
“Стоп” m
ШК.
В процессе работы устройство считывания ШК (УСШК) регистрирует перепады со штриха на промежуток или наоборот и подсчитывает ширину одноцветных областей (элементов ШК). Эти ширины выражаются в тактах внутреннего таймера УСШК (или ПЭВМ, если УСШК работает неавтономно). Для преобразования накопленной информации в двоичный вид ширины, выраженные в тактах, необходимо преобразовать в модули. Для этого определяется относительная ширина одного модуля (в тактах). После того, как из последовательности ширин элементов ШК, выраженных в тактах, получена последовательность ширин, выраженная в модулях, необходимо определить количество двоичных компонент (разрядов), соответствующих той или иной ширине ШК-элемента в модулях. Если эта ширина представляет собой целое число, количество двоичных разрядов определяется однозначно, а если ширина—дробное число, количество разрядов устанавливается исходя из соглаше-
1) после считывания ШК-символа знаки “Старт” и “Стоп” отбрасывают (они служат для определения направления считывания);
2) определяют начало и конец каждого знака Zj (j=1...f): известно, что каждый знак содержит t элементов;
3) для каждого знака Zj осуществляют преобразование ширин элементов ШК в двоичную последовательность вида
Zj e1e2 ... en‘;
4) проверяют количество n‘ разрядов двоичного вектора знака Zj: если оно равно эталонному для данного ШК значению n (каждый двоичный разряд вектора знака соответствует одному модулю ШК-знака), то ошибки вставки (выпадения) нет; если полученное значение n‘>n, то произошла вставка, а если n‘<n, то произошло выпадение двоичного разряда в векторе знака;
n'
5) для каждого Zj вычисляют Sj= 2 ei ' 1;
i=i
6) определяют Pj = Sjmodr и анализируют полученное значение: а) если Pj=0, то ошибок нет; б) если Pj=i^0 и при этом n‘=n, то i — номер разряда с несимметричной ошибкой (для исправления ошибки его необходимо проинвертировать); в) если Pj=i^0 и при этом n‘<n, то определяют kj = r - Pj = r - i и вес
n'
вектора Oj = 2 ei , анализируют значения kj и Oj и
i=1
Символ ШК InsertCode
ния, что ширина e = h+q, где h — целая часть, а q — дробная часть числа e, соответствует последовательности из h двоичных компонент, если q<0,5 модуля, или последовательности из (h+1) двоичной компоненты, если q>0,5 модуля. Окончательно двоичная последовательность формируется исходя из полученной последовательности количеств однотипных двоичных компонент (нулей или единиц). При декодировании того или иного ШК всегда заранее известно, с какого элемента ШК — штриха или промежутка — начинается знак. Это позволяет правильно сформи-
вставляют либо 0, либо 1 в двоичный вектор знака (подробнее алгоритм исправления ошибки выпадения разряда описан выше); г) если Pj=i^0 и при этом n‘>n, то анализируют значение Pj и отбрасывают соответствующий разряд двоичного вектора (подробнее алгоритм исправления ошибки вставки разряда описан выше);
7) по табл. 4 определяют символ ШК, соответствующий скорректированному двоичному вектору знака Zj;
8) процесс декодирования повторяют для всех f информационных знаков ШК-символа.
Проверим корректирующую способность ШК InsertCode.
Пусть при считывании ШК-символа, представляющего информационную последовательность 48200022 (рисунок), произошел сбой УСШК, в результате чего вместо двоичной последовательности
ровать искомую последовательность из групп под-рядстоящих нулей и единиц. Отличительным признаком знаков является не их одинаковая ширина, а одинаковое количество элементов в знаках (т.е. групп подрядстоящих нулей и единиц в двоичной последовательности).
Алгоритм декодирования содержит пункты:
(1111010110111000101010101 1100011010011001101001100 110100110010101110001010111000) была получена последовательность
(11110101101110001010101011100011011001100110
1001100110100110010101110001010111000).
Обнаружим и исправим возникшую ошибку. Зная, что все знаки содержат одинаковое количество элементов t=6, выделим из полученной последова-
50
РИ, 1998, № 1
тельности векторы знаков: 1111010110 1000101010 1011100011011 001100110 1001100110100 110010101110001010111000.
Определим количество разрядов n в каждом векторе знака Zj (j=1..8) и выделим вектор с ошибкой: это вектор знака Z4 (n‘=11 > n=10). Значит, в векторе этого знака произошла ошибка вставки двоичного разряда. Для исправления ошибки вычислим и проанализируем следующие значения:
її
1) S4= 2 e‘ ‘* 1 = 1+2+4+5+8+9=29;
і=ї
2) P4=29 mod 11=7;
3) ю4=6;
4) так как Р4>ю4(У) (7>6), то отбрасываем любую единицу, правее которой есть n+1-P4=10+1-7=4 нуля. Значит исправленный вектор есть 110100110.
По табл. 3 определяем символы, соответствующие ШК-знакам: 48200022.
Таким образом, предложенный ШК InsertCode обладает спобностью исправлять однократные ошибки вставки двоичного разряда, возникающие в пределах ШК-знака. При этом его численные характе-
ристики (физическая плотность, информационная избыточность) сравнимы с характеристиками известных ШК.
Литература: 1. Аршинов М.Н., Садовский Л.Е. Коды и математика. М.: Наука, 1983. 144 с. 2. Липский В. Комбинаторика для программистов. М.: Мир, 1988. 213 с.
Поступила в редколлегию 26.03.98
Дичка Иван Андреевич, канд. техн. наук, доцент кафедры специализированних компьютерных систем, заместитель декана факультета прикладной математики Национального технического университета Украины "Киевский политехнический институт". Научные интересы: штриховое кодирование информации. Адрес: 252000, Киев, пр. Перемоги, 37, НТУУ “КПИ”, ФПМ, корп. 15, к. 101, тел. (044) 4411323.
Сулема Евгения Станиславовна, младший научный сотрудник кафедры специализированных компьютерных систем Национального технического университета Украины "Киевский политехнический институт". Научные интересы: штриховое кодирование информации. Адрес: 252000, Киев, пр. Перемоги, 37, НТУУ “КПИ”, ФПМ, корп. 15, к.112, тел. (044)4411323.
УДК 681.3.016
СЕМАНТИКА РЕЛЯЦИОННЫХ БАЗ ДАННЫХ С НЕОПРЕДЕЛЕННЫМИ ЗНАЧЕНИЯМИ
ТАНЯНСКИЙ С. С, КОБЗЕВ ИВ, ЯКОВЛЕВА ИА.
Рассмотрен один класс реляционных баз данных с неполной информацией. Для поддержки такой базы данных в актуальном состоянии предложена модификация реляционных операций проекции и естественного соединения. Результатом применения модифицированных операций является слабоуниверсальное отношение. Для глобальной поддержки функциональных зависимостей определено “условие вхождения схем” несогласованных отношений.
1. Введение
Термин “неопределенные значения” широко применяется в [1-3] по базам данных (БД) для специальных значений, которые возникают по ряду причин. Здесь этот термин используется в узком смысле: “значение существует, но неизвестно”. Различные вхождения неопределенных значений в одно отношение обозначают различную семантику данных.
Для поддержки БД с неопределенностями в актуальном состоянии расширим реляционную алгебру за счет введения в множество допустимых значений термина “не определено” и модификации некоторых операций.
2. Реляционная алгебра на множествах с неопределенны ми значениями
Наиболее очевидным “узким местом” реляционной модели данных является неразвитость средств выражения ограничений целостности, какие в общем случае требуется накладывать на отношения, связи между которыми нарушены (иными словами, речь
идет о недостаточности средств выражения “семантики”). Например, обобщенные операторы естественного соединения рассмотренные в [2], не являются ассоциативными при соединении более чем двух отношений, что однозначно влияет на правильность представления данных.
Для решения этой задачи модифицируем оператор естественного соединения, при котором каждая строка (в том числе и несоединимые) попадает в соединение. Отличие от предложенных в литературе операторов заключается в следующем: во-первых, отношения, участвующие в соединении, являются определенными , во-вторых, несоединимые строки дополняются неопределенными значениями и присоединяются к результату.
Утверждение о том, что введенный оператор является ассоциативным для трех и более отношений, следует из определения полностью соединимых кортежей [2], дополняя недостающие значения при соединении неопределенными значениями.
Рассмотрим модифицированную операцию проекции для отношений с неопределенными значениями. Проекцией является отношение, полученное вычеркиванием соответствующих столбцов и исключением из оставшихся повторяющихся строк, а также строк с неопределенными значениями.
Определим алгебру на неполных отношениях.
Реляционной алгебре для неполных отношений будет соответствовать кортеж .
ИNDB =({R}, {d},пU, юU,©) , где {R} — множество схем отношений; {d} — множество отношений; п U — модифицированная операция проекции; ю U — модифицированная операция естественного соединения; © — операции реляционной алгебры.
Предложенная алгебра И NDB позволяет поддерживать функциональные зависимости путем соеди-
РИ, 1998, № 1
51