Verimli Algoritma Nedir?


10

Asimptotik davranış açısından "etkili" algoritma nedir? Çizgiyi o noktada çizmenin standardı / nedeni nedir? Şahsen, naif olarak "alt polinom" diyebileceğim her şeyin,f(n)=o(n2) gibi n1+ϵ verimli olur ve Ω(n2)"verimsiz" olur. Ancak, herhangi bir polinom düzenindeki herhangi bir şeyin verimli olarak adlandırıldığını duydum. Sebep nedir?


Yanıtlar:


11

Bu bağlama bağlıdır. Teorik bilgisayar biliminde, genellikle her polinom zaman algoritması 'verimli' olarak kabul edilir. Yaklaşık algoritmalarda, örneğinn1/ϵ1/ϵ pratikte herhangi bir makul değeri için kullanılamayacak olsa da, verimli sayılır ϵ. SAT için çalışan bir algoritman2100 inanılmaz bir atılım olurdu.

Klasik algoritmalarda, yani 80'li ve daha önceki algoritmalarda, aşağıdaki çalışma zamanları n3ya da öylesine (düşün matris çarpımı, minimum maliyet eşleştirmesi, akışlar, doğrusal programlama) verimli sayılır. Diyorum ki, hala çoğu insan tarafından verimli kabul ediliyor. Tabii kin2 algoritması, nlogn algoritma, örneğin sıralama için olduğu bilinmektedir.

Günümüzde terabaytlarca veriyle başa çıkabilen alt doğrusal algoritmalara veya akış algoritmalarına doğru bir eğilim vardır. Google dizinindeki tüm sayfaların sayfa sıralamasını hesaplamak için matris çarpımını kullanmayı deneyin. Bu işe yaramaz.

Tabii ki, kesinlikle yararlı olsa da, bir algoritmanın asimptotik çalışma zamanı tüm hikayeyi anlatmaz. İyi asimptotik çalışma süresine sahip algoritmalar vardır, ancak etkili bir şekilde kullanılamayacak kadar büyük sabitler. Hiç. Lipton onlara Galaktik Algoritmalar diyor . Robert Sedgewick bile, en kötü durum sınırlarının “ bilimi çoğunlukla işe yaramaz, genellikle garantiler için işe yaramaz olduğunu” ve “en kötü durum analizinin performansı tahmin etmek için işe yaramaz olduğunu” konuşmasında Bilimi Bilgisayar Bilimine Geri Koymak .


9
Kısacası: sorununuzu size uygun bir zaman diliminde çözen verimli.
Raphael

Bu gerçekten kendi cevabını gerektirmez, ancak polinom çalışma zamanı (cevapta açıklandığı gibi) ile rasgele olan fonksiyon sınıfı olan BPP genellikle verimli olarak kabul edilir. Başka bir deyişle, yukarıdakiler doğrudur, ancak bilgisayarların genellikle hesaplama yapmak için rasgeleliğe erişmesine izin verilir. Rasgeleliğin en önemli pratik kullanımlarından biri karmadır.
SamM

Belki de "verimli" ilk etapta doğru terminoloji değil midir? Ben sadece matematik kitaplarımdan birini inceliyordum ve yazar polinom çalışma zamanlarını "izlenebilir" ve üstel çalışma zamanlarını "inatçı" olarak adlandırıyor.
Robert S. Barnes

1
@ RobertS.Barnes: Farklı kelimeler, aynı problem.
Raphael

4

Dağıtık algoritmaların açıdan Benim 2 sent: dağıtılmış algoritma olarak kabul edilir büyük ölçekli ağları (P2P, sosyal ağlar, vs.) bakarken verimli onun çalışma süresi iseO(logcn) bir süreliğine c>0 ve algoritmaO(logn)bit. Mesaj boyutlarına olan gereksinimin genellikle çalışma süresinden daha da önem verildiğine dikkat edin, özellikle de çalışma süresinde daha büyük bir alt sınırı olan "küresel" sorunlar, örneğin dağıtılmış MST için.


3

Bunun ardındaki mantık, asimtotik davranış açısından bakıldığında, polinom büyüme hızının, süper polinom büyüme hızından çok daha az olmasıdır. Pratikte, giriş boyutu büyüdüğünde bir polinom zaman algoritması bir süper polinom zaman algoritmasından çok daha hızlı çalışır.

Tabii ki, hiç kimse, örneğin, polinom karmaşıklığı olan bir algoritmanın, O(n2000) "verimli" olmakla birlikte, algoritmaların çoğunluğu nadiren O(n5).

Pratik hususlar size şunu söyleyebilir: O(n2)son derece büyük bir girdiyi işlemek için yetersizdir ve bu yüzden daha düşük sınırları kanıtlamaya ve bir tarafta bu alt sınırlarla eşleşen sıralı algoritmalar tasarlamaya ve diğer tarafta paralel algoritmalara başvurmaya çalışıyoruz. Bazı sorunlar için, olasılıklı bir garantiyi kabul etmek istiyorsanız, alt doğrusal zaman algoritmalarından bile faydalanabilirsiniz (son derece hızlı, ancak çok küçük bir olasılıkla doğru bir cevap sağlayamayabilir).


3

Teorik olarak, bir algoritmanın en kötü çalışma süresi giriş uzunluğundaki bir polinom ile sınırlı olması durumunda verimli olduğu söylenir. Bunun nedeni, polinomların güzel kapatma özelliklerine sahip olmasıdır. Polinomları eklemek, çoğaltmak, oluşturmak, polinomları veren işlemlerdir ve eğer birbirinize problemleri azaltıyorsanız bunlar iyidir.

Tabii ki, giriş uzunluğu arttıkça polinom ve üstel arasındaki boşluk çok büyük hale gelir, böylece polinom-zaman algoritmaları çok daha iyidir. Uygulamada, bir polinom-zaman algoritması sonlandırılmadan önce uzun sürebilir, ancak bunun optimal bir algoritma (mümkün olan en iyi) olması muhtemel olabilir, bu durumda etkili olduğunu söyleyebilirim.


Bir şey belirli bir sorun için en hızlı bilinen algoritma ise, o açıdan "verimli" olarak değerlendirilebildiğini anlayabilsem de, çoklu zaman içinde etkili olan herhangi bir şeyi düşünmek benim için zor. :-)
Robert S. Barnes

Polinom çalışma zamanları için "verimli" sadece bir kelimedir ve bu konuda yanıltıcıdır.
Raphael

@ Raphael Belki izlenebilir kullanmak daha iyi bir kelime ...?
Robert S. Barnes

1
@ RobertS.Barnes: Çok daha iyi değil, imho. "İzlenebilir" her bit "verimli" kadar görecelidir.
Raphael

0

Bazı problemler kolay, bazıları zor. Bir algoritmanın "verimli" olup olmadığı, sorunun doğallığı ile ne kadar iyi karşılaştırıldığına bağlıdır. O'da herhangi bir n basamaklı sayıyı etkileyen bir algoritma bulursanız (n3), ve O (n) sayıları sıralayan bir algoritma bulmakn2), daha sonra algoritmanız daha verimlidir (çünkü insanlık tarafından bilinen herhangi bir şeyi büyük bir faktörle yener, benimki ise mutlak bir başlangıçtan beklediğiniz kadar yavaştır).


Katılmama rağmen ilginç bir bakış açısı. Her neyse, istiyorsunΘ- orada.
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.