Θ ( n )⊕
- Toplam , örneğin herhangi bir değeri için bu ve b , bir ⊕ B tanımlandığı gibidir ve aynı tipte (ya da operatörü olan bir kısmı uygun bir süper tip, en azından ⊕ hala tanımlandığı gibidir);birba ⊕ b⊕
- birleştirici , öyle ki ;a ⊕ ( b ⊕ c ) = ( a ⊕ b ) ⊕ c
- değişmeli , bu şekilde ; vea ⊕ b = b ⊕ a
- cancellative bir ters operatör vardır, öyle ki tatmin olduğu ( bir ⊕ b ) ⊖ b = bir . Teknik olarak, bu ters işlemin, her biri O ( n ) süresinden daha fazla zaman almadığı iki toplam n elemanının "çıkarılması" gerektiği sürece, sabit zaman olması gerekmez .⊖( a ⊕ b ) ⊖ b = anO ( n )
(Tür yalnızca sınırlı sayıda farklı değer alabiliyorsa, bu özellikler onu bir Abelian grubuna dönüştürmek için yeterlidir , olmasa da en azından değişmeli bir iptal grubu olacaktır .)
Bu tür bir işlem kullanılarak , biz dizi "toplamı" tanımlayabilir a = ( bir 1 , bir 2 , ... , bir n ) olarak ( ⊕⊕a=(a1,a2,…,an) Başka bir dizi göz önüne alındığında b = ( b , 1 , b 2 , ... , B , n , b , n + 1 ) , tüm elemanlarını ihtiva eden bir artı bir ilave eleman x , biz, böylece var ( ⊕
(⊕a)=a1⊕a2⊕⋯⊕an.
b=(b1,b2,…,bn,bn+1)ax , ve bu fazladan
bilgiyi hesaplayarak bulabiliriz:
x = ( ⊕(⊕b)=(⊕a)⊕xx=(⊕b)⊖(⊕a).
⊕⊖⊕⊖
Daha genel olarak, bit ucundaki XOR yöntemini değişken uzunluktaki dizgelere uygulayabiliriz, uçtaki dolguyu tersine çevirerek çıkarmak için bir yolumuz olduğu sürece bunları gerektiği kadar aynı uzunlukta geçirerek uygulayabiliriz.
Bazı durumlarda, bu önemsizdir. Örneğin, C tarzı boş bayt dizileri sonlandırılmış, kendi uzunluklarını dolaylı olarak kodlar, bu nedenle onlar için bu yöntemi uygulamak önemsizdir: iki dizeyi XORing yaparken, uzunluk eşleşmesi için kısa olanı boş baytlarla doldurun ve arkadaki boştaki boşlukları kırpın son sonuç. Ara XOR-sum dizeleri Not edebilirsiniz açıkça onların boyunu saklamak gerekir böylece boş karakter içermediğini olsa da, bayt (ama sadece birisi veya ikisi en fazla gerekir).
1001232bayt uzunluğunda, her dizenin uzunluğunu 32-bit bir tamsayı olarak kodlayabilir ve dizeye hazırlayabilirdik. Veya bazı önek kodlarını kullanarak rastgele dize uzunluklarını bile kodlayabilir ve bunları dizelere hazırlayabiliriz. Diğer olası kodlamalar da mevcuttur.
Θ(n)
Potansiyel olarak zor olan tek şey, iptali işe yaraması için, iki dizideki giriş değerlerinin verilebilmesi halinde zor olabilecek (gerçekten, potansiyel olarak hesaplama bile mümkün olmayan), her değer için benzersiz bir kanonik bit temsili temsili seçmemiz gerektiğidir. farklı eşdeğer temsillerde. Ancak bu, bu yöntemin belirgin bir zayıflığı değildir; Bu sorunun çözülmesi için herhangi başka bir yöntem de, girişin eşdeğeri belirlenemeyen değerler içermesine izin verilirse, başarısız olmak için de yapılabilir.