Ö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