Генерация мультимножеств

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

Пример. Мультимножество (x, x, x, y, y, z, z, z, u) удобно записывать как (3×x, 2×y, 3×z, 1×u).

Применение коэффициентов кратности удобно также для представления мультимножеств при построении алгоритмов. Пусть x<y<z<u, тогда множество (3×x, 2×y, 3×z, 1×u) представимо как (3,2,3,1).

Таким образом, если для представления подмножеств некоторого базового множества из n элементов были использованы n-последовательности нулей и единиц, то для представления мультимножеств, которые можно построить на базе этого множества, удобно использовать n-кортежи неотрицательных целых чисел.

Упражнения. 1. Пусть задано мультимножество A=(m1,....,mn), mi³0, 1£i£n. Доказать, что А имеет мультиподмножеств.

2. Пусть A=(m,...,m), где базовое множество содержит n элементов. Написать программу генерации всех мультиподмножеств А в лексикографическом порядке. заметим, что подобная генерация фактически совпадает с выводом всех чисел от 0 до mn-1 d m-ричной позиционной системе.

3.Написать программу генерации всех мультиподмножеств А из предыдущего упражнения, при котором каждое последующее мультиподмножество отличается от предыдущего вставкой или удалением одного элемента. Генерация начинается с представления пустого множества. (Вначале постройте рекурсивный алгоритм генерации, например, воспользовавшись последовательностью

C10; C20;...; CP0; CP1;...; C11; C12;...; CP2; CP3;...,где р=mn,

которая определяет генерацию мультимножеств (n+1)-го порядка. Затем постройте итеративный алгоритм, подобный SET3.)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: