2 <= n <= 100000
에 대한 n choose 2
의 모든 조합을 찾는 가장 효율적인 방법은 무엇입니까? 내가 잘못하지만 시간이 될 수n의 모든 조합을 찾는 가장 효율적인 방법 2
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_ITEMS 100000
void combinations(int[], int);
long long count = 0;
int main(void) {
int *arr = (int*) calloc(MAX_ITEMS, sizeof(int));
if (!arr) {
printf("Error allocating memory.");
exit(1);
}
int i, n = MAX_ITEMS;
for (i = 0; i < MAX_ITEMS; i++) {
arr[i] = i + 1;
}
clock_t start, diff;
int msec;
start = clock();
combinations(arr, n);
diff = clock() - start;
msec = diff * 1000/CLOCKS_PER_SEC;
printf("\n\nTime taken %d seconds %d milliseconds", msec/1000, msec % 1000);
printf("\n\nPairs = %lld\n", count);
return 0;
}
void combinations(int arr[], int n) {
int i, j, comb1, comb2, end = n - 1;
for (i = 0; i < end; i++) {
for (j = i + 1; j < n; j++) {
// simulate doing something with data at these indices
comb1 = arr[i];
comb2 = arr[j];
// printf("%d %d\n", arr[i], arr[j]);
count++;
}
}
}
OUTPUT
Time taken 28 seconds 799 milliseconds
Pairs = 4999950000
: 예를 들어
는 5 choose 2
이 내가 지금까지 최악의 경우를 테스트하기 위해이 무엇
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5
입니다 복잡성은 O (n^2)입니다.
최악의 경우를 처리하는보다 효율적인 알고리즘이 있습니까?
이 게시물을 봐야합니다. http://stackoverflow.com/questions/127704/algorithm-to-return-all-combinations-of-k-elements-from-n –
어때? (n * (n -1))/2'≤ 아니면 실제 쌍을 쫓고 있습니까? 그렇다면 O (n^2)가 최선책입니다. – aioobe
@aioobe 예, 실제 쌍이 필요합니다. – turion