2016-09-08 3 views
3

Скажите, что у вас есть n предметов в диапазоне от 1 до 100. Как я могу пройти все возможные варианты в пределах диапазона?Как перебирать диапазон перестановок?

Пример:

3 stocks A, B and C 

Работа найти возможное распределение портфеля.

A - 0  0 0   1 2   1 1 
B - 0  1 2  ... 0 0 ... 1 2 
C - 100 99 98   99 98   98 97 

Ищет эффективного способа получить матрицу всех возможных исходов.

Сумма должна составлять до 100 и охватывать все возможные варианты для n элементов.

+1

Это довольно неясный вопрос ... Вы говорите, что хотите все перестановки трех чисел от 1 до 100, чтобы сумма трех равнялась 100? – mgilson

+1

@mgilson Да, это правильно. Я обновлю вопрос. Ищите эффективный способ справиться с этим. И для чисел 'n', очевидно, – JAM

+0

[проблема 3SUM] (https://en.wikipedia.org/wiki/3SUM) в варианте с ненулевой суммой? –

ответ

2

Как бы это сделать:

>>> import itertools 
>>> cp = itertools.product(range(101),repeat=3) 
>>> portfolios = list(p for p in cp if sum(p)==100) 

Но это создает ненужные комбинации. См. Обсуждения целых разделов, чтобы избежать этого. Например, Elegant Python code for Integer Partitioning

+0

Это O (N^3). Это займет миллион итераций, когда вы сможете найти решение около 5000 итераций (для N = 100). – mgilson

+2

Эффективность эффективности использования кода-кода очень велика. – Jaakko

+0

@mgilson Согласен. Вот почему я предоставил ссылку для целочисленного разбиения. – Alan

Смежные вопросы