二进制搜索计数器未更新

时间:2018-10-06 06:18:36

标签: c binary-search

我有两个数组,一个固定的数组A和一个动态更新的数组X。我试图找到X ^ i的最大交织因子i,以使X ^ i是A的子序列。

我的X和A数组正确填充,因为我已经通过二进制搜索在每次迭代中对其进行了测试。但是,我的柜台不是。

这是我的代码:

void binary_search(int size_a, int * A, int size_x, int *X, int max_i, int min_i){

    int j, k, max_repeat = 0;

    while(min_i <= max_i){

        int i = 0, count = 0, repeats = (max_i + min_i)/2;

        printf("\n");
        int * temp = malloc(size_x * sizeof(int) * repeats);

        for(k = 0; k < size_x; ++k){
            for(j = 0; j < repeats; ++j){
                temp[k * repeats + j] = X[k];
            }
        }

        printf("New X: ");
            for(i = 0; i < size_x * repeats; i++){
                printf("%d ", temp[i]);
            }

        printf("A: ");
        for (i = 0; i < size_a; i++){
            printf("%d ", A[i]);
        }

        for(j = 0; j < size_a; j++){
            if(A[j] == temp[i]){
                count++;
                i++;
            }
        }

        printf("Count: %d", count);


        if (count >= size_x * repeats){
            printf("Low: %d Mid %d High % d Passes\n", min_i, repeats, max_i);
            min_i = repeats + 1;
            max_repeat++;
        }
        else{
            printf("Low: %d Mid %d High % d Fails\n", min_i, repeats, max_i);
            max_i = repeats - 1;
        }

        free(temp);
    }   
        printf("Max repeat: %d", max_repeat);
}

数组A = [4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1]和X = [1,2,3]最初。因此X ^ 3 = [1,1,1,2,2,2,3,3,3]。这应该会失败,因为count不是> = size_x *重复(此迭代中的count应该为5),并且确实如此,但是在每次迭代中count = 0都应该清楚地更新。我想念什么?我一直在盯着它看很长时间,所以我敢肯定这很简单。

编辑:期望值:

Low 0 Mid 3 High 6 Fails

Low 0 Mid 1 High 2 Passes

Low 2 Mid 2 High 2 Fails

实际值:

Low 0 Mid 3 High 6 Fails

Low 0 Mid 1 High 2 Fails

Low 0 Mid 0 High 0 Passes

0 个答案:

没有答案