Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Генерация подмножеств в лексикографическом порядке

Определение. Пусть A=(x1,…,xn) и B=(y1,…,yn), xi,yiÎ{0,1}, 1£i£n. Будем говорить, что множество А предшествует множеству B лексикографическом порядке,если существует i, 1£i£n, xi<yi и xj=yj для любого j, 1£j<i; обозначим это А<B.

Упражнение. Пусть 0 £ a < b <2n, a, b - натуральные; представим a и b в двоичной системе с выписыванием всех n двоичных разрядов и пусть a = и b = . Доказать, что тогда (x1,...,xn) < (y1,...,yn).

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

program SET1(, output);

const n=; n1=; {n1=n+1}

var s: array [1..n1] of 0..1;

i,j: integer;

begin

for i:=1 to n1 do s[i]:=0;

while s[n1]=0 do

begin

for i:=1 to n do write(s[i]); writeln;

i:=1;

{**} while s[i]=1 do

begin s[i]:=0; i:=i+1 end;

{*} s[i]:=1

end

end.

Комментарий. Пусть множеству s соответствует число s, тогда множеству, следующему за s, соответствует число s + 1.

Упражнения. 1.Доказать корректность алгоритма SET1.

2. Показать, что условие цикла {**} проверяется 2n+1-1 раз.

3. Определить вычислительную сложность алгоритма.

4. Написать программу генерации всех подмножеств в лексикографическом порядке, если s описано как SET OF 1..n.

Замечания. 1.Следует отметить, что в системе команд любой вычислительной машины имеются команды, выполняющие арифметическое сложение двоичных последовательностей определенной длин, таких, как 8 бит - 1 байт, 16 - 2 байта и тому подобное. Кроме того, часто имеются специальные программные конструкции (например, макрокоманды, выполняющие сложение более длинных двоичных последовательностей). Непосредственное применение таких команд в программе SET1 может существенно улучшить ее временные характеристики.

2. Для построения других алгоритмов генерации подмножеств, представляет интерес свойства последовательности значений переменной i перед исполнением оператора {*}. Заметим, что этот оператор {*} исполняется 2n раз, при этом последнее значение i=n+1 приводит к окончанию генерации всех подмножеств для множества из n-элементов. Пусть In обозначает эту последовательность значений переменной i за исключением последнего. In можно трактовать как последовательность номеров позиций младшей единицы в двоичном разложении чисел 1, 2,..., 2n-1. По построению двоичной позиционной системы последовательность In удовлетворяет следующему рекурсивному определению

I1=1, In= In-1,n, In-1

(первый раз единица в n-ой позиции появляется для числа 2n-1, при этом во всех других позициях с 1-ой по (n-1)-ую значения становятся нулевыми, затем для чисел 2n-1+1,..., 2n-1 повторяется процесс заполнения единицами позиций с номерами меньшими n).

Упражнение. Доказать, что если In-1=i1, i2,..., i, n>1, то In=1, i1+1, 1, i2+1, 1,..., i+1, 1.

 

<== предыдущая лекция | следующая лекция ==>
Тема 3. Генерация подмножеств множества | Генерация подмножеств за счет их минимального изменения
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 1065; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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