Dengeli vektörlerin hızlı kodlanması


10

Herhangi bir için {0,1} ila {0,1} arasında 1-1 eşlemesi olduğunu görmek kolaydır, böylece herhangi bir için vektörü "dengeli" dir, yani eşit sayıda 1 ve 0'dır. Böyle bir tanımlamak mümkün mü, böylece verildiğinde etkili bir şekilde hesaplayabiliyoruz ?nFnn+O(log⁡n)xF(x)FxF(x)

Teşekkürler.


'Verimli' ile O (n) ya da etrafındaki anlamına geldiğini, "tekrarlanan rastgele denemeler" argümanını dışladığınızı varsayıyorum?
— Suresh Venkat

@Suresh, "Tekrarlanan rastgele denemeler" argümanını çizebilir misiniz?
— Emil

Haritalamanın var olduğunu kanıtlamanın bir yolu olasılıklı yöntemdir: F'yi rastgele seçin ve ardından haritalama bazı olasılıklarla çalışır. demek istediğim şey o.
— Suresh Venkat

1
Soru mükemmel bir şekilde tanımlanmış, ancak bence, başlık yanıltıcı. F iki yönlü olmadığı sürece, belirtilen koşulu karşılayan bir eşleme F'yi “dengeli vektörlerin kodlanması” olarak adlandırmam. Daha bir n-bit dizgisinin kodlama gibi göre dengeli bir vektör.
— Tsuyoshi Ito

“Çok iyi tanımlanmış” ve muhtemelen “verimli” olarak farklı yorumlara kadar. Ama bu benim önceki yorumumun konusu değil.
— Tsuyoshi Ito

Yanıtlar:


12

bit dizeleri ele alalım . Tanımlar:nx

  • f(x,i) = son bitleri tamamlanmış olarak bit dizesi .xi
  • b(x) = arasında "dengesizlik" : içinde 1 sayısı, x - de 0 ların sayısı x .xx −x

Şimdi dizesini düzeltin . G ( i ) = b ( f ( x , i ) ) işlevini düşünün . Gözlemler:xg(i)=b(f(x,i))

  • .g(0)=b(x)
  • .g(n)=−g(0)
  • Tüm i için = 2 . Ya bir 0'ı kaldırırız ve bir 1 ekleriz ya da tam tersini yaparız.|g(i)−g(i+1)|=2i

Şimdi şöyle bir var - 1 ≤ g ( i ) ≤ + 1 .i−1≤g(i)≤+1

Bu nedenle, aşağıdaki gibi bir -bit dizesi y oluşturabiliriz : f ( x , i ) ve i indeksinin ikili kodlamasını birleştirin . Dengesizlik mutlak değeri y olan O ( log n ) . Dahası, y verilen x'i kurtarabiliriz ; haritalama iki yönlüdür.(n+O(log⁡n))yf(x,i)iyO(log⁡n)xy

Son olarak, ekleyebilir arasında dengesizliği azaltmak bit taklit y ile ilgili O ( log n ) için , 0 .O(log⁡n)yO(log⁡n)0


3. satırdaki b (x), b (y) olmalıdır.
— Emil

Ben muhtemelen (hatta g (i) bazı i için sıfır olduğundan emin olabilirsiniz) uzunluğunu sağlamak için dizeye x başka bir bit eklemek gerektiğini düşünüyorum.
— Emil

@Emil: Bazı i için nin sıfır olduğunu iddia etmiyorum ; g ( i ) ' nin mutlak değerinin bazı i için "oldukça küçük" olması yeterlidir (en çok logaritmik yeterli olacaktır, ancak bazı i için en fazla 1 olacağını göstermek kolaydır ). g(i)ig(i)i1i
— Jukka Suomela

@Jukka: Ah evet anlıyorum.
— Emil

1
Ama evet, haklısın, aynı temel yaklaşımın birçok çeşidi var. Örneğin, önerdiğiniz gibi, önce nin bazı i için eşit sıfır olmasını sağlamak için bir dolgu biti kullanabilirsiniz ; daha sonra kodlayabilir i bit çiftleri kullanılarak 01 veya 10 , yani 2 log ( n ) ilave uçları; birleştirmenin sonucu kesinlikle dengelidir ve başka bir şey eklemenize gerek yoktur. g(i)ii01102log⁡(n)
— Jukka Suomela

9

Sözcük bilgisi sırasını koruyan eşlemeyi kullanın. N / 2 1'lerle uzunluk- n dengeli vektörü bulmak için , yinelemeli olarak yapın: eğer k ≤ ( n - 1knn/2, sonra ilk bit 0'ı ayarlayın ve sonrakalann-1bitlerinitamamlamak içinn/21'lerlek-uzunluk-(n-1)vektörünübulun. Aksi takdirde ilk biti 1 ayarlayın vek-(n-1'ibulunk≤(n−1n/2)k(n−1)n/2n−1'inci uzunluk-(n-1)ile birlikte vektör, n/2-11' s.k−(n−1n/2)(n−1)n/2−1


1
Ve bir sonraki gerekli binom katsayısını hesaplamak için bir binom katsayısının değerini yeniden kullanırsanız, tüm algoritma O (n) zamanında çalışır.
— Tsuyoshi Ito

Teşekkürler! Bu mantıklı. Sanırım çalışma süresi hesaplama modeline bağlı olacaktır. Birim zamanda n-bit sayıları üzerinde işlem yapabiliyorsanız, Tsuyoshi Ito'nun uygulaması O (n) zamanında çalışacaktır. Öte yandan, bit işlemlerini sayarsanız, zaman O (n ^ 2) olacaktır, sanırım.
— Piotr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.