Прошу помощи с алгоритмом. Необходимо написать функцию генерации наборов комбинаций. Пример: На вход поступает массив из 3 элементов: Код (Text): {a,b,c} На выходе имеем массив из 6 элементов (3! [факториал]), каждый элемент которого есть набор входного массива: Код (Text): { {a,b,c}, {a,c,b}, {b,a,c}, {b,c,a}, {c,a,b}, {c,b,a}, } Код писать не обязательно, желательно только объяснить алгоритм или дать ссылку на источник с информацией, спасибо. ----------------------------- Решил задачу, ниже предоставляю код, может кому-то понадобится: Код (Text): private function swap(&$a, &$b) { $c = $a; $a = $b; $b = $c; } private function getPermutations($arr, $start = 0, $count = false) { $result = array(); if ($count === false) { $count = count($arr); } if ($start == $count) { $result[] = $arr; } else { for ($current = $start; $current < $count; $current++) { $this->swap($arr[$start],$arr[$current]); $result = array_merge($result, $this->getPermutations($arr, $start+1, $count)); $this->swap($arr[$start],$arr[$current]); } } return $result; } private function getSets($str) { $parts = explode(' ', $str); $parts = array_unique($parts); $cnt = count($parts); return ($cnt <= 1) ? $parts : $this->getPermutations($parts, 0, $cnt); }
Re: Генерация наборов комбинаций тут правда строка составляется из букв, но не принципиально, ПМСМ http://stackoverflow.com/questions/12293870/algorithm-to-ge ... ain-lengt/