Алгоритмы работы с множествами

Автор работы: Пользователь скрыл имя, 15 Октября 2013 в 19:23, реферат

Краткое описание

Наиболее простая форма задания множества - перечисление его элементов, например А={4, 7, 13} (множество А состоит из трёх элементов - целых чисел 4, 7, 13).
Другая часто применяемая форма задания - указание свойств элементов множества, например A = {x| x^2 ≤ 4} - множество чисел х, удовлетворяющих указанному условию.

Прикрепленные файлы: 1 файл

Алгоритмы работы с множествами.doc

— 164.50 Кб (Скачать документ)

Bm1,Bm-11…, B11.

3. Поместить последовательность  из пункта 2 за последовательностью из пункта 1.

Пример для n=3.

Коду Грея порядка n=1 соответствует два одноразрядных вектора:

0,1.

Поместим 0 после каждого, получили

00,10.

Реверсируем последовательность 0,1 и  дописываем им 1, получаем:

11,01.

 Объединяем – получаем:

00,10,11,01.

Это найдены Bi для n=2.

Теперь опять дописываем к ним 0, реверсируем  и к ним 1, а потом  все объединяем и получаем в итого:

000, 100, 110, 010, 011, 111, 101, 001.

Нерекурсивная версия построения кода Грея приведена в алгоритме 3.

Алгоритм 3. Нерекурсивное построение кода Грея.

1. В качестве начального взять  вектор B=(0,…,0), т.е. для каждого i=1,…,n B[i]=0.

2. Присвоить i=0, где i- число построенных двоичных векторов.

3. Вывести текущее значение вектора  B.

3. Увеличить i на 1, т.е. i=i+1;

4. Найти p как наибольшую степень двойки, которая делит нацело i.

5. Если p<n, то B[p+1]=1-B[p+1], и вернуться к пункту 3. Иначе остановка.

Реализовать решение следующей  задачи.

Задача о  рюкзаке

Задача о рюкзаке — одна из задач линейной комбинаторной оптимизации. Подобные задачи часто возникают в экономике, прикладной математике, криптографии.

Сформулируем задачу в общем случае.

Дано k предметов, i-й предмет имеет массу wi > 0 и стоимость pi > 0. Необходимо выбрать из этих предметов такой набор, чтобы суммарная масса не превосходила заданной величины W (вместимость рюкзака – в некоторой определенной величине), а суммарная стоимость была максимальна. Другими словами, нужно определить набор бинарных величин (b1, b2,..., bk), такой, что

b1w1 + b2w2 +...+ bkwk

W,

а величина b1p1 + b2p2 +...+ bkp-- максимальная. Величина bi равна 1, если i-й предмет включается в набор, и равна 0 в противном случае.

Задача укладки рюкзака очень сложна. Если перебирать всевозможные подмножества данного набора из k предметов, то получится решение сложности не менее чем O(2k). В настоящее время неизвестен (и, скорее всего, вообще не существует) алгоритм решения этой задачи, сложность которого является многочленом от k.

Мы рассмотрим решение данной задачи для случая, когда все входные  данные -- целочисленные, сложность алгоритма будет O(kW).

Решение

Задача о рюкзаке в случае, когда вес каждого предмета представляет собой целое число, может быть решена с помощью обычно линейного перебора всех подмножеств или с помощью динамического программирования. Стоит отметить, что данная задача  является NP-задачей (псевдо-полиномиальна).

Требуется решить задачу с помощью  одного из перечисленных выше алгоритма  перебора подмножеств множества.

В качестве проверочного примера можно использовать такой рюкзак:

Пусть максимальная вместимость рюкзака W = 15, количество предметов k = 5, их стоимости и массы таковы:  
w1 = 6, p1 = 5,    w2 = 4, p2 = 3,    w3 = 3, p3 = 1,  
w4 = 2, p4 = 3,    w5 = 5, p5 = 6.

Способ решения задачи с помощью  динамического программирования мы рассмотрим чуть позже.


Информация о работе Алгоритмы работы с множествами