2012-04-23 21 views
5

Thành thật mà nói, tôi đang hoạt động trong các hoạt động bit.
Điều tôi quan tâm là hoạt động XOR. Vâng, tôi biết những gì nó làm bitwise, và nó được sử dụng trong mã hóa và chúng ta có thể làm trao đổi mà không có bất kỳ biến tạm thời, nhưng tôi đã quan tâm nếu có cách tiếp cận cụ thể trong các thuật toán phù hợp với các thuộc tính của XOR.
Tôi có nghĩa là tôi quan tâm đến các ứng dụng thực tế của XOR trong các thuật toán (ví dụ: chúng tôi có thể sử dụng nó để tìm phần tử duy nhất trong số các bản sao). Có một mô hình của các vấn đề (hoặc xây dựng một vấn đề) mà người ta có thể thấy rằng việc sử dụng XOR là con đường để đi? (Giống như cách sử dụng tìm kiếm nhị phân?)
Có một số danh sách các ứng dụng thực tế của XOR trên các thuật toán liên quan đến thuật toán cốt lõi, không chỉ đơn giản là sử dụng nó. để làm các hoạt động toán nhanh như chúng ta có thể sử dụng >> thay vì chia cho 2.Một số ứng dụng thực tế của XOR trong các thuật toán

Bất kỳ đầu vào được chào đón

+3

Vâng, mọi thuật toán băm khác (kể cả thuật toán không mã hóa) đều sử dụng XOR ở một nơi này hoặc địa điểm khác. Điều đó có tính hay không, hay nó vẫn "chỉ là một chút"? – delnan

+0

Tôi đã nhảy một cái gì đó dọc theo dòng cách tốt nhất để giải quyết một vấn đề. Giống như khi bạn đang cố gắng tìm duy nhất trong số các bản sao bạn có thể sử dụng một hashtable nhưng có thể làm điều đó mà không cần thêm không gian với 'XOR' kể từ khi các bản sao bị hủy bỏ – Cratylus

+5

** Một trong những câu hỏi quan trọng nhất trên web và nó đóng .... ** –

Trả lời

8

Một vài ví dụ đi kèm lên trong tâm trí tôi:

bit Toggling:

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

Một số loại ngẫu nhiên:

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

"Yếu Mã hóa ":

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

Đó là lý do tại sao tôi đã viết "yếu". –

+3

BTW, cái cuối cùng có thể được mở rộng để mã hóa văn bản thuần dễ dàng (bạn chỉ cần mã hóa). * Nếu * phím là ngẫu nhiên và miễn là đầu vào, nó thực sự là một [mật mã khá tốt] (http://en.wikipedia.org/wiki/One-time_pad) trong đó nó không thể crack (biết không chính cũng không văn bản thô). Nếu khóa ngắn hơn (và do đó lặp lại để phù hợp với chiều dài của đầu vào), nó có thể bị nứt một cách dễ dàng (tốt, dễ dàng cho một chuyên gia) - vấn đề duy nhất còn lại là tạo một pad một lần và đưa nó vào Bob. Cryptographics rất hấp dẫn. – delnan

Các vấn đề liên quan