En ruby, ¿cuál es la forma más eficiente de calcular la diferencia de bits entre dos enteros sin signo (por ejemplo, la distancia hamming)?¿La manera más eficiente de calcular la distancia de hamming en ruby?
Ej, tengo número entero a = 2323409845 y b = 1782647144.
Sus representaciones binarias son:
a = 10001010011111000110101110110101
b = 01101010010000010000100101101000
La diferencia poco entre la una & b es 17 ..
I puede hacer un XOR lógico en ellos, pero eso me dará un entero diferente! = 17, entonces tendría que iterar a través de la representación binaria del resultado y contar el número de 1s.
¿Cuál es la forma más eficiente de calcular la diferencia de bit?
Ahora, ¿cambia la respuesta para calcular la diferencia de bit de las secuencias de muchas ints? P.ej. dado 2 secuencias de enteros sin signo:
x = {2323409845,641760420,509499086....}
y = {uint,uint,uint...}
¿Cuál es la forma más eficiente para calcular la diferencia poco entre las dos secuencias?
¿Podrías repetir la secuencia, o hay una forma más rápida de calcular la diferencia a lo largo de toda la secuencia a la vez?
Gracias! Acabo de hacer eso y parece ser 3 veces más rápido que el método a continuación (usando las funciones de cadena optimizadas de Ruby) – ch3rryc0ke
Llego muy tarde a esta fiesta, pero es posible que desee tomar [este punto de referencia de la cuenta] (http: // dalkescientific. com/writings/diary/popcnt.cpp) para un giro. '__builtin_popcount' es uno de los métodos más lentos si no lo usa [use una bandera de compilación] (http://www.dalkescientific.com/writings/diary/archive/2011/11/02/faster_popcount_update.html) – x1a4