91
правка
Изменения
→Специализация алгоритма для генерации следующего разбиения на подмножества
непересекающихся подмножеств множеств.
}}
Например для <tex>n = 5 </tex> существуют следующие разбиения:
<tex> \{1, 2, 3, 4, 5\}</tex>
<tex> \{1\}~\{2\}~\{3\}~\{4\}~\{5\}</tex>
и т. д., всего таких разбиений для <tex>n = 5 </tex> существует 52.
'''Примечание:'''
'''Рассмотрим алгоритм нахождения лексикографически следующего разбиения на подмножества:'''
*Будем хранить подмножества с помощью двумерного массива, например, разбиение <tex> \{1, 2, 3\} ~ \{4, 5\} </tex> будет выглядеть так:
{| class="wikitable" border = 1
<code>
// a sets - матрица содержащая подмножества
// used - массив в котором мы храним, удаленные элементы
'''for ''' i = n '''downto ''' 0 '''if ''' /*можем добавить в конец подмножества элемент из used*/ // добавляем '''break;''' '''for ''' j = a[i].size() - 1 '''downto ''' 0 '''if /* ''' можем заменить элемент, другим элементом из массива used*/
//заменяем
'''break;'''
used.add(a[i][j]); //удаляем элемент и добавляем его в массив
</code>