Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Valentin Kononov                     2:5035/38.9    27 Dec 2001  23:24:35
 To : Nail Zakirov
 Subject : re: разбиение множества
 -------------------------------------------------------------------------------- 
 
 Чет Дек 27 2001 08:46, you wrote to All:
 
  NZ> Подскажите plz алгоритм разбивающий множество из n элементов на k
  NZ> подмножеств. Hапример имеем: {1,2,3,4}   n = 4,  k = 2  получаем
  NZ> : {{1,2,3},{4}} {{1,2,4},{3}} {{1,3,4},{2}} {{1,2},{3,4}} {{1,3},{2,4}}
  NZ> {{1 ,4},{2,3}} {{1},{2,3,4}}
 
   Можно в цикле от 1 до (2^n)-1 считать количество R(i) единиц в двоичном
 представлении переменной цикла i и, если R(i)<=n-k+1, рекурсивно переходить
 к разбиению множества из n-R(i) элементов на k-1 подмножество. Если k-1=1,
 то расставляем элементы по подмножествам - в 1-е войдут элементы,
 соответствующие единицам в i1, во 2-е - те из оставшихся элементов, которым
 единички достались в i2 и т.д.; в k-е - все оставшиеся.
 Hапример, если i1=5, i2=2, то начало разбиения такое: {(1,3),(4)...
 Однако, очевидно, что такой алгоритм будет постоянно повторять одни и те же
 циклы. Поэтому логично запустить его в обратном порядке:
 от 2 до n-k+1 элементов разбить на 2 подмножества;
 от 3 до n-k+2  -->>-- на 3 подмножества,
 и т.д., используя каждый раз те разбиения, которые были получены на
 предыдущем шаге. Разумеется, их надо куда-то записывать.
  Да, чуть не забыл - так будут повторяться одинаковые разбиения с
 перестановкой подмножеств. Hо это даже проще: достаточно в каждое
 подмножество автоматически записывать первый свободный элемент.
 Цикл надо делать от 0 до (2^(n-1))-1, R(i)<=n-k
 В том примере будет {(1,2,4),(3,6)...
 
  NZ> хотелось бы еще получить только те варианты в
  NZ> которых кол-во подмножеств имеющих одинаковое кол-во элементов было
  NZ> максимально. В данном случае это: {{1,2},{3,4}} {{1,3},{2,4}}
  NZ> {{1,4},{2,3}}
 
 Если остальные подмножества вообще не нужны, наложи соответствующее
 ограничение на R(i).
 
 С уважением, Valentin
 
 --- * ---
  * Origin:  Пейте соки и нектары GSM  (Kursk 2:5035/38.9)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 разбиение множества   Nail Zakirov   27 Dec 2001 09:46:55 
 re: разбиение множества   Valentin Kononov   27 Dec 2001 23:24:35 
 RE:разбиение множества   Vitaly Slobodskoy   28 Dec 2001 00:31:33 
 Re: разбиение множества   Alexey Danov   28 Dec 2001 11:32:54 
 Re: разбиение множества   Alexey Danov   28 Dec 2001 12:42:32 
 Re: разбиение множества   Vitaly Slobodskoy   29 Dec 2001 01:03:58 
 Re: разбиение множества   Alexey Danov   29 Dec 2001 11:26:13 
 Re: разбиение множества   Vitaly Slobodskoy   31 Dec 2001 01:55:55 
Архивное /ru.algorithms/28483c2bb584.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional