ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

Benzer belgeler
Özyineleme (Recursion)

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#3: ALGORİTMA ANALİZİ#2

ÖZYİNELEME RECURSION. Yrd. Doç. Dr. Aybars UĞUR

ÖZYİNELEME RECURSION. Doç. Dr. Aybars UĞUR

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

Özyineleme {\} /\ Suhap SAHIN Onur GÖK

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-1 Kapsama Kuralları & Rasgele Sayı Üretimi & Rekürsif (Özyinelemeli) Fonksiyonlar

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. A. Burak İNNER Bilgisayar Mühendisliği

F(A, N, K) // A dizi; N, K integer if N<0 then return K; if A[N]>K then K = A[N]; return F(A, N-1, K);

3.Hafta Master Teorem ve Böl-Fethet Metodu

Algoritma ve Programlama II Recursive Fonksiyonlar Dosyalama

Yrd. Doç. Dr. Caner ÖZCAN

Algoritmalar ve Programlama. Algoritma

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I

Özyineleme (Recursion)

ÖZEL EGE LİSESİ FİBONACCİ DİZİLERİ YARDIMIYLA DEĞERİNİ HESAPLAYAN BİR FORMÜL

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

1 PROGRAMLAMAYA GİRİŞ

ÖZYİNELEME (RECURSION)

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

ALTIN ORAN ARAMA (GOLDEN SECTION SEARCH) METODU

Python ile Programlamaya Giriş DERS 9: FONKSİYONLAR DR. HÜSEYİN BAHTİYAR

Dinamik Programlama. En uzun ortak altdizi En uygun altyapı Altproblemlerin çakışması

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Özyineleme (recursion)

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

Altın Oran Arama Metodu(Golden Search)

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Eln 1002 Bilgisayar Programlama II

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

İÇERİK PROGRAMLAMAYA GİRİŞ ALGORİTMA AKIŞ DİYAGRAMLARI PROGRAMLAMA DİLLERİ JAVA DİLİNİN YAPISI JAVA DA KULLANILAN VERİ TİPLERİ JAVA DA PROGRAM YAZMA

BİLİŞİM TEKNOLOJİLERİ 6. SINIF DERS NOTLARI 2

Programlama Giriş. 17 Ekim 2015 Cumartesi Yrd. Doç. Dr. Mustafa YANARTAŞ 1

YÖNEYLEM ARAŞTIRMASI - III

BİL-142 Bilgisayar Programlama II

Genel Programlama I

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

BİLGİSAYAR PROGRAMLAMA. Algoritma ve Akış Şemaları

ÖZYİNELEME (RECURSION)

Okut. Yüksel YURTAY. İletişim : (264) Sayısal Analiz. Algoritma & Matlab.

TEMEL BİLGİSAYAR BİLİMLERİ. Programcılık, problem çözme ve algoritma oluşturma

Algoritma Geliştirme ve Veri Yapıları 1 Temel Algoritma Kavramları. Mustafa Kemal Üniversitesi

Diziler (Arrays) Çok Boyutlu Diziler

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

NESNEYE YÖNELİK PROGRAMLAMA

ELN1001 BİLGİSAYAR PROGRAMLAMA I

BLM 111 Algoritma ve Programlama I Güz 2018

C PROGRAMLAMA YRD.DOÇ.DR. BUKET DOĞAN PROGRAM - ALGORİTMA AKIŞ ŞEMASI

BLM111 Programlama Dilleri I. Hafta 10 Diziler. Yrd. Doç. Dr. Caner ÖZCAN

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

ALGORİTMA VE PROGRAMLAMA I

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

Algoritma Analizi Big O

Algoritmalara Giriş J/18.401J Ders 15. Dinamik Programlama En uzun ortak altdizi En uygun altyapı Altproblemlerin çakışması

Algoritmalar ve Karmaşıklık

Yrd. Doç. Dr. Caner ÖZCAN

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA

BÖLÜM. Özyineleme Özyineleme Nedir? 10.3 Özyineleme Örnek. Bölümün İçindekileri

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

C++ Dilinde Bazı Temel Algoritmalar

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

C Programlama Dili (MCS116) Ders Detayları

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ (Algoritma Geliştirmek, Satır Kod)

Nesne Yönelimli Programlama

Algoritma ve Akış Diyagramları

BMT 101 Algoritma ve Programlama I 3. Hafta. Yük. Müh. Köksal GÜNDOĞDU 1

ALGORİTMA VE PROGRAMLAMA II

Algoritmalar. DERS 3 Böl ve Fethet(Divide and Conquer) İkili arama Sayı üstelleri Fibonacci sayıları Matriks çarpımı Strassen in algoritması

C++ Dersi: Nesne Tabanlı Programlama

Algoritma Geliştirme ve Veri Yapıları 5 Rekürsif Algoritmalar. Mustafa Kemal Üniversitesi

ÖDEV (Vize Dönemi) CEVAPLAR. 1. Ekrana Merhaba Dünya! yazdıran algoritmanın akış diyagramını çiziniz ve sözde kod olarak yazınız.

SAYISAL ÇÖZÜMLEME. Yrd.Doç.Dr.Esra Tunç Görmüş. 1.Hafta

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

ÜNİT E ÜNİTE GİRİŞ. Algoritma Mantığı. Algoritma Özellikleri PROGRAMLAMA TEMELLERİ ÜNİTE 3 ALGORİTMA

Örnek...3 : Aşağıdaki ifadelerden hangileri bir dizinin genel terim i olabilir? Örnek...4 : Genel terimi w n. Örnek...1 : Örnek...5 : Genel terimi r n

FBEB-512 C++ ile Nesne Tabanlı Programlama Güz 2009 (1. Hafta) (Yrd. Doç. Dr. Deniz Dal)

ALGORİTMA VE PROGRAMLAMA I

METASEZGİSEL YÖNTEMLER

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

b) Algoritmanızın en kötü durumda işlem zamanını asimptotik olarak bulunuz

BİLGİSAYAR PROGRAMLAMA MATLAB

YZM 2116 Veri Yapıları

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

İLERİ ALGORİTMA ANALİZİ-2

BMT 206 Ayrık Matematik. Yük. Müh. Köksal GÜNDOĞDU 1

ALGORİTMA VE PROGRAMLAMA II

Ders Adı Kodu Yarıyılı T+U Saati Ulusal Kredisi AKTS

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

HSancak Nesne Tabanlı Programlama I Ders Notları

2. Dereceden Denklemin Köklerini Bulan Program

Transkript:

ALGORİTMA ANALİZİ Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

2 Özyinelemeler veya artık teknik Türkçeye girmiş olan rekürsiflik en çok duyulan fakat kullanımında zorluklar görülen tekniklerdendir. Bu bölümde algoritmalarda özyinelemeli tekniklerin kullanımına değinilecektir.

3 İlk önce özyinelemeliğin bir algoritma olmayıp sadece algoritma tasarımında kullanılan bir programlama tekniği olduğuna değinmek gerekir. Ancak birçok algoritmanın uygulanmasında özyinelemeli yaklaşımın uygulanabilirliğinin bilinmesi gerekir

4 Genellikle bu yöntem n boyutlu problemin daha küçük boyutları ele alınarak benzeri şekilde çözümünde kullanılmaktadır. Problem çözümlemede problemin daha küçük alt problemlere parçalanarak çözümlenmesine böl ve yönet (devide and conquer) yaklaşımı denir.

5 Divide-and-conquer metoduyla algoritma tasarımı: Problem kendisine benzer küçük boyutlu alt problemlere bölünür. Alt problemler çözülür ve bulunan çözümler birleştirilir. Divide: Problem iki veya daha fazla alt probleme bölünür Conquer: Divide-and-conquer özyinelemeli (recursively) olarak kullanılarak alt problemleri çözer Combine: Alt problemlerin çözümleri alınır ve orijinal problemin çözümü olacak şekilde birleştirilir.

6 Bazı problemlerin çözümünde özyinelemeli yaklaşım mecburi olsa da uygulamalarda algoritmaların daha derinden incelenmesi ve sonra özyinelemeli şekilde çözüleceğine karar verilmelidir. Özyineleme (Latince geri gelme anlamında olan recursio kelimesinden) böl ve yönet yaklaşımlı olup programın icrası sırasında bir fonksiyonun veya sürecin kendisini direkt veya dolaylı yolla diğer fonksiyon ve süreçler yardımıyla tekrar çağırmasıdır.

7

8 Özyinelemelerin sonsuz olarak devam etmesinin önlenmesi için bitiş koşulunun olması gerekmektedir. Dolayısıyla özyinelemeli programlarda bu sürecin ne zaman veya hangi koşullarda durması gerektiği önceden bilinmelidir. Fakat program devamlı kendi kendini çağırıyorsa, o nasıl durur.

9 Tanım gereği fonksiyon kendi kendini çağırdığında genellikle her seferinde daha küçük boyutlu problem ele alınacağından sürecin sonsuz devam edemeyeceği anlaşılmaktadır. Özyineleme işlemi durdurma durumu sağlanınca sonlandırılır. Genel yazımı: if (durdurma durumu sağlandıysa) else çözümü yap problemi özyineleme kullanarak indirge

10 Özyineleme programlamada bazı algoritmaların anlaşılmasında kolaylıklar sağlasa da birçok durumlarda olumsuz yönlerini de göstermektedir Devamlı olarak fonksiyonun kendi kendini çağırması belirli işlem yüküne de sebep olacaktır. Çünkü her fonksiyonun tekrar çağırılması birçok atama işleminin gerçekleştirilmesinin ve yeni değişkenlere uygun bölge ayırımını gerektirmektedir. Bu nedenle aynı özyinelemede süreç kendisini çok sayıda çağırdığından bellek ve zaman problemi ortaya çıkacaktır. Dolayısıyla eğer programın özyinelemesiz çözümü mümkünse bu çözüm biçimi tercih edilmedir.

11 Şimdi kısaca problemler üzerinde özyinelemeli yaklaşımın olumu ve olumsuz yönlerini ele alalım. Çarpımı toplamla ifade ettiğimizde veya toplamı ardışık olarak 1 ler şeklinde gösterdiğimizde rekursifliğe başvurmaktayız: 6*5=(6*4)+6=((6*3)+6)+6=(((6*2)+6)+6)+6=((((6*1)+6)+6)+6)+6=6+6+6+6+6k=30 Veya 6+5=(6+4)+1=((6+3)+1)+1)=(((6+2)+1)+1)+1=((((6+1)+1)+1)+1)+1=6+1+1+1+1+1=11

12 Benzeri şekilde n sayısının toplamını da rekürsif olarak bulabiliriz. Gauss un ünlü S n = a 1+a n n formülünde faklı olarak 2 yaptığımız işlem bu sayıların ardışık toplanması şeklinde olmuştur. İşte eğer n sayısının toplamının bulunması isteniyorsa (n-1) sayının toplamını bularak üzerine n eklemekle sonuca ulaşmak mümkündür.

13 Benzeri şekilde problem boyutunu küçülterek istenen çözüm elde edilmektedir. Fakat bu sonsuz hesaplamaların sonlandırılması için belirli bir gerçeğe örneğin n=1 ise sonuç 1 dir sonlandırılmasına ihtiyaç vardır.

14 Aşağıda n tamsayının toplamını bulan rekürsif program gösterilmiştir. 1 int toplam (int n) 2 { 3 İf (n==1) 4 return 1; 5 else 6 Return toplam(n-1)+n; 7 }

15 Özyinelemeli algoritmalar anlaşıldığı gibi iki temel kısımdan oluşmaktadır. Bunlar; Algoritmanın sonlandırılmasını sağlayan bitiş kısmı ve, Fonksiyonun belirtilen sayıda tekrarlanmasını sağlayan gövde kısmıdır.

16 Faktöriyelin özyineli olarak hesaplanması 0!=1 olduğundan n>=1 ise n!=n*(n-1)! Burada 0!=1 bitiş koşulu olmaktadır. Fakat bu koşul programcıya bağlı olarak örneğin 2!=2 şeklinde de değiştirilebilir. int faktoriyel (int n) { if (n==0) return 1; return n*faktoriyel(n-1); }

17 faktoriyel( 5 ) için çalışmasının stack ile gösterimi.

18 fact(3); için gerçekleşen işlemler aşağıdaki gibidir.

19

20 Genellikle iterative fonksiyonlar zaman ve yer bakımından daha etkindirler. Iterative algoritma döngü yapısını kullanır. Özyineleme algoritması dallanma (branching) algoritmasını kullanır. Fonksiyon özyineli olarak her çağrılışında yerel değişkenler ve parametreler için bellekte yer ayrılır.

21 Özyineleme problemin çözümünü basitleştirebilir, sonuç genellikle kısadır ve kod kolayca anlaşılabilir. Her özyinelemeli olarak tanımlanmış problemin iterative çözümüne geçiş yapılabilir.

22 Örnek : Fibonacci dizisinin özyineleme ile bulunması: Fibonacci dizisinde her eleman kendinden önceki iki elemanın toplamı şeklinde hesaplanır. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,... 1.eleman : 0 2.eleman : 1 3.eleman : 0+1 = 1 4.eleman : 1+1 = 2 5.eleman : 1+2 = 3 6.eleman : 2+3 = 5

23 Örnek : Fibonacci dizisinin özyineleme ile bulunması (devam): Fibonacci dizisinin tanımı: fib(n) = n if ((n==0) (n==1)) fib(n) = fib(n-2) + fib(n-1) if (n>=2) Fibonacci dizisi program: public int recfib(int n) { if (n<=1) return n; else return recfib(n-1)+recfib(n-2); }

24 Fibonacci Serisi problemini iteratif yöntemle de kodlayın. Fibonacci(45) ve sonrası değerler için recursive ve iteratif sonuçları inceleyerek sonuçları tartışın.