Я работаю над головоломкой, которая включает в себя анализ всех подмножеств k размера и выяснение того, какой из них оптимален. Я написал решение, которое работает, когда число подмножеств невелико, но для больших проблем у него не хватает памяти. Теперь я пытаюсь перевести итеративную функцию, написанную на языке python, в java, чтобы я мог анализировать каждый поднабор по мере его создания и получать только значение, которое представляет, насколько оно оптимизировано, а не весь набор, так что я не буду исчерпывать Память. Вот что я до сих пор, и он, похоже, не заканчивается даже для очень маленьких проблем:
public static LinkedList<LinkedList<Integer>> getSets(int k, LinkedList<Integer> set)
{
int N = set.size();
int maxsets = nCr(N, k);
LinkedList<LinkedList<Integer>> toRet = new LinkedList<LinkedList<Integer>>();
int remains, thresh;
LinkedList<Integer> newset;
for (int i=0; i<maxsets; i++)
{
remains = k;
newset = new LinkedList<Integer>();
for (int val=1; val<=N; val++)
{
if (remains==0)
break;
thresh = nCr(N-val, remains-1);
if (i < thresh)
{
newset.add(set.get(val-1));
remains --;
}
else
{
i -= thresh;
}
}
toRet.add(newset);
}
return toRet;
}
Может ли кто-нибудь помочь мне отладить эту функцию или предложить другой алгоритм для итеративного создания подмножеств k размера?
EDIT: я, наконец, получил эту функцию, мне пришлось создать новую переменную, которая была такой же, как я, чтобы выполнить сравнение я и thresh, потому что python обрабатывает индексы цикла по-разному.