W rubinowym, jaki jest najskuteczniejszy sposób obliczenia różnicy bitowej między dwiema liczbami całkowitymi bez znaku (np. Odległość Hamminga)?Najbardziej skuteczny sposób obliczania odległości Hamminga w Ruby?
przykład mam całkowitą 2323409845 A = B = 1782647144.
ich reprezentacje binarne:
a = 10001010011111000110101110110101
b = 01101010010000010000100101101000
Różnica nieco pomiędzy A & b wynosi 17 ..
I potrafię zrobić logiczny XOR na nich, ale to da mi inną liczbę całkowitą! = 17, musiałbym wtedy iterować przez binarną reprezentację wyniku i porównać # z 1s.
Jaki jest najskuteczniejszy sposób obliczenia różnicy bitowej?
Teraz, czy odpowiedź zmienia się w celu obliczenia różnicy bitów sekwencji wielu int? Na przykład. podano 2 sekwencje liczb całkowitych bez znaku:
x = {2323409845,641760420,509499086....}
y = {uint,uint,uint...}
Jaki jest najbardziej efektywny sposób obliczenia różnicy bitów między dwiema sekwencjami?
Czy dokonałbyś iteracji w sekwencji, czy też istnieje szybszy sposób obliczenia różnicy w całej sekwencji naraz?
Dzięki! Właśnie to zrobiłem i wydaje mi się, że jest 3 razy szybsze niż poniższa metoda (używając zoptymalizowanych funkcji ciągów Ruby). – ch3rryc0ke
Spóźniłem się na tę imprezę, ale możesz wziąć [ten benchmark popkonta] (http: // dalkescientific. com/writings/diary/popcnt.cpp) do spinowania. '__builtin_popcount' jest jedną z najwolniejszych metod, jeśli nie [używasz flagi kompilacji] (http://www.dalkescientific.com/writings/diary/archive/2011/11/02/faster_popcount_update.html) – x1a4