Код для подбора всех комбинаций?
Я пытаюсь найти(сделать) код для подбора всех комбинаций в массиве
Я нашел вот этот пример
var email = ['1', '2', '3']; // массив для результатов перестановок var results = []; // рекурсивная функция // на вход получает текущий массив и массив с памятью предыдущих вычислений function permute(arr, memo) { // переменная для хранения фрагмента массива var cur; // делаем переменную для хранения промежуточных результатов // в программировании это называется «мемоизация» var memo = memo || []; // какой размер входного массива — такой длины и делаем цикл, чтобы перебрать все элементы for (var i = 0; i < arr.length; i++) { // получаем новый массив cur, удаляя из входного массива один элемент, начиная с текущей позиции // при этом из входного массива этот элемент тоже удалится cur = arr.splice(i, 1); // если от входного массива ничего не осталось if (arr.length === 0) { // то приклеиваем текущее значение нарезки к варианту, который лежит в памяти, // и добавляем получившийся результат в итоговый массив results.push(memo.concat(cur)); } // вызываем новый виток рекурсии // в качестве аргументов передаём копию входящего массива и добавляем к кешу памяти то, что получилось после удаления одного символа из входящего массива permute(arr.slice(), memo.concat(cur)); // возвращаем в исходный массив первый элемент из нового массива, но уже на другую позицию arr.splice(i, 0, cur[0]); } // возвращаем обратно массив с результатами перестановок return results; } console.log(permute(email)); |
var email = ['1', '2', '3']; // массив для результатов перестановок var results = []; // рекурсивная функция // на вход получает текущий массив и массив с памятью предыдущих вычислений function permute(arr, memo) { // переменная для хранения фрагмента массива var cur; // делаем переменную для хранения промежуточных результатов // в программировании это называется «мемоизация» var memo = memo || []; // какой размер входного массива — такой длины и делаем цикл, чтобы перебрать все элементы for (var i = 0; i < arr.length; i++) { // получаем новый массив cur, удаляя из входного массива один элемент, начиная с текущей позиции // при этом из входного массива этот элемент тоже удалится cur = arr.splice(i, 1); // если от входного массива ничего не осталось if (arr.length === 0) { // то приклеиваем текущее значение нарезки к варианту, который лежит в памяти, // и добавляем получившийся результат в итоговый массив results.push(memo.concat(cur)); } // вызываем новый виток рекурсии // в качестве аргументов передаём копию входящего массива и добавляем к кешу памяти то, что получилось после удаления одного символа из входящего массива permute(arr.slice(), memo.concat(cur)); // возвращаем в исходный массив первый элемент из нового массива, но уже на другую позицию arr.splice(i, 0, cur[0]); } // возвращаем обратно массив с результатами перестановок return results; } console.log(permute(email));
Но в этом коде невозможно такие результаты как 112, 111, 212, и так далее
Можно ли сделать возможно создание подобных комбинаций? И ограничить количество выводимых символов до 2 или 5 вне зависимости от размера массива.
Дополнительно:
В русском и английском языках существует некая терминологическая путаница в терминах из мат статистик.
Сочетания и размещения и перестановки могут в английском звучать как permutations, combinations, combinations with repeating.
Хуже того англоязычные источники иногда тоже путают их местами.
Ответы:
Тривиально. Перебор всех комбинаций длиной M из N символов это перебор всех чисел от 0 до M^N-1, записанных в N-ричной системе. Достаточно написать функцию, которая к числу в N-ричной системе прибавляет единицу.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для создания программы, которая будет генерировать все возможные комбинации из элементов заданного набора, можно использовать рекурсивную функцию. Ниже приведен пример кода на языке программирования PHP:
function generate_combinations($elements, $k, $comb='', $start=0) {$n = count($elements);
if ($k == 0) {
echo $comb . "