Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: разбиение массива на пары и тройки
Попробовал.Немного не то.Нужно что бы на выходе получились все возможные комбинации пар.
----- $i = 0;
$i = $i++ + ++$i; ?
EuGen
Отправлено: 22 Сентября, 2013 - 15:28:14
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Все возможные комбинации пар - не то же самое, что "разбить на пары". Соответственно, равны ли пары <x,y> и <y,x> ? Нужны ли пары <x,x>? Те же вопросы по тройкам.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
jonston
Отправлено: 23 Сентября, 2013 - 12:45:08
Посетитель
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
EuGen пишет:
Все возможные комбинации пар - не то же самое, что "разбить на пары". Соответственно, равны ли пары <x,y> и <y,x> ? Нужны ли пары <x,x>? Те же вопросы по тройкам.
Нет все уникальные комбинации из [x,y,z] => [x,y], [x,z], [y,z].Реверс не учитываем.Мой вариант вполне рабочий.Может просто есть вариант более оптимизированный?
- но у троек есть неоднозначность. С математической точки зрения тройка <x, y, y> - корректна. Но допускаются ли повторения внутри тройки по условиям Вашей задачи - неясно.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
jonston
Отправлено: 23 Сентября, 2013 - 14:16:37
Посетитель
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
EuGen пишет:
Но допускаются ли повторения внутри тройки по условиям Вашей задачи - неясно.
Нет, не допускается.Порядок расположения элементов не важен.Если массив [a, b, c, d, e] то на выходе получаем [a, b, c], [a, b, d], [a, b, e], [b, c, d], [d, c, e], [c, d, e].То есть компания из трех переменных встречается каждый раз по разному, но нет разницы в каком порядке.
----- $i = 0;
$i = $i++ + ++$i; ?
EuGen
Отправлено: 23 Сентября, 2013 - 14:22:38
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
jonston
Из Вашего последнего примера неясно, какими должны быть тройки. Похоже, речь не только о том, чтобы значение не повторялось в тройке, но ещё и некоторое ограничение на весь набор троек - потому что если добавить условие запрета повторения значения только внутри тройки:
Вообще у меня немного другая задача.Там вообще сложняк.Отпишусь в следующей теме.
----- $i = 0;
$i = $i++ + ++$i; ?
EuGen
Отправлено: 23 Сентября, 2013 - 14:43:03
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Суть не в "рабочем варианте" а в понимании того, что нужно получить (из примера мне это было не очевидно)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
jonston
Отправлено: 23 Сентября, 2013 - 14:59:23
Посетитель
Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011
Помог: 3 раз(а)
EuGen пишет:
Суть не в "рабочем варианте" а в понимании того, что нужно получить (из примера мне это было не очевидно)
Что конкретно непонятно?
----- $i = 0;
$i = $i++ + ++$i; ?
EuGen
Отправлено: 23 Сентября, 2013 - 16:16:54
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
jonston пишет:
Если массив [a, b, c, d, e] то на выходе получаем [a, b, c], [a, b, d], [a, b, e], [b, c, d], [d, c, e], [c, d, e]
Вот это и непонятно. Декартово произведение Вам не подходит. Единственно возможный вариант иной комбинации - это сочетание. Их количество вычисляется как
- и потому для Вашего случая должно быть равно 10.
Задача нахождения сочетаний - достаточно интересна. Я написал вариант, как сделать это для любого числа искомых комбинаций:
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.