Generate all sequences of bits within Hamming distance t

后端 未结 4 1537
春和景丽
春和景丽 2020-12-04 03:22

Given a vector of bits v, compute the collection of bits that have Hamming distance 1 with v, then with distance 2, up to an input paramet

4条回答
  •  北荒
    北荒 (楼主)
    2020-12-04 03:38

    #include 
    #include 
    #include 
    
    void magic(char* str, int i, int changesLeft) {
            if (changesLeft == 0) {
                    printf("%s\n", str);
                    return;
            }
            if (i < 0) return;
            // flip current bit
            str[i] = str[i] == '0' ? '1' : '0';
            magic(str, i-1, changesLeft-1);
            // or don't flip it (flip it again to undo)
            str[i] = str[i] == '0' ? '1' : '0';
            magic(str, i-1, changesLeft);
    }
    
    int main(void) {
            char str[] = "011";
            printf("%s\n", str);
            size_t len = strlen(str);
            size_t maxDistance = len;
            for (size_t i = 1 ; i <= maxDistance ; ++i) {
                    printf("Computing for distance %d\n", i);
                    magic(str, len-1, i);
                    printf("----------------\n");
            }
            return 0;
    }
    

    Output:

    MacBook-Pro:hammingDist gsamaras$ nano kastrinis.cpp
    MacBook-Pro:hammingDist gsamaras$ g++ -Wall kastrinis.cpp 
    MacBook-Pro:hammingDist gsamaras$ ./a.out 
    011
    Computing for distance 1
    010
    001
    111
    ----------------
    Computing for distance 2
    000
    110
    101
    ----------------
    Computing for distance 3
    100
    ----------------
    

提交回复
热议问题