Chuỗi sau đây của tôi đã cố gắng tìm sự khác biệt giữa hai chuỗi. Nhưng nó chậm khủng khiếp vì nó lặp lại độ dài của chuỗi:Hoạt động bit để tìm sự khác biệt về chuỗi
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int hd(string s1, string s2) {
// hd stands for "Hamming Distance"
int dif = 0;
for (unsigned i = 0; i < s1.size(); i++) {
string b1 = s1.substr(i,1);
string b2 = s2.substr(i,1);
if (b1 != b2) {
dif++;
}
}
return dif;
}
int main() {
string string1 = "AAAAA";
string string2 = "ATATT";
string string3 = "AAAAA";
int theHD12 = hd(string1,string2);
cout << theHD12 << endl;
int theHD13 = hd(string1,string3);
cout << theHD13 << endl;
}
Có cách nào thay thế nhanh không? Trong Perl, chúng tôi có thể có cách tiếp cận sau:
sub hd {
return ($_[0]^$_[1]) =~ tr/\001-\255//;
}
nhanh hơn nhiều so với lặp lại vị trí.
Tôi tự hỏi điều gì tương đương với nó trong C++?
Jeez, không có thắc mắc đó là chậm, khi bạn đang phân bổ chuỗi mới chỉ để giữ duy nhất 'char' bạn có thể nhận được từ 'toán tử []', tại mỗi và mọi chỉ mục. –