Каждая комбинация (определенного размера) из набора / массива без повторяющихся элементов

Допустим, у меня есть
set = [1, 2, 3, 4, 5, 6, 7]

Я хотел бы следующее взамен
[1, 2, 3, 4, 5] [4, 3, 2, 1, 6] [7, 5, 1, 3, 2] ……….

По сути, как гласит заголовок, я пытаюсь сгенерировать комбинации определенного размера из массива, но каждая комбинация не может иметь повторяющихся элементов (поэтому нет aaab, aaac, если вы поняли идею).

Я нашел здесь и другой вопрос, но в комбинациях были недочеты. Я попытался настроить и написать рекурсивную функцию безрезультатно: /

0

Решение

Хорошо — все возможные подмножества без дубликатов и при условии, что порядок не имеет значения, т.е. [1, 2, 3, 4, 5] такой же как [5, 4, 3, 2, 1], Минималистичный пример:

<?php
$arr = array(1, 2, 3, 4, 5, 6, 7);

function getSubsets($set, $items) {
$result = array();
getSubsets2($set, $items, 0, array(), $result);
return $result;
}

function getSubsets2($set, $items, $index, $current, &$result) {
if (sizeof($current) === $items) {
$result[] = $current;
return;
}
if ($index < sizeof($set)) {
getSubsets2($set, $items, $index + 1, $current, $result);
$current[] = $set[$index];
getSubsets2($set, $items, $index + 1, $current, $result);
}
}

$subsets = getSubsets($arr, 5);

echo(sizeof($subsets)); // 21
?>

Не уносить чужие лавры: это 100% на основе другой ответ переполнения стека написан на Java.

4

Другие решения

Других решений пока нет …