Код для подбора всех комбинаций?

Ссылка скопирована
1 ответ

Я пытаюсь найти(сделать) код для подбора всех комбинаций в массиве
Я нашел вот этот пример

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-ричной системе прибавляет единицу.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Дмитрий К. Ответ

Для создания программы, которая будет генерировать все возможные комбинации из элементов заданного набора, можно использовать рекурсивную функцию. Ниже приведен пример кода на языке программирования PHP:

function generate_combinations($elements, $k, $comb='', $start=0) {
$n = count($elements);

if ($k == 0) {
echo $comb . "

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно