Студопедия

КАТЕГОРИИ:


Архитектура-(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; Просмотров: 1043; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.027 сек.