Arama

Büyük O Gösterimi (Landau Sembolü)

Güncelleme: 9 Mart 2009 Gösterim: 4.867 Cevap: 0
HipHopRocK - avatarı
HipHopRocK
Ziyaretçi
9 Mart 2009       Mesaj #1
HipHopRocK - avatarı
Ziyaretçi
Büyük O Gösterimi

Sponsorlu Bağlantılar
Büyük O (Big-Oh) gösterimi matematiksel bir gösterim olup işlevlerin (fonksiyonların) asimptotik davranışlarını tarif etmek için kullanılır. Daha açık şekilde anlatmak gerekirse, bir işlevin büyümesinin asimptotik üst sınırını daha basit başka bir işlev cinsinden tanımlanması demektir. İki temel uygulama alanı vardır: matematik alanında genellikle kırpılmış bir sonsuz serinin kalan terimini karakterize etmek için kullanılır; bilgisayar bilimlerinde ise algoritmaların bilgi işlemsel karmaşıklığının çözümlemesi için kullanılır.
Bu gösterim ilk olarak Alman sayılar kuramcısı Paul Bachmann tarafından 1892 yılında yazdığı Analytische Zahlentheorie kitabında kullanılmıştır. Gösterim bir başka Alman matematikçi olan Edmund Landau tarafından yaygın kullanıma sokulmuştur, bundan ötürü bazen Landau sembolü olarak da anılır. Büyük O, İngiliz dilindeki "order of" yani bir şeyin derecesi anlamına gelen söz öbeğini hatırlatmak amacı ile kullanılıyordu ve ilk olarak büyük omicron harfi idi; günümüzde büyük O kullanılmakta ve 0 sayısı hiç kullanılmamaktadır.

Kullanım alanları

Bu gösterimin biçimsel olarak yakın ama temelde farklı iki kullanımı vardır: sonsuz asimptotikler ve infinitesimal asimptotikler. Bu ayrım sadece uygulamadadır ancak "büyük O"nun biçimsel tanımı her iki durumda aynı olup işlev argümanının limitleri değişmektedir.

Sonsuz asimptotikler

Büyük O gösterimi algoritma başarım çözümlemesinde faydalıdır. Söz gelimi n boyundaki bir problemi çözmek için gereken zaman (adım sayısı) T(n) = 4n² - 2n + 2 olarak bulunabilir.
n büyüdükçe n² terimi o kadar hızlı büyüyecektir ki diğer terimlerin büyüme hızı buna kıyasla ihmal edilebilir kadar düşük kalacaktır; örneğin n = 500 için 4n² terimi 2n teriminin 1000 katı büyüklüğünde olacaktır ve dolayısıyla bu ikinci terimin değeri tüm ifadenin değerini belirlemede çoğu amaç bakımından ihmal edilebilir bir etkiye sahip olacaktır.
Buna ek olarak, aynı ifadeyi n³ veya 2n terimleri içeren bir ifade ile kıyaslayacak olursak katsayılar da anlamlarını yitirecektir. T(n) = 1.000.000n² ve U(n) = n³ olsa bile ikinci ifade, n 1.000.000'u geçtikçe birinci ifadeye kıyasla daima daha büyük olacaktır (T(1.000.000) = 1.000.000³ = U(1.000.000)).
O halde Büyük O gösterimi işin özünü sade biçimde sunmaktadır: şu şekilde yazabilir

041ebb0bbcfefe449c2f59fdc3ae231b

ve algoritmanın n2 dereceden zaman karmaşıklığına sahip olduğunu söyleyebiliriz.

Sonsuz küçük asimptotikler

Büyük O aynı zamanda bir matematiksel işlev için geliştirilen yaklaşık işlevin hata terimini tarif

etmek için de kullanılabilir. Örneğin,: 956d1a34c5ffb699494f24e8507b373b

ifadesi hatanın (yani ex − (1 + x + x2 / 2) farkının) mutlak değer bakımından, sıfıra yeterince yakın x değerleri için bir sabit çarpı x3 değerinden daha küçük olduğunu belirtir.

Biçimsel tanım

f(x) ve g(x) gerçel sayılar kümesinin bir alt kümesi üzerinde tanımlanmış iki işlev olsun. Bu durumda deriz ki
f(x), O(g(x))dir; x da558173e1f2ddfeb273751d481f9a52 ∞ yalnız ve yalnız
öyle x0 ve M sayıları varsa ki |f(x)| ≤ M |g(x)|; x > x0 için. Aynı gösterim f işlevinin bir a gerçel sayısı civarındaki davranışını tarif etmek için de kullanılabilir: Deriz ki
f(x) O(g(x))dir; x da558173e1f2ddfeb273751d481f9a52 a yalnız ve yalnız
öyle δ>0 ve M sayıları varsa ki |f(x)| ≤ M |g(x)|; |x - a| < δ için. Eğer g(x) a sayısına yeterince yakın x değerleri için sıfırdan farklı ise yukarıdaki iki tanım limit superior kullanılarak birleştirilebilir:
f(x) O(g(x))dir;x da558173e1f2ddfeb273751d481f9a52 a yalnız ve yalnız
ab18564c9e319ff273c1bae531da9933 iken.

Matematikte hem ∞ hem de a civarındaki asimptotikler kullanılır. bilgi işlemsel karmaşıklık kuramında ise sadece ∞a giden asimptotikler kullanılır. Ayrıca sadece pozitif değerli işlevler ele alındığından mutlak değer de kullanılmadan yazılabilir.

Örnek

Şu çokterimlilere bakalım:

b7a86831a6461e7436a417414264ee53835695ab8c73396770df24aaec403fce f(x), O(g(x)) ya da O(x4) derecesindedir diyebiliriz. Tanıma göre, tüm x>1 degerleri için ve C bir sabit iken, |f(x)| ≤ C |g(x)| ifadesi geçerlidir.
İspat:
4d59f179faf2e7ddd96d62bf36d69ac7 x > 1 iken2a27538f523f73c0b76b241a24d13cc0 çünkü x3 < x4, ve devam eder.ef4c4f2b60809e86f44af7c3ab239797833369f6030a032164dd0413b03d4c2c

Dikkat edilmesi gereken hususlar


Yukarıda bahsi geçen "f(x) O(g(x))dir" ifadesi genellikle f(x) = O(g(x)) şeklinde yazılır. Bu, gösterimin bir nebze kötüye kullanılması demektir. Elbette kastettiğimiz iki işlevin birbirine eşit olmaları değildir. O(g(x)) olma hali simetrik değildir:

15fc5cdc5e011b41e9593d243f67456d fakat 11d79abfe905f8b7735cd23127383ca8.

Bu yüzden bazı yazarlar küme gösterimini tercih ederler ve f 8c20c78b364ed5dbadd49e5b997aa1cc O(g) yazarlar, bunu yaparken de O(g)yi g işlevinin altında kalan tüm işlevlerin kümesi olarak düşünürler.
Ayrıca, aşağıdaki gibi bir "eşitlik"
f(x) = h(x) + O(g(x)) "f(x) ile h(x)nin farkı O(g(x))dir" olarak anlaşılmalıdır.

Sık rastlanan işlev dereceleri

Aşağıda algoritma çözümlemesinde sıkça karşılaşılan işlev derecelerini görebilirsiniz. Tüm bunlar n sonsuza giderken durumunda belirtilmiştir. Daha yavaş büyüyen işlevler önce listelenmiştir. c keyfi bir sabit değerdir.
gösterim isim O(1) sabit O(log * n) tekrarlı logaritmik O(logn) logaritmik O([logn]c) logaritmik çokterimli o(n) alt doğrusal O(n) doğrusal O(nlogn) doğrusal logaritmik (linearitmik), sözde doğrusal veya üst doğrusal
O(n2) karesel O(nc), c > 1 çokterimli, bazen "cebirsel" de denir O(cn) üssel, bazen "geometrik" de denir O(n!) faktöryel, bazen "kombinatoryel" de denir Pek sık rastlanmasa da, Büyük O gösterimi ile kullanılan çok daha hızlı büyüyen işlevler mevcuttur, mesela A(n,n) olarak temsil edilen Ackermann işlevinin tek değerli hâli. Bunun tam tersi çok yavaş büyüyen işlevler da vardır, ör. Ackermann işlevinin ters işlevi olan ve genellikle α(n) ile gösterilen işlev. Her ne kadar bu işlevler sınırsız olsa da pratik amaçlar için sabit çarpanlar olarak kabul edilirler.

Özellikler

Eğer bir f(n) işlevi diğer işlevlerin sonlu toplamı olarak yazılabiliyorsa o zaman bunların içinden en hızlı büyüyeni f(n) işlevinin derecesini belirler. Örneğin

edbd9c62ae8685c606a99b9bb493038b.

Özel olarak eğer bir işlev n terimine bağlı birçokterimli tarafından üstten sınırlandırılabiliyorsa o zaman n değeri sonsuza gittikçe çokterimlinin düşük dereceli terimleri ihmal edilebilir.
O(nc) ve O(cn) çok farklıdır. İkincisi çok çok daha hızlı büyür ve c sabitinin değeri, bu değer 1 sayısından büyük olduğu sürece, bu durumu değiştirmez. n'nin herhangi bir kuvvetinden daha hızlı büyüyen bir işleve yüksek çokterimli (superpolynomial) denir. cn biçimindeki herhangi bir üssel işlevden daha yavaş büyüyen işleve ise altüssel denir. Bir algoritmanın zaman karmaşıklığı hem yüksek çokterimli hem de altüssel olabilir, bu tür algoritmalara örnek olarak bilinen en hızlı çarpanlara ayırma algoritmaları verilebilir.
O(log n) tam olarak O(log(nc)) ile aynıdır. Logaritmalar arasındaki fark sadece sabit değerden kaynaklanan farktır (çünkü log(nc)=c log n) ve bundan ötürü büyük O gösteriminde ihmal edilir. Benzer şekilde farklı tabanlara göre yazılmış logaritmalar da denk kabul edilir.

Çarpma

08d19e823fb81a90af23a38f3f9fd393

Toplama

b53695d5357140e05e3cf85bf9dc0eca

Bir sabit ile çarpma

113659cfa489fff92607fcd556ec2494, k≠0

Bir sabit ile toplama

e05b82ccee8dae5610d33b1cdf050bc7 g(n) ∈ o(1) olmadığı takdirde ki bu durumda O(1)dir.

Diğer faydalı özellikler aşağıda belirtilmiştir.

İlişkili asimptotik gösterimler: O, o, Ω, ω, Θ, Õ

Büyük O işlevleri kıyaslamak için en sık kullanılan asimptotik gösterimdir ancak genellikle Θ yerine geçen resmi olmayan bir gösterim şeklidir (Theta, bk. aşağısı). Burada konuyla ilgili bazı gösterimleri "büyük O" cinsinden tanımlayacağız:

Gösterim Tanım Matematiksel tanım d9b0c3a5fdb436804c7a00f5571443b2 asimptotik üst sınır

0f4c8f6c8a4f310d727aeeddb4e33112 34c983f7b71cf5c6587598e40e8aecbb asimptotik olarak ihmal edilebilir

9b4e92a6ee6450db6ca957a5d2f6c55a d0ab994a416beabeeeef7aeb8325169b asimptotik alt sınır 8a6679cdcf6ceb25616325c3344b9cc5

841cb2659745f261061344fe1ef740f9 asimptotik baskın 1886f62e98ba285efa73b94999c73669 94227c841132a2c0d7cbf1daefab5ab9 asimptotik

keskin sınır 60485660b657f6e8f211023541522401 and 8a0457125390bd9036ab4c3dc7112bde f(n) = o(g(n)) ilişkisi "f(n) g(n)nin küçük o'sudur" olarak okunur. Sezgisel olarak bunun anlamı şu demektir: g(n), f(n) işlevinden çok daha hızlı büyür. Biçimsel olarak söylemek gerekirse bu ifadenin anlamı şudur:
f(n)/g(n) ifadesinin limiti sıfırdır.
Büyük O gösterimi bir yana, Θ ve Ω sembolleri ile yapılan gösterim de bilgisayar bilimlerinde çok sık kullanılır. "Küçük o" daha ziyade matematikte kullanılır ve bilgisayar bilimlerinde kullanımı daha nadirdir. Küçük ω nadiren kullanılır.
Genelgeçer kullanımda O Θ kullanılması gereken yerlerde kullanılır, söz gelimi keskin bir sınır kastetildiğinde. Örneğin birisi "Yığın sıralaması ortalama durumda O(n log n)dir" diyebilir oysa asıl kastedilen "Yığın sıralaması ortalama durumda Θ(n log n)dir". Her iki ifade de doğru olmakla birlikte ikincisi daha güçlü bir iddiadır.
Bilgisayar bilimlerinde kullanılan bir başka sembol ise Õdir (Yumuşak-O olarak okunur). f(n) = Õ(g(n)) şeklindeki gösterim f(n) = O(g(n) logkg(n)) (bazı k değerleri için) için kısa yoldur. Temelde logaritmik çarpanları ihmal eden büyük O gösteriminden başka bir şey değildir. Bu gösterim daha çok algoritma başarımında "küçük kusurlar"ı belirlemeye yönelik başarım kestirimlerinde kullanılır (zira logkn, herhangi bir k sabiti için, daima o(n)'dir).

Büyük O ve küçük o

Aşağıdaki özellikleri bilmek faydalı olabilir:
  • o(f ) + o(f ) ∈ o(f )
  • o(f ) o(g ) ∈ o(fg )
  • o(o(f )) ∈ o(f )
  • o(f ) ∈ O(f ) (ve dolayısıyla yukarıdaki özellikler o ve O ile kombinasyonların çoğuna uygulanabilir).

Çoklu değişkenler

Büyük O (ve küçük o ve Ω...) birden çok değişken için de kullanılabilir. Örneğin,

76fcde8bbe78d60b1282df6dcccafc1d

ifadesine göre öyle C ve N sabitleri vardır ki

9396179af32594736c5d90d1b59586db

Çift anlamlılığı engellemek için hangi değişkenin esas kabul edildiği daima belirtilmelidir çünkü

e9a50a8b8e5399629dbcbb303e008eae
ifadesi,
d0be57dfefce4380f4b5cb9d97f867e1

ifadesinden çok farklıdır.



Benzer Konular

18 Kasım 2016 / Misafir Türk ve İslam Dünyası
6 Nisan 2017 / iremnur Cevaplanmış
1 Aralık 2009 / Misafir Soru-Cevap
31 Ekim 2011 / Gabriella Tıp Bilimleri
8 Temmuz 2012 / Rower Bilim ww