Maddeleri bulmak için karşılaştırma tabanlı veri yapısı


34

Sırasız bir nn öğesi dizisi alan , ön işleme yapan ve sorguları cevaplayan bir veri yapısı var mı : Listede bazı öğeleri var , her sorguda en kötü mı?O ( n ) x O ( log n )O(n)xO(logn)

Gerçekten olmadığını düşünüyorum, bu yüzden hiçbirinin olmadığı bir kanıtı da memnuniyetle karşılanmaktadır.


3
(1) “Elbette beklenen süreyi düşündüm” diyebildiğinizi bilmiyorum, çünkü sorunuzda “beklenen” ifadesini kullanmıyorsunuz. Lütfen “elbette” demeden önce sorunuzu daha kesin bir şekilde belirtmeye çalışın. (2) Lütfen “kayda değer olmayan” ifadesini tanımlayın
Tsuyoshi Ito

2
(1) görüyorum. Açıklama için teşekkürler. Birisi “Çalışma zamanını önemsiyor musun?” Diye sorduysa, o zaman cevap gerçekten “elbette” olacaktır. :) (2) “İzin verilen tek eylem listedeki iki değeri karşılaştırmaktır” olduğunu düşünüyorum. sadece “yıkanamaz” ifadesinden bahsettikten sonra soruyu düzenleyebilir misiniz? Böylece insanlar “zararsız” ın ne anlama geldiğini anlamak için yorumları okumak zorunda kalmazlar mı?
Tsuyoshi Ito

3
Bu arada, bunu ispatlayamazsan, neden imkansız olduğunu biliyorsun? Bir ders kitabındaki veya sınıftaki bir alıştırma ise, yanlış bir web sitesinde soruyorsunuz.
Tsuyoshi Ito

6
Sorunuz mu: Sırasız bir n öğesi dizisi alan, O (n) 'de ön işleme uygulayan ve sorguları cevaplayan bir veri yapısı var mı: Listede bir miktar x var, her sorgu en kötü zamanda O (log n)?
sdcvvc

2
@Filip: Görmesi kolay mı? Eğer doğruysa, o zaman sorunu çözeceği konusunda hemfikirim.
Tsuyoshi Ito

Yanıtlar:


30

İşte imkansız olduğuna dair bir kanıt. Böyle bir veri yapısı oluşturabileceğinizi varsayalım. İnşa et. Sonra seçim n / log nn / logn , listeden rastgele öğeler eklemek εε nerede bunların her birine εε listede herhangi iki öğe arasındaki farktan daha küçüktür ve ortaya çıkan üründe herhangi olup olmadığını kontrol etmek sorguları gerçekleştirmek liste. Şimdiye kadar O ( n )O ( n ) sorguları yaptınız .

Ben yaptın karşılaştırmalar bir öğe olup olmadığını söylemek için yeterli olduğunu iddia etmek istiyorum bir orijinal listedeki herhangi bir yeni madde daha küçüktür veya büyüktür b . Söyleyemediğini varsayalım. Bu bir karşılaştırma tabanlı modeldir çünkü Ardından, ister bilemeyiz bir eşit olduğunu b veya değil, veri yapısı eserlerin varsayımına bir çelişki.birbbirb

Şimdi bu yana, n / log n seçtiğiniz ürün rastgele, üzerinde sizin karşılaştırmalar içine orijinal listeyi bölmek için, büyük ihtimalle yeterli bilgilerle sahip n / log n listeleri boyutu her O ( log n ) . Bu listelerin her birini sıralayarak, yalnızca karşılaştırmalara dayanan, bir çelişkiden oluşan randomize bir O ( n log log n ) -time sıralama algoritması elde edersiniz .n / lognn/lognO(logn)O(nloglogn)


Kanıtın anlaşılmasına yardımcı olacak birkaç ipucu (elbette kendim de doğru anladığımı varsayarak): b maddeleri ϵ eklendikten sonra, maddeler tarafından doldurulmalıdır ; karşılaştırma modeli garantileri Bildiğiniz vakaların hangi bir b ve a b tutar; n / günlük n listeler 'düzeni artan' içindedir: herhangi bir yüksek listedeki her eleman bir alt listedeki her eleman daha yüksektir; Orijinal soruların ardından rastgele seçtiğiniz öğelerin etrafındaki listeleri yapmak için yeterli bilgiye sahipsiniz,bϵababn/logn
Alex ten Brink

(devam), kanıtın tutulması için verilen sürede listeyi açıkça oluşturabilmeniz bile gerekmediğini unutmayın.
Alex ten Brink

Bu kanıtı sessizce anlamıyorum. Nihai çelişki "sadece karşılaştırmalar dayalı algoritma" kapalı, ama bizim algoritmanın ilk adımda eklediğimiz ε ( "ayrıca, her öğeye ε listedeki herhangi iki öğe arasındaki farktan daha küçüktür"). Neden algoritmamızın hala sadece karşılaştırmalı olarak kaleme alındığını varsayalım. ϵϵ
Artem Kaznatcheev

5
@Artem: Orijinal girişiniz x X öğelerinden oluşur . Sonra yeni bir küme oluşturursunuz X = X × { 0 , 1 } ; Temsil Özgün x X olarak ( x , 0 ) X ' ve bir tadil edilmiş X + ε olarak ( x , 1 ) X ' . Şimdi kara kutu algoritmasını kullanıyorsunuz; Algoritma elemanlarını karşılaştırır X 'xXX=X×{0,1}xX(x,0)Xx+ϵ(x,1)XXbirbirlerine; Bu tür soruları cevaplamak için, yalnızca sabit sayıda X elementini birbiriyle karşılaştırmanız yeterlidir . Dolayısıyla karşılaştırma modelinde her şey sabit bir ek yük ile yapılabilir. X
Jukka Suomela

1
@ Aryabhata: öyle. Nedir Ç ( log 2 n ) algoritması? O ( log2n )
Peter Shor

24

Burada O ( n ) ön işlemeli bir O ( log k n ) sorgu süresi yapısının imkansızlığını kanıtlayan farklı bir kanıt olduğuna inanıyorum .O ( logkn )O ( n )

Ön işleme sırasında kısmi bir sıraya yol açan O ( n ) karşılaştırmalarını yaptığınızı varsayalım .O ( n )

Şimdi, içindeki en büyük antichainin A boyutunu düşünün . Bu elemanlar karşılaştırılabilir olmadığından, bir O ( log k n ) sorgu algoritmasına sahip olmamız için, A = O ( log k n ) olmalı .birO ( logkn )A = O ( logkn )

Şimdi Dilworth teoremine göre, A büyüklüğünün zincirler halinde bir bölümü var .bir

Şimdi bölümdeki zincirleri belirlemek için algoritmayı tamamlayabiliriz. Yönlendirilmiş bir karşılaştırma grafiği oluşturarak ve ulaşılabilirlik analizi yaparak iki unsurun karşılaştırılabilir olup olmadığını belirleyebiliriz. Bu herhangi bir ek karşılaştırma yapılmadan yapılabilir. Şimdi sadece kaba bir zincir olup olmadığına karar vermek için A boyutunun her olası bölümünü zorlayın .bir

Zincirlere sahip olduktan sonra , tüm listeyi sıralamak için O ( n log log n ) karşılaştırma algoritması verecek şekilde birleştirebiliriz .O (ngünlüğügünlükn )


1
Bu güzel bir fikir. Ve eğer zincir bölümünün algoritma tarafından bilinmesi gerektiğini gösterebilirseniz, o zaman bütün girişi sıralamak için Jensen kullanmak yerine sadece ek bir O (n log log n) karşılaştırması alacağını göstermek için mergesort kullanabilirsiniz. Ancak bir sorun var: Ön işleme algoritması neden bir zincir bölüm oluşturmalıdır? Bir zincir bölüm var olmalı, evet, fakat algoritma tarafından bilinenden çok farklı.
David Eppstein

8
Tamam, şimdi bu kanıtı inanıyorum. Ayrıca, pollog sorgulama zamanını elde etmek için, O ( n log log n ) sıralamada yer alan bir dizi karşılaştırma kullanmanız gerektiğini gösterir . Güzel. Bu arada, zincir bölümü polinom zamanında, kaba kuvvet araştırmasına ihtiyaç duymak yerine, daha önce yapılmış bir dizi karşılaştırmadan bulunabilir, ancak bu sizin argümanınız için bir fark yaratmaz. O ( n günlüğügünlükn )
David Eppstein

6
Kanıtlar aslında her sorgu için Ω ( n log n ) ön işleme veya Ω ( n ) olması gerektiğini gösterir . Tabii ki ikisi de sıkı. Bu, ikili arama ve doğrusal aramanın sadece "ilginç" arama algoritmaları olduğunu (en azından klasik dünyada) göstermektedir. Ω ( n günlüğün )Ω ( n )
Yuval Filmus

1
@Yuval: belki de bu gözlemi gerçek bir cevap olarak yazmalısınız, çünkü bana cevaplardan çıkan kanıtlardan yukarıdaki sonucu almak için makul miktarda çalışma yapmanız gerekiyor.
Peter Shor

1
@Yuval: delilleri düşünme, sadece ya olmalıdır görüyoruz Q'dan ( n log n ) ön işleme ya Ω ( n 1 - ε ) herkes için sorgu zamanı £ değerinin . Bu olması mümkündür o ( n log n ) ön işleme süresi ve O ( n / log n ) sorgu zaman. Bir içine listesini bölebilirsiniz günlüğüne n boyutu listeleri n / log n zaman içinde her İçeride ISTV melerin RWMAIWi'nin ( nΩ ( n günlüğün )Ω ( n1 - ϵ)εo ( n günlüğün )O ( n / logn )günlüknn / lognlog log n ) tekrarlanan medyan bulma kullanarak. θ ( n günlüğügünlükn )
Peter Shor

0

Peter Shor'ın cevabının belirttiği gibi, karşılaştırmaya dayalı bir modelde üyeliği dışlamak için, öğenin her üyeyle nasıl karşılaştırılacağını bilmemiz gerekir. Bu nedenle, k < n rasgele sorguları kullanarak (sorgulanan üye olmayandan daha küçük üye sayısı rastgeledir), n sıralanmamış değerlere sahip olduğuna göre Θ ( n log k ) bilgisi elde ederiz . Bu nedenle, bazı sabiti c > 0 , kullanılarak Ck < nΘ (ngünlüğük )nc > 0n log k preprocesssing, biz olamazccn günlüğükn günlüğü k / k sorgu maliyeti. Bu, veri sıralamak çünkü sabit bir katsayı için en uygun kadar k ' = K / günlük k n / log n, içinde (sıralanmamış her kova) yaklaşık olarak eşit kepçeler O ( n log k ' ) = O ( n, log k ) O ( n / k ) sorgu maliyetineizin veren zamandır.cn günlüğük / kk'=k/logkn/lognO(nlogk)=O(nlogk)O(n/k)

Özellikle O ( n ) ön işleme, o ( n ) sorgu maliyetinesahip olamayız. Aynı zamanda, o ( n- log n ) ön işleme tekabül etmek k olarak O ( n, ε ) her için £ değerinin > 0 ve böylece Ω ( n 1 - ε ) sorgu maliyet.O(n)o(n)o(nlogn)kO(nε)ε>0

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.