Посчитать все возможные варианты сочетаний строк

Есть 5000 строк в массиве. Нужно перебрать все возможные варианты в ряде из 10 вариантов, при этом порядок в ряде не важен. К примеру:

1,2,3,4,5,6,7,8,9,10 = 10,9,8,6,7,5,4,3,2,1 = 8,9,10,7,6,4,5,3,1,2 - Одни и те же ряды.

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


Ответы (1 шт):

Автор решения: default locale

Количество сочетаний равно биномиальному коэффициенту С105000

С105000 = 5000! / (10! * 4990!) = 2667017604016906260066258312000 ≈ 2*1030

Навряд ли это все получится перебрать. Если перебирать по миллиарду комбинаций в секунду, то на это уйдет, по моим грубым подсчетам, 60 триллионов лет.

Если все-таки понадобится перебор сочетаний, посмотрите варианты здесь: How to iteratively generate k elements subsets from a set of size n in java?. Обратите внимание на класс Combinations из Apache Commons.

→ Ссылка