Генерация мультимножеств.
Для представления данных некоторых задач более естественными, чем множества являются множества с повторениями элементов, или мультимножества. При записи мультимножеств с каждым элементом удобно связывать неотрицательное целое число, указывающее количество повторений этого элемента.
Пример. Мультимножество (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.)
Дата добавления: 2015-08-11; просмотров: 785;