“Asimptotik olarak daha verimli” demek ne anlama geliyor?


12

algoritmasının asimptotik olarak daha verimli olduğunu söylediğimizde ne anlama geliyor ?XY

  • X , tüm girişler için daha iyi bir seçim olacaktır.
  • X , küçük girişler hariç tüm girişler için daha iyi bir seçim olacaktır.
  • X , büyük girişler hariç tüm girişler için daha iyi bir seçim olacaktır.
  • Y küçük girdiler için daha iyi bir seçim olacaktır.

Bu sorunun bağlantısı burada.

http://quiz.geeksforgeeks.org/algorithms-analysis-of-algorithms-question-16/


Daha asimptotik olarak verimli bir algoritmanın tüm girdiler için çalışması gerektiğini düşündüm, ancak "Küçük olanlar hariç tüm girdiler için çalışıyor" arkasındaki nedeni göremiyorum.


büyük girdi algoritmada şişe boynunu ortaya çıkarır. Mühendislik açısından koyacağım şey buydu.
Apiwat Chantawibul

Yanıtlar:


14

Öncelikle, her iki algoritma da tüm girişler için "çalışır". Soru performansla ilgili.

Bu sorunun cevapları biraz berbat. Bir algoritmanın bir diğerinden daha asimptotik olarak daha verimli olduğunu söylemenin bir yolu, daha büyük bir giriş boyutu için daha etkili algoritmanın daha az "hesaplama adımı", örn. karşılaştırma sayısı.

Cevapların fikir bir asimptotik daha verimli algoritma olmasıdır olabilir hala o girdi büyüklüğü önce daha fazla adımlar gerektirir. Olabilir asimptotik daha verimli algoritma tüm girişler için daha az adımları gerektirir Eğer durum olabilir, ancak genellikle değildir o durumda ve pratikte olması gerekmez. "Doğru" cevabı daha iyi ifade olurdu Yani " hariç tüm girişler için daha iyi bir seçim olacaktır muhtemelen küçük girişler".X

İfadeler yine de o kadar iyi değil. Öncelikle, daha fazla faktör hangi algoritmanın "daha iyi bir seçim" olduğuna karar verir, ancak onlara bu durumda niyetin yeterince açık olduğunu söyleyeceğim. Asıl mesele "küçük" ve "büyük". En sevdiğim makalelerden biri, İyi Tanımlanmış Tüm Sorunlar için En Hızlı ve En Kısa Algoritma . Bu makalede , bir fonksiyonun herhangi bir spesifikasyonunu veren bir algoritma ve bunun polinom zamanında hesaplanabileceğine dair bir kanıt, bu fonksiyonu artı bir terim dahilinde optimum zaman karmaşıklığında hesaplayacağına dair bir kanıt açıklanmaktadır . Örneğin, işlev belirtimi olarak kabarcık sıralaması ve5O(n2), olan bir sıralama algoritması üretecektir . Aslında, olduğu bir algoritma üretecektir burada sabit faktör olduğu asimptotik * uygun algoritması. Bu harika. Tek bir sorun var: sabit terim - o'da gizliO(nlgn)5cnlgn+o(nlgn)co(nlgn)bu örnekte - algoritmayı neredeyse tüm gerçek problemler için neredeyse kesinlikle mümkün kılmamaktadır. "Tamamen olanaksız" derken ne demek istiyorum? Yani algoritmanın tamamlanmasından önce evrenin ısı ölümü birçok kez gerçekleşecek. Bununla birlikte, uygun şekilde "büyük" girdiler için kabarcık türünden daha hızlı olacaktır. Demek istediğim, herhangi bir şekilde "uygun şekilde büyük" bir girdi yazmak, fiziksel olarak mümkün değildir.

Her halükarda, doğru cevabı nasıl söyleyeceğim: " , yeterince büyük girdilerde daha az adım gerektirir ". Uygulanabilecek birden fazla "adım" kavramı olduğu ve bir algoritmanın bir metrik tarafından asimptotik olarak daha verimli ve diğeri tarafından daha az verimli olabileceği için bu hala biraz belirsizdir. Bu ifade "daha iyi seçim" in değer yargısını önler; önbellek verimliliği veya uygulama basitliği gibi sabit faktörler / terimler belirtildiğinde, asimptotik olarak daha az verimli algoritmaları veya daha az verimli algoritmaları seçmek için birçok neden vardır.XY

* Burada bir incelik var. Asimptotik olarak optimal algoritma, asimptotik olarak optimal olmayan bir algoritmadan daha kötü bir sabit faktöre ( sahip olabilir . Herhangi bir asimptotik olarak en uygun algoritma için en iyi değerine sahip olacağını düşünüyorum , ancak asimptotik verimlilikte hafif bir kazanç elde etmek için sabit faktörü önemli ölçüde artıran büyük karmaşıklık eklendiğini düşünüyorum.cc


2

İnsanlar böyle bir şey söylediklerinde genellikle ne anlama gelir:

Eğer ve iki çalışma seferlik algoritmaları fonksiyonlarıdır ve modeli X, sırası ile, daha sonra .TATBABTAo(TB)

Burada birçok uyarı uygulanır: belirtilmesi gerekir ve "çalışma zamanı maliyetinin" tam olarak ne anlama geldiğini tanımlamamız gerekir. Zaman neredeyse hiçbir zaman soruşturma konusu değildir. Başka birçok maliyet ölçüsü vardır. Öyle belirsiz Landau notasyonu verimliliği hakkında herhangi yararlı açıklama yaparsa. Ve bunun gibi.X

Özellikle, insanlar ikincisinin sık sık önerdiğine rağmen, önerdiğiniz ifadelerin hiçbiri takip etmiyor.

Ne yazık ki, algoritmalarla uğraşan daha geniş insan topluluğu, basitlik uğruna boş yere sınırlanan terminolojiyi benimser. ( Algoritmalar hakkında kesin ve yardımcı açıklamalar yapmak zordur!)

Referans sorularımızla ilgilenebilirsiniz .


X'in, n0> 0 olan n0 değerinden büyük tüm giriş boyutları için n, y'den daha küçük zaman alırsa, X algoritmasının Y'den asimptotik olarak daha iyi olduğu söylenir.

Bunun alışılmış tanımın nasıl olmadığına dikkat edin! Eğer ve , biz söyleyemem o en "asimptotik iyi". Bir algoritmanın performansını tek bir sayıya indirgeyen bir analizin tüm uyarıları göz önüne alındığında, birinin diğerinden "daha iyi" olduğu iddiası yoktur.TA(n)=n+1TB(n)=n

Bilgisayar bilimlerini bir kez Wikipedia'da bir şeyler okuyan programcılardan değil CS kaynaklarından öğrenmenizi öneririm. (Evet, bu zor, ama programcı çevrelerinde, hatta SO'da yayılmış çok fazla yanlışlık gördüm.)


2

"Asimptotik olarak daha verimli", "belirli bir boyutun üzerindeki tüm problemler için daha verimli" anlamına gelir. "Belirli boyut" un ne olduğunu söylemez ve "belirli boyut" dan önce ne olduğunu söylemez.

Dolayısıyla, ikincisi dışındaki tüm cevaplar açıkça yanlıştır, çünkü "Asimptotik olarak daha verimli" küçük giriş boyutları hakkında hiçbir şey söylemez. Ama ikincisi de sorunlu.

Şu anda tamsayı dizisini saklayabilecek hiçbir donanım yoktur , bu nedenle açıkça tamsayıları "büyük girdi" olarak sayılır. Ancak, Bubblesort'tan asimptotik olarak daha verimli bir sıralama algoritması kolayca oluşturabilirim, ancak sadece veya daha fazla tamsayı için. Bu yüzden ikinci yanıtı alın, "büyük" ü "yeterince büyük" olarak değiştirin ve doğru olur.103010301040

Pratikte, asimptotik olarak daha iyi bir algoritmanın hangi giriş boyutunun gerçekten daha hızlı olduğunu ve daha hızlı olduğu girişler için gereken sürenin ne olduğunu kontrol etmek iyi bir fikirdir ve bazen bir algoritma sadece pratik olarak gerçekleştirilemeyen sorun boyutları için daha hızlı olur yine de çözülecek. A algoritması B algoritmasını yenerse, ancak yalnızca her birinin yıl veya daha fazla sürdüğü sorunlar için , A çok yardımcı olmaz.1015

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.