Bir dizinin diğerinin sıralı bir sürümü olup olmadığını kontrol etmek için deterministik doğrusal zaman algoritması


19

Aşağıdaki sorunu düşünün:

Giriş: uzunluğunda iki ve dizisi , burada sıralanmış düzendedir.B n BABnB

Sorgu: do ve (kendi çokluğu ile) aynı öğeleri içerir?BAB

Bu sorun için en hızlı deterministik algoritma nedir ?
Bunları sıralamaktan daha hızlı çözülebilir mi? Bu problem deterministik lineer zamanda çözülebilir mi?


1
FWIW olasılıklı yaklaşım, sıradan bağımsız bir hash fonksiyonu ile hash etmektir. Carter ve Wegman bu makaledeki orijinal makalelerden birini ( sciencedirect.com/science/article/pii/0022000081900337 ) yazdılar , ancak o makalenin alıntılarında belirleyici bir algoritma (şimdiye kadar) öneren bir şey görmedim.
KWillets

1
Alıntı yaptığınız açıklama sadece teorik ilgi alanı olan Turing makine modeli hakkında. Algoritmalar genellikle RAM modeline göre analiz edilir.
Yuval Filmus

ah, o zaman aradığım model bu. Soruyu ayarladım.
Albert Hendriks

Neden sadece dizideki öğeleri toplayıp toplamı karşılaştırmıyorsunuz? Başlığınıza gelince, lineerdir ve 'bir dizi diğerinin sıralı versiyonu mu? '. Turing makinesi modeli değil, pratik bir çözüm olduğunun farkındayım.
atayenel

1
@AlbertHendriks Bir Turing makinesindeki içindeki bir diziyi sıralayamazsınız (büyük olasılıkla) . SAT üzerindeki bazı düşük sınırlar (örn. Cs.cmu.edu/~ryanw/automated-lbs.pdf ) aslında RAM makinesi için, yanıltıcı önceki yorumum için üzgünüm. O(nlogn)
Yuval Filmus

Yanıtlar:


14

Hesaplama modelinizi belirtmediniz, bu yüzden karşılaştırma modelini kabul edeceğim.

dizisinin { 1 , 2 } × { 3 , 4 } × × { 2 n - 1 , 2 n } listesinden alındığı özel durumu düşünün . Bir deyişle, i inci elemanı ya da bir 2 i - 1 ya da 2 i .B

{1,2}x{3,4}xx{2n-1,2n}.
ben2ben-12ben

I İstem algoritma sonucuna eğer ve B algoritma her öğe karşılaştırıldığında ki, aynı elemanları içeren B muadili için A . Gerçekten, algoritmanın A ve B'nin aynı elemanları içerdiğini ancak B'nin ilk elemanını asla A'daki muadili ile karşılaştırmadığını varsayalım . İlk öğeyi değiştirirsek, cevap farklı olsa bile algoritma tamamen aynı şekilde devam eder. Bu, algoritmanın ilk elemanı (ve herhangi bir elemanı) A'daki muadili ile karşılaştırması gerektiğini gösterir .birBBbirbirBBbirbir

Bu, ve B aynı öğeleri içeriyorsa, bunu doğruladıktan sonra algoritma A'nın sıralanmış sırasını bilir . Bu yüzden en azından n olmalı ! farklı yapraklar, ve bu yüzden zaman alır Ω ( n log n ) .birBbirn!Ω(ngünlükn)


Bunun genel olarak olduğunu ima ederdim , ama görünüşe göre karşılaştırma modeli bundan farklıdır. P=Ω(nlogn)
Albert Hendriks

@ AlbertHendriks, sıralama için n lg n alt sınırını göstermek için kullanılan aynı modeldir. Bu, yapabileceğiniz tek işlemin karşılaştırma olduğu anlamına gelir, o zaman daha iyisini yapamazsınız. Sanırım bu sorunuzu cevaplıyor.
Kaveh

[Cntd] Sıralama için bile daha güçlü sınırlarımız yok! ve n lg n'den daha hızlı sıralama yapabiliyorsanız sorunu n lg n'den daha hızlı çözmek için kullanabilirsiniz.
Kaveh

1
@AlbertHendriks, tamsayıları sıralamak için doğrusal zaman algoritmalarını biliyor musunuz? CLRS'de arayın. Davanız, doğrusal zamanda sıralayabileceğimiz durumlardan biri olabilir.
Kaveh

6
Tamsayılar sıralanabilir (bkz. Nada.kth.se/~snilsson/fast-sorting ) veya beklenen zamanda O ( n Ö(ngünlükgünlükn)(ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1181890 adresinebakın) veya kelime boyutu yeterince büyükse doğrusal zamanda bile (bkz. LNCS 8503, s. 26ff). Ö(ngünlükgünlükn)
Yuval Filmus

10

Bu cevap farklı bir hesaplama modelini ele almaktadır: birim maliyetli RAM modeli. Bu modelde, makine kelimeleri boyutuna sahiptir ve üzerlerindeki işlemler O ( 1 ) zaman alır. Ayrıca, her dizi öğesinin bir makine kelimesine sığdığını (ve dolayısıyla en fazla n O ( 1 ) büyüklükte olduğunu) basitliği varsayıyoruz .O(logn)O(1)nO(1)

Biz doğrusal bir zaman inşa edecek randomize tek taraflı hata ile algoritma olup olmadığını İki dizinin belirlenmesi daha zor sorun için (algoritma bu durumda olmasa bile aynı unsurları içerdiği iki diziler ilan etme) ve b 1 , , b n aynı elementleri içerir. (Hiçbirinin sıralanmasını gerektirmiyoruz.) Algoritmamız en fazla 1 / n olasılıkla hata verecektir .a1,,anb1,,bn1/n

Buradaki fikir, dizilerin aynı öğeleri içermesi durumunda şu kimliğe sahip olmasıdır: Bu polinomları tam olarak hesaplamak çok fazla zaman alacaktır. Bunun yerine, rastgele bir asal p ve rastgele bir x 0 seçer ve n i = 1 ( x 0 - a i ) n

i=1n(xai)=i=1n(xbi).
px0 Diziler eşitse, test her zaman geçecektir, bu yüzden dizilerin farklı olduğu durumlara konsantre olalım. Özellikle, bazın i = 1 ( x - a i ) - n i = 1 ( x - b i ) katsayısısıfır değildir. Bu yana bir i , b ı büyüklük n O ( 1 ) , bu katsayı büyüklüğe sahip 2 , n , n O (
i=1n(x0ai)i=1n(x0bi)(modp).
i=1n(xai)i=1n(xbi)ai,binO(1) en az vardır, ve bu yüzden, O(n)boyutu ana faktörlerQ(n). Biz en azından bir dizi seçerseniz o Bu araçlar n 2 asalpboyutunun en az n 2 (söz hakkından), sonra rastgele bir asal içinpbu setin o olasılık en azından bir araya gelecek1-1 / no n Π i = 1 (x- a i )2nnO(n)=nO(n)O(n)Ω(n)n2pn2p11/n Rastgele bir x 0 modulo p buna 1 - n / p 1 - 1 / n olasılığı ile tanık olacaktır(çünkü en fazla n derecesinde bir polinomen fazla n köke sahip olduğundan).
i=1n(xai)i=1n(xbi)0(modp).
x0p1n/p11/nnn

Sonuç olarak, en az n 2 farklı primer seti ve rastgele x 0 modulo p arasında kabaca n 2 boyutunda rastgele bir seçersek , diziler aynı öğeleri içermediğinde testimiz başarısız olur olasılık 1 - O ( 1 / n ) . Testi çalışma süresi alır O ( n ) bu yana s makinesi sürekli bir söz sayıda içine sığar.pn2n2x0p1O(1/n)O(n)p

Polinom zaman asallık test kullanılarak ve boyut asal yoğunluğu itibaren aşağı yukarı olduğu Q ( 1 / log n ) , bir rastgele birincil seçebilir p zamanında ( log n ) O ( 1 ) . Rastgele bir x 0 modulo p seçimi çeşitli şekillerde uygulanabilir ve bizim durumumuzda tamamen tekdüze bir rastgele x 0'a ihtiyacımız olmadığından daha kolay hale getirilir .n2Ω(1/logn)p(logn)O(1)x0px0

Sonuç olarak, zaman içinde bizim algoritma çalışır her zaman çıkışlar EVET, diziler HAYIR olasılık ile aynı elementleri ve çıkışları içeriyorsa 1 - O ( 1 / n ) diziler aynı unsurları ihtiva etmemesi. Herhangi bir sabit C için hata olasılığını 1 - O ( 1 / n C ) artırabiliriz .O(n)1O(1/n)1O(1/nC)C


1
Bu algoritma randomize edilmiş olsa da, diğer cevapların bazılarında fikirlerin gerçekte nasıl çalışacağını açıklar. Ayrıca hashtable yaklaşıma göre bir avantajı vardır: yerinde.
Yuval Filmus

Ben OP bir karma tablo kullanarak beklenen doğrusal zaman algoritması gibi değildi olasılıklı algoritmaları sevmiyorum düşünüyorum.
Kaveh

Kaveh haklısın. Ancak elbette bu çözüm de ilginç ve saklanması gerekiyor, olasılık algoritmaları için durumu çözüyor. Ayrıca, aradığım modeli kullandığını düşünüyorum.
Albert Hendriks

1
Sadece O (1 / n) notasyonunun doğru olup olmadığını merak ediyorum. Elbette ne demek istediğini biliyorum, ama bence big-O'nun tanımına göre bu O (1) 'e eşittir.
Albert Hendriks

2
C/nnÖ(1)

-3

başka bir algoritma önereceğim (veya en azından böyle bir algoritmanın şeması)

Şema, değerlerin (" tamsayılar " olduğu varsayılır ) arasında (dar?) Bir aralıkta olduğunu varsayar.[mbenn,mbirx]

  1. Ö(n)minmax

  2. Çıkar minhem dizilerden tüm değerlerden (burada bir dizi sıralı düzende zaten olması dikkate alınmaz, muhtemelen bu geliştirilebilir)

  3. 1c>1

  4. max-minÖ((mbirx-mbenn)n)

Yukarıdaki algoritma şemasının birçok pratik durumda (deterministik) oldukça hızlı olabileceğini unutmayın .

Yukarıdaki algoritma şeması, " hareketli kütleler " kullanan bir doğrusal-zaman sıralama algoritmasında bir varyasyondur . " Hareketli kütleler " sıralama algoritmasının arkasındaki fiziksel sezgi şudur:

Her bir öğenin değerinin gerçekte kütle büyüklüğünü temsil ettiğini varsayın ve tüm öğeleri bir satırda düzenlediğinizi ve aynı hızlanma kuvvetini uyguladığınızı hayal edin.

Daha sonra her bir madde kütlesiyle ilgili bir mesafeye, daha büyük daha az mesafe ve tersi yönde hareket edecektir. Sonra sıralanan öğeleri almak için sadece seyahat mesafesine göre ters sırayla öğeleri toplamak.

mbirx-mbenn

Bu bağlamda, yukarıdaki algoritma sayısal tabanlı sıralama algoritmalarına benzer (örn. Radix-sort , counting-sort )

Bu algoritmanın fazla bir şey ifade etmeyebileceği düşünülebilir, ancak en az bir şey gösterir. " Temel " olarak, fiziksel düzeyde, rasgele sayıların sıralanması, öğe sayısında doğrusal-zaman işlemidir.


Maddeleri gidilen mesafenin tersine toplamak açısından, bu, uygulama seviyesindeki karşılaştırmalar anlamına gelmez ve bu noktada "mesafeleri" sıralamanız gerekmez mi?
JustAnotherSoul
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.