КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Коды Грея
Подмножества множеств Случайные перестановки
Имея какой-либо способ нумерации перестановок порядка n, легко получить случайную перестановку, ставя ее в соответствие случайному целому числу из диапазона от 0 до (n-1)! Например, это можно сделать на основе векоров инверсий, как уже рассматривалось выше. Однако в дополнение к задаче выбора, скажем, случайного целого от 0 до 52!-1 существует еще задача превращения этого числа в перестановку, что требует порядка n2 операций. Эффективный метод порождения случайных перестановок осуществляют последовательности из n-1 случайных транспозиций. Начиная с любой перестановки (π1, π2, …, πn), элемент πn переставляется с одним из элементов π1, π2, …, πn, выбираемым случайно. Затем πn-1 меняется местами с одним из элементов π1, π2, …, πn-1, выбираемым случайно и т. д. Для того, чтобы показать, что все n! перестановок равновероятны, воспользуемся индукцией. Для n=1 результат очевиден. Предположим, что алгоритм порождает случайные перестановки для n=k, то есть вероятность получения любой перестановки из k элементов составляет 1/k! Пусть при n=k+1 получена перестановка П=(π1, π2, …, πk+1), в которой элемент k+1 оказался на месте j (1 ≤ j ≤ k+1). Поскольку на любом из этих k+1 мест элемент k+1 может быть в соответствии с алгоритмом с равной вероятностью, то вероятность перестановки P(П) = P(π1, π2, …, πj-1, k+1, πj+1,…, πk+1) = (1/k!)*P(π1, π2, …, πj-1, πj+1,…, πk+1)= =(1/k!)*1/(k+1) = 1/(k+1)! Следовательно, утверждение справедливо при n=k+1, то есть алгоритм порождает любую перестановку с равной вероятностью.
Пусть имеется множество A={a1, a2, …, an}. Имеется 2n подмножеств этого множества. Действительно, каждый из элементов независимо от других может как входить, так и не входить в подмножество. Порождение всех подмножеств эквивалентно порождению всех n-разрядных двоичных наборов: ai принадлежит подмножеству множества A тогда и только тогда, когда i-й разряд равен 1. В свою очередь задача порождения случайного подмножества сводится к задаче порождения случайного двоичного набора длины n, то есть случайного числа в диапазоне от 0 до 2n – 1. Наиболее очевидным способом порождения всех двоичных наборов длины n является счет в системе счисления с основанием 2. При этом два последовательных подмножества могут значительно отличаться друг от друга количеством и составом элементов, что соответствует появлению старшего разряда в очередном двоичном числе.
Наименьшим возможным изменением при переходе от одного подмножества к другому является добавление или удаление одного элемента множества. В терминах двоичных наборов это означает, что последовательные наборы должны различаться в одном разряде. Такие последовательности двоичных наборов известны как коды Грея. Более точно: n-разрядный код Грея есть упорядоченная циклическая последовательность из 2n n-разрядных наборов (кодовых слов), такая, что последовательные кодовые слова различаются в одном разряде. Обычно начальным кодовым словом считают (0, 0,…, 0), хотя на самом деле это несущественно, поскольку код циклический. Существует много n-разрядных кодов Грея. Рассмотрим один из них. Предположим, что G0 G1 G(n) = … GM,
где M = 2n -1, есть n-разрядный код Грея, записанный в виде матрица 2n × n так, что i-я строка матрицы является i-м кодовым словом. Тогда
0G0 0G1 … 0GM G(n+1) = 1GM 1GM-1 … 1G1 1G0
очевидно, есть (n+1)-разрядный код Грея. По этому рекурсивному определению G(1) = 0
00 G(2) = 01
000 G(3) = 010 Можно определить (n+1)-разрядный код Грея иначе:
G00 G01 G11 G(n+1) = G10 G20 G21 … …
Легко проверить, что таким образом получается тот же самый код Грея. Это рекурсивное определение близко к рекурсивному определению двоичного представления целых чисел. Действительно, если
0 B0 1 B1 2 B2 … = … … … 2n -1 BM то
0 B00 1 B01 2 B10 3 = B11 … … 2n+1 -2 BM0 2n+1 -1 BM1
Это позволяет предложить способ получения Gi из двоичного представления числа i. Если i = (bn bn-1 …b0)2, то Gi = (gn gn-1 …g1)2, где gj = bj + bj-1 (mod 2), 1 ≤ j ≤ n. Последнее равенство дает возможность вычислить номер кодового слова Gi по его представлению. Пусть i = (bn bn-1 …b0)2. Тогда n bj = Σ gm (mod 2), 1 ≤ j ≤ n. m=j+1 Сложение двух разрядов по модулю 2 то же самое, что исключающее “или” (XOR), поэтому можно просто сдвинуть разряды i на одну позицию влево и выполнить операцию исключающего “или”: bn bn-1 … b2 b1 b0 bn bn-1 bn-2… b1 b0 gn gn-1 … g2 g1
Приведенные формулы позволяют перечислить нерекурсивно кодовые слова Грея заданной размерности n, изменяя i от 0 до 2n –1 и получая по двоичному представлению i разряды кодового слова Gi. Аналогично, если взять случайное число i в диапазоне от 0 до 2n –1, то по нему легко восстанавливается случайное кодовое слово Gi. Пусть, например, n = 3, а i = 5 = (0101)2. Тогда операция XOR дает: 0 1 0 1 0 1 0 1 1 1 1, что соответствует кодовому слову G5. В качестве проверки выполним обратное преобразование разрядов кодового слова G5 в двоичные разряды i, в результате которого получим i = (0101)2 = 5.
Дата добавления: 2014-01-11; Просмотров: 1158; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |