Bir dizi sayı düzensiz çiftlerinin sayısı olan , N ( N + 1 ) / 2 . Sıralanmamış çiftlerinin sayısı farklı sayı olduğu N ( N - 1 ) / 2 . Bu alan 2 log 2 ( K ) = log 2 ( K 2 ) bir sıralı sayı çift temsil etmek için bitleri ve bir daha az bit varsa, up to arasında bir boşluk elemanlarını ifade edebilir N 2 / 2NN(N+1)/2N(N−1)/22log2(N)=log2(N2)N2/2. Sırasıyla zorunlu olmayan farklı çiftlerin sayısı, sipariş edilen çiftlerin yarısından biraz fazladır, bu nedenle gösterimde biraz tasarruf edemezsiniz; sıralanmamış farklı çiftlerin sayısı yarıdan biraz daha azdır, böylece biraz tasarruf edebilirsiniz.
Hesaplaması kolay olan pratik bir şema için, 2 gücü olduğu için, bitsel sunum üzerinde çalışabilirsiniz. Al bir = X ⊕ y ⊕ operatör (özel veya bit) XOR. { X , y } çifti ( a , x ) veya ( a , y ) ' den kurtarılabilir . Şimdi ikinci kısımda bir bit kaydetmek için bir numara arayacağız ve x ve y'ye simetrik bir rol vereceğizNa=x⊕y⊕{x,y}(a,x)(a,y)xyböylece sipariş geri alınamaz. Yukarıdaki kardinalite hesaplaması göz önüne alındığında, bu şemanın olduğu durumda çalışmayacağını biliyoruz .x=y
Eğer sonra ihtilafa bazı bit konum yoktur. I yazacaksýn x i için i inci bit x (yani X = Σ i x i 2 i için benzer şekilde), ve y . Let k en küçük bit pozisyon almak x ve y farklıdır: k küçüğüdür i öyle ki x i ≠ y i . k en küçük i'dir, öyle ki bir i =x≠yxiixx=∑ixi2iykxykixi≠yikiai=1kabxykb=∑i<kxi2i+∑i>kxi2i−1b=∑i<kyi2i+∑i>kyi2i−1xxk=0yk=1yxk=1yk=0(a,b)abxya
aaralığın yarısı olan herhangi bir sayı olabilir. Bu bir sağlık kontrolüdür: tam olarak sırasız çiftlerin beklenen sayıda temsilini alıyoruz.
Pseudocode ile ^
, &
, |
, <<
, >>
, ~
olmak C benzeri bit operatörleri (XOR ve ya da sol-kaydırma, sağa kaydırma, tamamlayıcı):
encode(x, y) =
let a = x ^ y
let k = lowest_set_bit_position(a)
let low_mask = (1 << k) - 1
let z = if x & (1 << k) = 0 then x else y
return (a, (z & low_mask) | (z & ~low_mask) >> 1)
decode(a, b) =
let k = lowest_set_bit_position(a)
let low_mask = (1 << k) - 1
let x = (b & low_mask) | ((b & ~low_mask) << 1)
return (x, a ^ x)