Her doğrusal zaman algoritması bir akış algoritması mıdır?


14

Üzeri de inversiyon sayma hakkında bu soruya , ben bir kağıt buldum bir alt kanıtlayan bütün (tam) için uzay karmaşıklığına bağlı akış algoritmaları . Bu bağın tüm doğrusal zaman algoritmalarına yayıldığını iddia ettim. Bu, genel olarak olduğu gibi biraz cesurdur, doğrusal bir algoritma, bir akış algoritmasının yapamayacağı (rastgele erişim) etrafında atlayabilir; öğeleri sırayla araştırmak zorundadır. Birden fazla geçiş yapabilirim, ancak sadece sürekli olarak (doğrusal çalışma süresi için).

Bu yüzden sorum:

Her doğrusal zaman algoritması sürekli olarak çok sayıda geçişe sahip bir akış algoritması olarak ifade edilebilir mi?

Rastgele erişim, (basit) bir yapının olumlu bir cevap olduğunu önlüyor gibi görünüyor, ancak ben de karşı bir örnek bulamadım.

Makine modeline bağlı olarak, rasgele erişim çalışma zamanı açısından bile bir sorun olmayabilir. Bu modeller için cevaplarla ilgilenirim:

  • Turing makinesi, düz giriş
  • RAM, dizi olarak giriş
  • RAM, bağlantılı liste olarak giriş

yanıtlarda gördüğünüz gibi, "akış algoritmaları" genellikle küçük (çok noktadan boşluk) anlamına gelir. ancak motivasyonunuz göz önüne alındığında, bence soru şu olmalıdır: çalışma alanı sözcüklerini kullanan her doğrusal zaman algoritması sözcük alanı kullanan bir akış algoritmasına dönüştürülebilir . bu nedenle bir karşı örnek , rasgele erişimli boşlukla çözülebilecek bir sorun olurken, sabit geçişli akış algoritması boşluk gerektirir . henüz böyle bir örnek vermediO ( s ) o ( n ) Ω ( n )sO(s)o(n)Ω(n)
Sasho Nikolov

@SashoNikolov: Aslında, tüm uzay sorunu teğet. Benim sorum esas olarak çalışma zamanı. Cevap "evet" olsaydı, makalede kanıtlanmış olan alt sınırlar (uzay karmaşıklığında) tüm doğrusal zaman algoritmalarına uygulanacaktır. Alt sınırın boşlukta olması rastlantısaldır, fakat sorunun kendisinin odak noktası değildir.
Raphael

Anlayamıyorum. Sınırsız alana sahip bir lineer zaman algoritmasının "bir geçiş akışı" olması önemsizdir. Sorunuz yalnızca "doğrusallık rasgele erişim algoritması yaklaşık olarak karmaşıklık ölçüsünü koruyarak sabit geçiş akışı yapılabilirse " biçiminde anlamlı olur . Yani bir karmaşıklık ölçüsü seçmelisiniz, o / w bunun bir anlamı yok. μ
Sasho Nikolov

@SashoNikolov: "Akış algoritması" nın böyle tanımlayıcı problemleri olduğunun farkında değildim. Akış algoritmaları için doğrusal bir alt sınır gösterdikleri göz önüne alındığında, uzayın bir tanımın çekirdeği olmadığını varsaydım. Ama sanırım bunu "Akış algoritması yok ..." ya çevirebilirsiniz. Bununla birlikte, bu tanım hakkında: "Akış algoritması, girişe (listeye) bir defada bir eleman verilen bir algoritmadır. Her yeni eleman için cinsinden bir hesaplama yapabilir . Sürekli olarak bu geçişlerin çoğundan sonra , ek bir süreden sonra bir yanıt . " o ( n )o(n)o(n)
Raphael

@SashoNikolov: Bu, "girdiyi kopyala ve her şeyi yap" algoritmalarını kavramdan hariç tutar, ancak zamanla sınırlar. Bu genellikle belirtilen sınıfa uyuyor mu? Değilse, "akış" yararlı bir zaman veya uzay karmaşıklıkları içinde tanımlanabilir sanmıyorum. Daha çok Açgözlü veya böl ve fethet gibi bir stratejidir. o(n2)
Raphael

Yanıtlar:


15

Akış algoritmalarının anlamlı olması için, girdinin kendisinden çok daha az miktarda çalışma alanı ile çalışması gerekir. Örneğin, girişle aynı miktarda çalışma alanına izin verirseniz, herhangi bir algoritmayı, girdiyi önce tek geçişte çalışma alanına kopyalayan ve daha sonra yalnızca Uzay.

Akış algoritmaları hakkında konuşurken çalışma alanını giriş boyutunda en fazla polilogaritmik olarak sınırlamanın tipik olduğunu düşünüyorum. Bu varsayım altında, medyan seçimin Munro ve Paterson [MP80] sonucu O (1) geçişli akış algoritmasına sahip değildir: N elemanlarında medyan seçim için herhangi bir P geçişi akış algoritması Ω ( N 1 / P) depolamak zorundadır ) elementler. Diğer yandan, medyan seçimi iyi bilinen bir deterministik lineer-zaman algoritmasına sahiptir [BFPRT73].

[BFPRT73] Manuel Blum, Robert W. Floyd, Vaughan Pratt, Ronald L. Rivest ve Robert E. Tarjan. Seçim için zaman sınırları. Bilgisayar ve Sistem Bilimleri Dergisi , 7 (4): 448-461, Ağustos 1973. DOI: 10.1016 / S0022-0000 (73) 80033-9

J. Ian Munro ve Mike S. Paterson. Sınırlı depolama ile seçim ve sıralama. Teorik Bilgisayar Bilimi , 12 (3): 315–323, Kasım 1980. DOI: 10.1016 / 0304-3975 (80) 90061-4


6

Akış modelinde, giriş boyunca tarama yaparken yalnızca sabit veya poli-logaritmik ekstra verileri depolamanıza izin verilir. Bölme ve fethetme paradigmasını
izleyen doğrusal bir zaman algoritması düşünüyorsanız , daha fazla bilgi depolamanız ve / veya verilerinizi özyinelemenin derinliği kadar kez taramanız gerekir.

Bir örnek, bir metin (RAM modelinde dizi olarak verilir) sonek dizisini oluşturmak için DC3 algoritmasıdır . Bir sonek dizisi oluşturmak için karakterleri üçüzler halinde gruplandırırsınız, böylece yeni süper karakterlere sahip bir metin alırsınız . Bunu ofset ile yapabilirsiniz, bu da üç yeni metin olan . İlginçtir ki, doğrusal zamanda sonek diziniz varsa sonek dizisini hesaplayabilirsiniz . Dolayısıyla algoritma ihtiyacı0 , 1 , 2 T 1 , T 2 , T 3 T 1T 2T0,1,2T1,T2,T3T1T2

t(n)=t(2/3n)+O(n)

saati. Bu özyineleme açıkça . Bunun nasıl bir akış algoritmasına dönüştürülebileceğini anlamıyorum.t(n)=O(n)

İyi bilinen başka bir örnek, klasik doğrusal zaman seçim algoritmasıdır.


İşte olası başka bir örnek. Bir yığın oluşturmak O (n) alır ve dahili olarak bölme ve fethetme tabanlı heapify () altyordamını kullanır.
Massimo Cafaro

ama bu bir kanıt değil, değil mi? sadece saf bir simülasyonun işe yaramayacağını söylüyorsun. ama bazen şaşırtıcı algoritmalar var
Sasho Nikolov

@SashoNikolov: Söylediğim, çok çalışan belleğe ihtiyaç duyduğundan DC3 algoritmasını akış algoritması olarak görmüyorum. Belki algoritmayı bir akış algoritmasına değiştirebilirsiniz, ancak sonuç DC3 olmaz. Ben sonek dizi inşaatı için bir akış algoritması olup olmadığını tartışmadım . Bu tamamen farklı bir soru olurdu. O(n)
A.Schulz

"Bunun nasıl bir akış algoritmasına dönüştürülebileceğini görmüyorum" beni "bu algoritma modifikasyon olmadan akış değil" dışında bir şey söylediğine inandırdı
Sasho Nikolov

4

Sorunuzu aşağıdaki gibi yorumluyorum. Biraz hesaplama problemi düzeltmek edelim . Biz tanımlarız:P

  • R(P) herhangi bir doğrusal zaman rastgele erişim algoritması en küçük çalışma alanıdır sahip olabilir. Tam modelin o kadar da önemli olmadığını düşünüyorum, ancak diyelim ki girişe rastgele erişilebilen salt okunur bir dizi olarak verilen bir kelime RAM'i var.P
  • S(P) için sıralı algoritma küçük çalışma alanıdır olabilir; burada algoritmanın (yine bir kelime RAM makinesi olarak modellenmiştir) zaman adımlarında ilerlediğini varsayıyoruz: her adımda giriş dizisinin bir hücresi verildiğinde, algoritma bazı işlemler yapar, bazı bilgileri yerel deposuna kaydeder ve ardından bir sonraki zaman adımına ilerler. Dizi, bu şekilde sabit bir sayıda "ilmekledi".P

Sanırım ve arasındaki boşluğun ne kadar büyük olabileceğini soruyorsunuz .R(P)S(P)

Spektrumun alt ucunda, Muthu'nun akış kitabında bir cevap var . Bulmaca 3'e bakın. Sorun , tüm aralığında bir tamsayı dizisi verildiğinde , yinelenen bir tam sayı bulmaktır. bitleri (eşdeğer olarak kelime sayısı ile rasgele erişim doğrusal zaman çözümü vardır : temelde işaretçi kovalaması. Ancak sabit geçiş algoritması mutlaka alan karmaşıklığına sahip olmalıdır.n[1,n1]O(logn)O(1)ω(logn)

Modelin tam olarak sabitlemediğimiz bir yönü var: geçişler hangi yöne gidiyor? Yani, akış algoritmasını tüm dizi beslediğimizde, bir sonraki geçiş sondan mı yoksa baştan mı başlıyor? İlginçtir, bu büyük bir fark yaratabilir. İki tür parantez bulunan iyi parantez boyutundaki bir ifadeyi tanıma sorununu düşünün. Hata olasılığının olmasını istediğimizi varsayalım . Sonra Chakrabarti ve ark. tüm geçişleri tek bir yöne , , burada geçiş sayısıdır ve uzay karmaşıklığıdır. Diğer yandan Magniez ve ark. kullanan basit bir algoritma vermekO(1/log2n)psO(log2n)ps=Ω(n)psO(log2n) uzayı, polinom olarak çok küçük bir yanlış pozitif olasılığı vardır ve bir ileri ve bir geri geçer.


1

"Akış algoritması" nın en basit tanımında bile (kaynaktaki her artımlı yinelemeden sonra, sonucun bir sonraki artımlı parçasının derhal bilgi sahibi olmasını sağlayan bir algoritma), ben olmayan birkaç doğrusal algoritmayı düşünebilirim bu şekilde davran. Karma algoritmalar büyüktür; FNV-1a, kaynaktaki bayt sayısına doğrusaldır, ancak tam kaynağın işlenmesine kadar son karmanın hiçbir bölümünü bilmiyoruz.

RadixSort, yani BucketSort, O (N) 'dir (teknik olarak O (NlogM), burada M, N olarak kabul edilen, küçük olarak kabul edilen maksimum değerdir) ve herhangi bir öğenin nihai yerinde olmasını sağlamak için tümüyle çalışması gerekir.

Bir "akış" algoritması olmak için, en basit haliyle, bir algoritmanın, ikisi de açıkça zamana bağlı olmayan aşağıdaki iki özelliğe sahip olması gerekir:

  • O (N) uzay karmaşıklığından daha iyi (eşdeğer olarak belirtilirse, tüm kaynağın bilinmesi gerekmez ve tüm sonucun saklanması gerekmez)
  • O (N) I / O ilişkisi (algoritma, girişleriyle doğrusal olarak orantılı olarak bir dizi çıkış üretir)

Bu nedenle, akış sağlayan algoritmaların ana sınıfı, "projeksiyonları" gerçekleştiren algoritmalardır (bir girişin X> 0 çıkışlarına artan dönüşümleri).


alanı kullanımı neden iyi olmaz ? Diğer soruda bağlantılı makaleler alanı kullanan çok sayıda akış algoritması ile oynamaktadır . ω ( 1 )O(logn)ω(1)
Raphael

logN de iyidir; önemli olan, algoritmanın bir kerede tüm girdi veya çıktı bilgisine ihtiyaç duymamasıydı.
KeithS

Bir alanı gereksinimi (yani öyle değil akış algoritması) kullanışlı bütün girişi ihtiyacı anlamına gelmez. Ama anladım. Ω(n)
Raphael
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.