• Bağış
  • Özyinelilerde Ana Teorem (Master Theorem)

    Yazan : Şadi Evren ŞEKER

    Bilgisayar bilimlerinin en önemli konularından birisi olan algoritma analizinin vazgeçilmez teoremidir. Kısaca özyineli (recurrence) bir problemin çözümü için kullanılır. Üç farklı değerin bulunmasını sağlar. Bunlar sırasıyla

    O (büyük O, big-oh) : En kötü durum analizidir (worst case analysis)

    (büyük teta, Theta) : Ortalama durum analizi (Average case anlaysis)
    (büyük omega) : En iyi durum analizi (Best case analysis)

    Olarak sıralanabilir. Bu değerlerin hesaplanabilmesi için ve ana metodun (master method) uygulanabilmesi için öncelikle aşağıdaki şekilde bir denkleme ihtiyaç duyulur.

    Burada önemli bir uyarı, ana metodun (master method) her denkleme uygulanamayacağıdır. Sadece yukarıdaki şekilde denklemlere uygulanabilir. Bu denklemde ayrıca , , ve fonksiyonu asimptotik olarak pozitif bir fonksiyon olmalıdır. Ayrıca gösterimi ile ya yada değeri kastedilmektedir. Başlangıç değeri olarak eşitliği birkaç terimde sağlanabilir. Yani denklem ilk terimler için kararsız çalışabilir ve ortalama olarak tek adımda sonuca erişebilir ancak unutulmaması gereken nokta özyineli denklemlerin çözümünde sonsuza giden analizden bahsedilmektedir. Yukarıdaki denklemin ayrıca bir özelliği de parçala ve fethet (divide and conquer) yaklaşımı olmasıdır. Dikkat edilirse problem b parçaya bölünmektedir. Yani her adımda a alt problem olarak tanımlanabilecek terim n/b boyutunda eleman içermektedir. fonkisyonu ise bu bölme ve birleştirme işlemlerinin maliyetini tutmaktadır.

    Master Theorem

    Yukarıdaki tanıma uygun olarak

    , , asimptotik pozitif, ve olarak tanımlanmış bir denklemimiz olsun.

    1. öyle bazı , dolayısıyla .
    2. , dolayısıyla .
    3. öyle bazı , ve şayet öyle bazı vardır ki büyük n tanımlamak yeterlidir, ve sonuçta denilebilir.

    Örnekler

    Birleştirme sıralamasının ana teorem ile karmaşılığının hesaplanması (Mahir Bey’in sorusu üzerine ekliyorum)

    Öncelikle birleştirme sıralamasının (Merge sort) özyineli denklemini (recursive equation) yazmaya çalışalım. Bilindiği üzere sıralama algoritmamız üzerinde işlem yaptığı veri yapısını (örneğin bir dizinin (array) ) parçalara bölerek ilerler. Kodu aşağıda verilmiştir:

    Yukarıdaki kodun 25. ve 26. satırlarında bölünen iki parça kendi içerisinde sıralanmaktadır. Bu parçalar problemin ikiye bölünmüş alt parçalarıdır.

    Bölünen parçalar tek elemanlı olunca birleştirme işlemi başlar. Bu durumu aşağıdaki şekilde formülleyebiliriz:

    Yukarıdaki formülde dikkat edileceği üzere eleman sayısının tek olması durumunda sıralama işleminin çalışma süresi 1 olmaktadır. Bunun dışında problem iki ayrı n/2 parçaya bölünmektedir. n değerinin çift sayı olmaması gibi durumlar düşünülecek olursa, bir elemanın ya sağda ya da soldaki kısma dahil olması dolayısıyla parçalardan birisi diğerine göre bir eleman fazla alabilir. Bunun için yukarıdaki denklemde parçalardan birisinin tavan değeri alınırken diğerinin taban değeri alınmıştır.

    Sonuç olarak n>1 durumu için iki ayrı parçanın ayrı ayrı hesaplanan özyineli (recursive) denklemlerinin toplamına dn gibi sabit bir değer ilave edilmektedir. Bu değer birleştirme işleminin o anlık maliyetidir.

    Yukarıdaki denklemin çözümünü kolaylaştırmak için n = 2k olarak kabul edelim. Bu durumda denklemi aşağıdaki şekilde açmak mümkün olabilir:

    Bu denklemde bölme işlemini yapar ve değerleri toplarsak

    Yukarıdaki bu denklemi açarak bir ve iki seviye daha ilerletecek olursak:

    Denlemleri elde edilir. Bu denklemlerde dikkat edileceği üzere d2k değerinin çarpanı açılan seviye ile aynıdır. Dolayısıyla denklemin son haliyle ana teoremi uygulayabiliriz. f(n)=n için nlogba değeriolarak 1 yazılabilir. Bu durumda teoremimizde yazdığı üzere T(n) = Θ ( n log n) olarak fonksiyonun karmaşıklığı bulunmuş olunur.

    Benzer Yazılar:

    Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Özyinelilerde Ana Teorem (Master Theorem)' isimli yazı 02 Jun 2009 tarihinde, saat: 01:53 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 1140 defa okunmuştur.

    Benzer yazıları Bilgisayar Matematiği, algoritma analizi (teory of algorithms) kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


    Category: Bilgisayar Matematiği, algoritma analizi (teory of algorithms)
    3 responses to “Özyinelilerde Ana Teorem (Master Theorem)”
    1. Mahir says:

      hocam ornek bir programlaam fonksiyonu icin yapabilir misiniz bir tane ?

      mesela
      factryl(x){return x* factryl(x-1);}

      Simdiden tesekkurler

    2. Şadi Evren ŞEKER says:

      Bilerek mi sordunuz bilmiyorum ancak, özyinelilerde ana teorem (master theorem), özyineli faktöriyel fonksiyonu veya fibonacci fonksiyonu gibi fonksiyonlar için kullanılamaz. Bunun sebebi ilgili fonksiyonların ana teorem ile gösterilebilir birer denkleminin kurulamamasıdır. Ana teorem ( Master Theorem) uygulanabildiği problemler, parçala fethed (divide and conquere) yaklaşımı ile çözülebilen ve problemin üzerinde çalıştığı etki alanını (domain) her defasında parçalara ayıran (ve elbette daha sonra birleştiren) algoritma tipleridir. Faktöriyel fonksiyonu ise ne yazık ki bu şekilde problemi parçalara bölmek gibi bir özyinelemeye sahip değildir.

      Ancak sorunuzu bir kod üzerinden ana teoremin nasıl çalıştığı şeklinde ele alırsak yazının içerisine birazdan birleştirme sıralaması (merge sort) için nasıl kullanabileceğimizi eklemeye çalışırım.

      başarılar

    3. Mahir says:

      Peki hocam bekliyorum. Eger siz bana parcalanabilen bir ornekte anlatabilirseniz, ben neden recursive fonksiyonlarda ve fibonacci fonksiyonunda tanimlayamayacagimizi cok daha iyi anlarim.
      Saygilar

    Leave a Reply