簡體   English   中英

更改漢明距離

[英]Change Hamming distance

我想找到一種方法,通過添加盡可能少的部分來更改帶二進制數的字符串之間的漢明距離。 我應該使用稀疏樹和深度優先搜索,但是我真的不知道如何使用它。

您可以使用此代碼。 如果是二進制字符串,它將計算列表中每對字符串之間的漢明距離。 如果距離小於最小閾值,則僅修改兩個字符串之一,直到達到最小距離。 這不太正確,因為修改對中的一個字符串會導致對一個字符串進行更多修改,因此更好的解決方案是先修改一個字符串,然后再修改另一個。 但是,如果您需要它,則可以修復該問題。

import Levenshtein as lv

min_distance = 3
numbers = {'1100010' ,'1001101', '1111111', '1111101', '1101001'}

for number in numbers:
    other_numbers = numbers - {number}
    for other_number in other_numbers:
        distance = lv.hamming(number, other_number)
        backup_other_number = other_number
        while lv.hamming(number, other_number) < min_distance:
            for count, (a, b) in enumerate(zip(number, other_number)):
                if a == b:
                    other_number = ''.join([
                        n if c != count else str(int(a != '1'))
                        for c, n in enumerate(other_number)
                    ])
                if lv.hamming(number, other_number) >= min_distance:
                    break
        print 'Old pair: {0}, distance: {1}'.format(
            (number, backup_other_number),
            distance
        )
        print 'New pair: {0}, distance: {1}'.format(
            (number, other_number),
            lv.hamming(number, other_number)
        )
    print '=' * 80

輸出:

(tmp)➜  ~  python hamming.py
Old pair: ('1001101', '1111101'), distance: 2
New pair: ('1001101', '0111101'), distance: 3
Old pair: ('1001101', '1111111'), distance: 3
New pair: ('1001101', '1111111'), distance: 3
Old pair: ('1001101', '1100010'), distance: 5
New pair: ('1001101', '1100010'), distance: 5
Old pair: ('1001101', '1101001'), distance: 2
New pair: ('1001101', '0101001'), distance: 3
================================================================================
Old pair: ('1111101', '1001101'), distance: 2
New pair: ('1111101', '0001101'), distance: 3
Old pair: ('1111101', '1111111'), distance: 1
New pair: ('1111101', '0011111'), distance: 3
Old pair: ('1111101', '1100010'), distance: 5
New pair: ('1111101', '1100010'), distance: 5
Old pair: ('1111101', '1101001'), distance: 2
New pair: ('1111101', '0101001'), distance: 3
================================================================================
Old pair: ('1111111', '1001101'), distance: 3
New pair: ('1111111', '1001101'), distance: 3
Old pair: ('1111111', '1111101'), distance: 1
New pair: ('1111111', '0011101'), distance: 3
Old pair: ('1111111', '1100010'), distance: 4
New pair: ('1111111', '1100010'), distance: 4
Old pair: ('1111111', '1101001'), distance: 3
New pair: ('1111111', '1101001'), distance: 3
================================================================================
Old pair: ('1100010', '1001101'), distance: 5
New pair: ('1100010', '1001101'), distance: 5
Old pair: ('1100010', '1111101'), distance: 5
New pair: ('1100010', '1111101'), distance: 5
Old pair: ('1100010', '1111111'), distance: 4
New pair: ('1100010', '1111111'), distance: 4
Old pair: ('1100010', '1101001'), distance: 3
New pair: ('1100010', '1101001'), distance: 3
================================================================================
Old pair: ('1101001', '1001101'), distance: 2
New pair: ('1101001', '0001101'), distance: 3
Old pair: ('1101001', '1111101'), distance: 2
New pair: ('1101001', '0111101'), distance: 3
Old pair: ('1101001', '1111111'), distance: 3
New pair: ('1101001', '1111111'), distance: 3
Old pair: ('1101001', '1100010'), distance: 3
New pair: ('1101001', '1100010'), distance: 3
================================================================================
(tmp)➜  ~  
(tmp)➜  ~  python hamming.py
Old pair: ('1001101', '1111101'), distance: 2
New pair: ('1001101', '0111101'), distance: 3
Old pair: ('1001101', '1111111'), distance: 3
New pair: ('1001101', '1111111'), distance: 3
Old pair: ('1001101', '1100010'), distance: 5
New pair: ('1001101', '1100010'), distance: 5
Old pair: ('1001101', '1101001'), distance: 2
New pair: ('1001101', '0101001'), distance: 3
================================================================================
Old pair: ('1111101', '1001101'), distance: 2
New pair: ('1111101', '0001101'), distance: 3
Old pair: ('1111101', '1111111'), distance: 1
New pair: ('1111101', '0011111'), distance: 3
Old pair: ('1111101', '1100010'), distance: 5
New pair: ('1111101', '1100010'), distance: 5
Old pair: ('1111101', '1101001'), distance: 2
New pair: ('1111101', '0101001'), distance: 3
================================================================================
Old pair: ('1111111', '1001101'), distance: 3
New pair: ('1111111', '1001101'), distance: 3
Old pair: ('1111111', '1111101'), distance: 1
New pair: ('1111111', '0011101'), distance: 3
Old pair: ('1111111', '1100010'), distance: 4
New pair: ('1111111', '1100010'), distance: 4
Old pair: ('1111111', '1101001'), distance: 3
New pair: ('1111111', '1101001'), distance: 3
================================================================================
Old pair: ('1100010', '1001101'), distance: 5
New pair: ('1100010', '1001101'), distance: 5
Old pair: ('1100010', '1111101'), distance: 5
New pair: ('1100010', '1111101'), distance: 5
Old pair: ('1100010', '1111111'), distance: 4
New pair: ('1100010', '1111111'), distance: 4
Old pair: ('1100010', '1101001'), distance: 3
New pair: ('1100010', '1101001'), distance: 3
================================================================================
Old pair: ('1101001', '1001101'), distance: 2
New pair: ('1101001', '0001101'), distance: 3
Old pair: ('1101001', '1111101'), distance: 2
New pair: ('1101001', '0111101'), distance: 3
Old pair: ('1101001', '1111111'), distance: 3
New pair: ('1101001', '1111111'), distance: 3
Old pair: ('1101001', '1100010'), distance: 3
New pair: ('1101001', '1100010'), distance: 3
================================================================================

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM