鑑於比特v
的向量內的比特的所有序列,計算具有漢明距離1與v
比特的集合,然後用距離2,最多一個輸入參數t
。生成漢明距離t
所以對於
011 I should get
~~~
111
001
010
~~~ -> 3 choose 1 in number
101
000
110
~~~ -> 3 choose 2
100
~~~ -> 3 choose 3
如何有效地計算呢?矢量不總是維度3,例如它可能是6.這將在我的真實代碼中運行無數次,所以一些效率也會受到歡迎(即使支付更多內存)。
我嘗試:
#include <iostream>
#include <vector>
void print(const std::vector<char>& v, const int idx, const char new_bit)
{
for(size_t i = 0; i < v.size(); ++i)
if(i != idx)
std::cout << (int)v[i] << " ";
else
std::cout << (int)new_bit << " ";
std::cout << std::endl;
}
void find_near_hamming_dist(const std::vector<char>& v, const int t)
{
// if t == 1
for(size_t i = 0; i < v.size(); ++i)
{
print(v, i, v[i]^1);
}
// I would like to produce t == 2
// only after ALL the t == 1 results are reported
/* how to? */
}
int main()
{
std::vector<char> v = {0, 1, 1};
find_near_hamming_dist(v, 1);
return 0;
}
輸出:
MacBook-Pro:hammingDist gsamaras$ g++ -Wall -std=c++0x hammingDist.cpp -o ham
MacBook-Pro:hammingDist gsamaras$ ./ham
1 1 1
0 0 1
0 1 0
我[近期](http://stackoverflow.com/q/40768507/555045)已經很好地回答了這個問題,儘管你用不同的方式闡述了這個問題。 – harold
@harold是啊,因爲它有點不同! :) – gsamaras