Optimizing subset sum implementation

后端 未结 3 1946
一向
一向 2020-12-11 13:58

I\'m working on a solution to a variant of the subset sum problem, using the below code. The problem entails generating subsets of 11 ints from a larger set (superset) and c

3条回答
  •  旧巷少年郎
    2020-12-11 14:14

    One way to only generate unique subsets is to add the elements from the superset in order, and use an additional argument to permute (eg. supersetPos) to indicate where you are in the superset. This generates sorted permutations which will be unique.

    EDIT: Code that AFAIK runs correctly on your sample:

    #include 
    
    int superset[] = {
     1, 30, 10, 7, 11,
     27, 3, 5, 6, 50,
     45, 32, 25, 67, 13,
     37, 19, 52, 18, 9
    };
    int supersetsize = 20;
    int endsum = 110;
    int done = 0;
    
    int sumOfArray(int array[]) {
      int sum = 0;
      for(int i = 0; i < 11; i++)
          sum += array[i];
      return sum;
    }
    
    void permute(int subset[], int pos, int sspos) {
    
        if (pos == 11) { //is the current subset 11 ints long?
            if (sumOfArray(subset) == endsum) { //if the sum of the array matches the wanted sum, print
                for (int j=0; j<11; j++) {
                    printf("%d ",subset[j]);
                }
                printf("\n");
                done = 1;
            }
            return;
        }
        for (int i=sspos; i

提交回复
热议问题