저는 C (n, k) 조합을 계산하고 n과 k 사이에 큰 차이가있는 프로그램을 작성하고 있습니다 (예 : n = 39, k = 13 -> 8122425444 조합). 또한 모든 조합을 실시간으로 계산할 필요가 있습니다. 문제는 내 알고리즘을 여러 스레드로 나눠서 더 빠르게 만들 수 있다는 것입니다.조합 알고리즘 병렬화
public void getCombinations(List<Item> items) {
int n = items.size();
int k = 13;
int[] res = new int[k];
for (int i = 1; i <= k; i++) {
res[i - 1] = i;
}
int p = k;
while (p >= 1) {
//here I make a Set from items in List by ids in res[]
Set<Item> cards = convert(res, items);
//some calculations
if (res[k - 1] == n) {
p--;
} else {
p = k;
}
if (p >= 1) {
for (int i = k; i >= p; i--) {
res[i - 1] = res[p - 1] + i - p + 1;
}
}
}
}
private Set<Item> convert(int[] res, List<Item> items) {
Set<Item> set = new TreeSet<Item>();
for (int i : res) {
set.add(items.get(i - 1));
}
return set;
}
당신은 http://codereview.stackexchange.com/ –
내가 왜 모든 조합을 얻을 싶어 물어 봐도 시도 할 수 있습니다? 그들 모두와 무언가를 할거야? 아니면 나중에 무작위로 선택하고 싶습니까? 당신이 달성하고자하는 것에 대해 좀 더 많은 정보를 제공 할 수 있다면, 아마도 더 나은 답변을 얻을 수있을 것입니다. – amit