Trong ruby, cách hiệu quả nhất để tính toán sự khác biệt bit giữa hai số nguyên không dấu (ví dụ như khoảng cách hamming) là gì?Cách hiệu quả nhất để tính toán khoảng cách hamming trong ruby?
Ví dụ, tôi có số nguyên a = 2323409845 và b = 1782647144.
đại diện nhị phân của họ là:
a = 10001010011111000110101110110101
b = 01101010010000010000100101101000
Sự khác biệt chút giữa một & b là 17 ..
tôi có thể làm một XOR hợp lý trên chúng, nhưng điều đó sẽ cho tôi một số nguyên khác! = 17, sau đó tôi sẽ phải lặp qua biểu diễn nhị phân của kết quả và kiểm đếm số của 1s.
Cách hiệu quả nhất để tính chênh lệch bit là gì?
Bây giờ, câu trả lời có thay đổi để tính toán sự khác biệt bit của các chuỗi của nhiều int không? Ví dụ. cho 2 chuỗi số nguyên không dấu:
x = {2323409845,641760420,509499086....}
y = {uint,uint,uint...}
Cách hiệu quả nhất để tính chênh lệch bit giữa hai chuỗi là gì?
Bạn có lặp lại qua chuỗi hoặc có cách nhanh hơn để tính chênh lệch trên toàn bộ chuỗi cùng một lúc không?
Cảm ơn! Tôi chỉ làm điều đó và nó có vẻ nhanh hơn 3 lần so với phương thức dưới đây (sử dụng các hàm chuỗi tối ưu của Ruby) – ch3rryc0ke
Tôi rất trễ bên này, nhưng bạn có thể muốn lấy [điểm chuẩn này] (http: // dalkescientific. com/writings/nhật ký/popcnt.cpp) cho một spin. '__builtin_popcount' là một trong những phương pháp chậm nhất nếu bạn không [sử dụng cờ biên dịch] (http://www.dalkescientific.com/writings/diary/archive/2011/11/02/faster_popcount_update.html) – x1a4