Lütfen an + b fonksiyonunun O (n ^ 2) ve Θ (n) 'ye ait olduğu açıklamasını açıklayınız.


12

Diyelim ki doğrusal bir fonksiyonum var f(n)= an+b, bu fonksiyonun O (n 2 ) 'ye ait olduğunu kanıtlamanın en iyi yolu Θ(n)nedir ve ?

Burada matematiksel titizliğe ihtiyacım yok. Bir programcının yanıtına ihtiyacım var. Açıklamanın mantıklı bir yolu.

Bu yüzden soruyu matematik soru ve cevaplarına ve Programcılar Soru-Cevaplarına göndermedim.


2
@EmmadKareem Literatürde genellikle Big O notasyonu genellikle Θ (n) olan sıkı sınırları temsil etmek için sıklıkla kullanılır. Büyük O aslında üst sınırdır.
Geek

1
@EmmadKareem "O (n) 'nin üst sınırı n * n değil.", O (n)' nin üst sınırı yoktur. O (n) kendisi üst sınırı tanımlar. Aslında şu koşulu karşılayan bir dizi fonksiyon içerebilir: f (x) ∈ O (g (x)) c> 0 (örneğin c = 1) ve x0 (örneğin x0 = 5) olduğu için f (x ) x> x0 olduğunda <cg (x).
Geek

2
@EmmadKareem Aslında O (n) \ alt küme O (n ^ 2) \ alt küme O (n ^ 3) ve benzeri, böylece \ alt kümenin geçişi ile O (n ^ 2) 'de f \. \ Subset \ \ subeteq olmadığını unutmayın.
scarfridge

6
"Bir programcının yanıtına ihtiyacım var. Açıklamanın mantıklı bir yolu var." - "mantıklı" kelimeyi nasıl tanımlıyorsunuz? Matematik mantıklı. Burada titiz düşünmeden daha az bir şey yanlış . Konuyu açıklamayı deneyebilirsiniz, ancak arkasındaki (aksi halde zor değil) matematiği sindirmeden, gerçekten elde edemezsiniz - bunun ne anlama geldiğine dair sadece sisli bir anlayışa sahip olacaksınız.
Tamás Szelei

2
@Geek: Sanırım Matematik mi demek istiyorsun ? cs.SE de iyi bir adres olacaktır.
Raphael

Yanıtlar:


20

Büyük Oh notasyonu (O, Theta, Omega) fonksiyonların büyüme oranları ile ilgilidir.

Bir algoritma uyguladığınızda, veri kümesini artırdığınızda çalışma zamanının nasıl değiştiği belirli bir özelliğe sahiptir. Şimdi, algoritmayı 100 kat daha hızlı çalışacak şekilde optimize edebilirsiniz. Tabii, bu harika, ama aslında aynı algoritma. Benzer şekilde, birkaç yıl içinde bilgisayarlar bugünkünden iki kat daha hızlı olabilir.

Landau notasyonu bu sabit faktörleri soyutlamaktadır. Bir algoritmanın fher zaman başka bir algoritmadan iki kat daha hızlı olup olmadığı önemli değildir g: Belki g4 kat daha hızlı çalışacak şekilde optimize edilebilir veya bunun yerine daha hızlı donanım satın alabilirsiniz. Eğer ona bu perspektiften bakarsanız, bunların "aynı" olduğunu söyleyebilirsiniz. (Bu, pratikte sabit faktörleri (her zaman) göz ardı edebileceğiniz anlamına gelmez.)

Büyük oh bir üst sınırı belirtir, <=ilişkiye benzer .

Bunun 1 < 2doğru olduğunu kabul edeceksiniz . Bu 1, herhangi bir sayıdan daha az olamayacağı anlamına mı geliyor ? Kesinlikle değil. Daha büyük olan sonsuz sayıda sayı vardır 1.

Büyüme oranları ile benzerdir. O(n)"Heteroaril", lineer (veya daha yavaş) büyüyen tüm fonksiyonlar grubunu belirtir. O(n^2)diğer taraftan, ikinci dereceden bir karmaşa (veya daha yavaş) ile büyüyen tüm bu işlevleri ifade eder. Eminim lineer bir fonksiyonun ikinci dereceden bir fonksiyondan daha yavaş büyüdüğünü kabul edersiniz.

Bu nedenle bir işlev birden fazla "Big-oh" sınıfında olabilir.

Farklı işlevlerin aşağıdakilerle karşılaştırılması kısıtlamaları: (Knuth'un Beton matematiğinden)

büyüme oranı karşılaştırmaları

Soldan sağa fonksiyonlar daha hızlı büyür.

Ayrıca, resim açıklamasını buraya girinn ^ 2 anlamı n ^ 1'den daha hızlı büyür çünkü 2> 1.

Tanımlar

çözünürlüklü Omega

"f daha hızlı veya eşit derecede hızlı büyür"

çözünürlüklü büyük Oh

"f g kadar yavaş veya eşit derecede hızlı büyür"

tanımı Theta

Yukarıdaki ikisinin kombinasyonu. Fonksiyonun f"eşit derecede hızlı" büyüdüğünü söylüyor g. Bir denklik ilişkisi.

yorumlama

Diyelim ki iki algoritmanız var fve g.

Omega

Varsayım f g Theta'da değil, g Omega'da fbütçeniz ne olursa olsun, sisteminize ekleyebileceğiniz sabit bir hesaplama gücü olmadığı anlamına gelir, böylece fher zaman olduğu kadar hızlı çalışır g.

Büyük oh

Varsaymak f g Theta'da değil, Büyük Oh fyeterli veriye sahipseniz, sisteminize ne kadar bilgi işlem gücü eklediğinizden bağımsız olarak fher zamankinden daha hızlı çalışacağı anlamına gelir g.

Kanıt

Bunu gerçekten kanıtlamaya çalışıyorsanız, Landau notasyonunun tanımlarını kullanarak işlevinizin gerekli koşulları karşıladığını göstermeniz gerekir.

Eğer değerlerini bulmalıyız Yani c, d, n_0durum böyle olduğu anlamına gelmemektedir.

Alt sınır için bunu şu şekilde yapabilirsiniz c:

kanıt

Keyfi colarak a-1mükemmel olmaktan daha küçük olarak tanımladığımı fark etmek önemlidir . Teta'nın (g) tanımı "orada bir c" vardır. 0'dan büyük olduğu sürece herhangi bir değer olabilir. ( aOlumlu bir gerçek sayı ise, kanıtı biraz değiştirmeniz gerekir, ancak a - 1aslında negatif olabilir)

( aOlumlu olduğunu varsayıyorum , aksi takdirde işlev her zaman büyük değerleri için negatif olacaktır n, bu da çalışma zamanını gösteren bir işlev için hiçbir anlam ifade etmez.)

Üst sınır için yapmayı deneyebilirsiniz, oldukça benzer. Nasıl olduğunu bilmiyorsanız, size bir kanıt sunabilirim.

İpucu: ile başlayın d > a + 1

Dikkat

Bunu yanlış bir şekilde kanıtlamamanız önemlidir. (An + b) 'nin O (n)' de olduğunu varsayar ve oradan giderseniz, ne istediğinizi kanıtlamış olmazsınız. Tüm adımlarınızın her iki yönde de gittiğini doğrulamanız =>gerekir <=>.


2
Bu kadar. Çok kötü insanlar matematik yüzünden korkuyor, aslında çok basit.
Tamás Szelei

soru belirtiyor: "Burada matematiksel titizliğe ihtiyacım yok. Bir programcı cevabına ihtiyacım var ..." Bu cevapta kullanılan gösterim soru için iyi bir uyum gibi görünmüyor
gnat

1
@gnat Hmm, sorunun bir noktada "kanıt" olduğunu düşündüm. Her neyse, matematiksel tanımlar için yorumlar ekledim.
phant0m

@ phant0m harika cevap. tam olarak aradığım şey. Orijinal soruda "matematik" özel olarak sorulmasa da, cevaptaki matematik daha sağlam hale geldi. Bir ton teşekkürler.
Geek

@Geek, beğenmene sevindim. Başka sorunuz varsa, sormaktan çekinmeyin ve cevabımı netleştirebilir / genişletebilirim.
phant0m

5

Polinomlarla uğraşırken, sadece polinomun derecesini önemsiyorsun. Yani, an + bsadece umursuyorsun n. Öyle an^3 + bn^2 + cn + dolsaydı, sadece umursuyordun n^3.

Yani d derecesine sahip bir polinom her zaman içeride olacaktır Θ(n^d). Basit.

Şimdi Θ ve O arasındaki farktan bahsetmeliyiz. Esasen, sırasıyla ==ve arasındaki farktır <=. Yani her zaman sabit bir faktör içinde olduğuΘ(n) anlamına gelir . her zaman ya sabit bir faktör içinde ya da daha küçük olduğu anlamına gelir .nO(n)nn

Bu araçlar herhangi fonksiyon o Θ(s)herhangi biri için, saynı zamanda olacaktır O(s). Ayrıca, bir işlev içindeyse Θ(s)ve sher zaman başka bir işlevden daha azsa t, bu işlev içeridedir, O(t)ancak değildir Θ(t).

Bütünlük uğruna da vardır Ω(n). Eğer Θtemsil ==ve Otemsil <=, Ωtemsil >=. Yani an + biçindedir Ω(1), Θ(n)ve O(n^2).

Daha önce söylediğim gibi, hangi sınıf polinomlarının bulunduğunu anlamak gerçekten kolay - sadece dereceye bakıyorsunuz. Çalışması kolay başka işlevler de vardır.

Herhangi bir fonksiyon a^bnkeyfi için ave bşeklinde Θ(a^n). Herhangi bir değeri için c >= a, içinde bulundukları O(c^n). Her polinom içerisindedir O(2^n). Esasen bu sadece üstel fonksiyonların her zaman polinomları yendiğini ve üstel fonksiyonun temelinin önemli olduğunu söylüyor.

Logaritmalar tam tersidir. İlk olarak, log_b niçinde olduğu Θ(log n)herhangi b. Bu, bazın logaritmalar için önemli olmadığı anlamına gelir. Bu mantıklıdır, çünkü logaritmalarda farklı bazlar arasında geçiş yapmak sadece bir sabitle çarpılmaktadır. Logaritmik fonksiyonlar da - O(n)yani, bir logaritmik fonksiyon herhangi bir polinomdan daha küçüktür (en azından derece 1).

Bu işlevlerin toplamı göz önüne alındığında, en büyük işlev "kazanır". Yani n + log niçindedir Θ(n)çünkü nterim hakimdir log nterimini. Çarpma daha karmaşıktır. CS için bilmeniz gereken tek şey nlog n, nve arasında olmasıdır n^2.


1
oldukça iyi. Yukarıdaki açıklamaya göre klasik Algoritma Tasarım El Kitabına olabildiğince yakın
gnat

1
@Tikhlon nice yazmak yukarı So +1. Ama kabul ettiğim daha da iyiydi.
Geek

-2

Fazla matematik kullanmadan, f (n) = an + b işlevini alır ve tüm sabitleri bırakırsınız, bu yüzden bu f (n) = n gibi görünür, sonra yanıtınız QED olarak en yüksek dereceye sahip "n" yi alırsınız. Θ (n)

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.