Как быстро выбрать все сочетания из массива (комбинаторика)? День добрый! Стандартная задача. Есть массив [1,2,3], есть n = 2. Нужно выбрать все сочетания из массива по n. То есть должны получить: [[1,2], [1,3], [2, 3]].
Можно, конечно, пройтись циклом в цикле, но при увеличении размера массива и n вычисления будут выполняться слишком долго ввиду большого количества (> 66%) отсева ненужных сочетаний.
Таки вопрос, как грамотно это реализовать?

21 Авг 2019 в 06:10
186 +1
0
Ответы
1

Есть несколько способов решения данной задачи более эффективным способом, не используя перебор всех возможных комбинаций.

Один из способов - использовать рекурсивный подход. Можно рассматривать каждый элемент массива как "включенный" или "не включенный" в текущую комбинацию. Таким образом, можно генерировать все возможные сочетания за линейное время.

Вот пример кода на Python:

def combine(nums, n):
def backtrack(start, curr):
if len(curr) == n:
result.append(curr[:])
return
for i in range(start, len(nums)):
curr.append(nums[i])
backtrack(i + 1, curr)
curr.pop()
result = []
backtrack(0, [])
return result
nums = [1, 2, 3]
n = 2
print(combine(nums, n))

Этот код будет генерировать все сочетания из массива по n за линейное время.

20 Апр в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 89 810 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир