2012-04-23 8 views
5

Szczerze mówiąc jestem zardzewiały w operacjach bitowych.
Co mnie interesuje, to operacja XOR. Cóż, wiem, co robi bitowe i że jest on używany w szyfrowaniu i że możemy wykonać zamianę bez jakiejkolwiek zmiennej tymczasowej, ale byłem zainteresowany, jeśli istnieją specyficzne podejścia w algorytmach, które pasują do właściwości XOR.
Mam na myśli praktyczne zastosowania XOR w algorytmach (np. Możemy użyć go do znalezienia unikalnego elementu wśród duplikatów). Czy istnieje wzorzec problemów (lub sformułowanie problemu), że można zauważyć, że używanie drogi XOR jest drogą do zrobienia? (Tak samo jak istnieje wzorzec, kiedy należy użyć wyszukiwania binarnego?)
Czy istnieje lista praktycznych zastosowań XOR w algorytmach związanych z algorytmem podstawowym, a nie po prostu z niego korzystać, np. robić operacje matematyczne szybciej jak możemy użyć >> zamiast podzielić przez 2.Jakie są praktyczne zastosowania XOR w algorytmach

Każde wejście jest mile widziany

+3

Cóż, każdy inny algorytm mieszający (w tym nie kryptograficzny) wykorzystuje XOR w jednym miejscu lub innym. Czy to się liczy, czy nadal jest "po prostu bitfiddlingiem"? – delnan

+0

Podskakiwałam na linii najlepszego sposobu na rozwiązanie problemu. Podobnie jak wtedy, gdy próbujesz znaleźć unikatowe wśród duplikatów, możesz użyć hashtable, ale możesz zrobić to bez dodatkowej przestrzeni z 'XOR', ponieważ duplikaty są anulowane – Cratylus

+5

** Jedno z najważniejszych pytań w sieci i jest zamknięte .... ** –

Odpowiedz

8

kilka przykładów, które pojawiły się w mojej głowie:

Przełączanie bitów:

int i = 123; 
i ^= (1 << 4); // toggle bit 5 

Jakiś przypadkowości:

int i = 123; 
for (int k = 0; k < 100; k++) 
{ 
    i = i^(i << 1) + i; 
    System.out.println(i); 
} 

„Weak Szyfrowanie ":

int b = 235321; 
int key = 24552; 
int encrypted = b^key; 
int decrypted = encrypted^key; // equals 235321 
+0

Dlatego właśnie napisałem "słaby". –

+3

BTW, ostatnią z nich można rozszerzyć do łatwego szyfrowania zwykłego tekstu (wystarczy kodowanie). * Jeśli * klucz jest losowy i tak długo jak dane wejściowe, jest to właściwie [całkiem dobry szyfr] (http://en.wikipedia.org/wiki/One-time_pad) w tym sensie, że nie da się go złamać (nie znając ani klucza, ani zwykły tekst). Jeśli klucz jest krótszy (i dlatego powtarzany, aby dopasować długość wejścia), może być łatwo złamany (dobrze, łatwo dla eksperta) - jedyny pozostały problem polega na utworzeniu jednorazowej podkładki i dostarczeniu jej do Boba. Kryptografia jest fascynująca. – delnan