Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.

Slides:



Advertisements
Benzer bir sunumlar
Yinelemeli Algoritma Analizi & Asimptotik Notasyon
Advertisements

Diziler.
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
void medyan(int cevap[]) { int j; siralama(cevap);
Soru1: kuvvet(taban,us) Şeklinde bir yinelenen fonksiyon yazın
Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
Diziler (Arrays).
Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
The if statement. if Şartlı kontrol Koşul değimi doğru (1) yada yanlış (0) değeri üretir. Şartın doğru olması durumunda if satırından sonraki değimler.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Algoritmalar ve Programlama I Ders 8:DİZİ (VEKTÖR) KAVRAMI
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Algoritma.  Algoritma, belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.  Başka bir deyişle; bir sorunu çözebilmek için gerekli olan.
SAYISAL DEVRELER BÖLÜM-2 Sayı Sistemleri ve Kodlar
BÖLÜM 1 TEMEL KAVRAMLAR. BÖLÜM 1 TEMEL KAVRAMLAR.
Greedy Algorithms.
BULUŞ YOLUYLA ÖĞRETİM JEROME BRUNER.
OLASILIK TEOREMLERİ Permütasyon
Örnek Sorular Bilgisayar Programlama BIL 107. Soru 1: Ekran çıktısında 66 yazması için boşlukları doldurunuz ______ i = 'A'; printf(____, i__); CEVAP:
ÖTÖ 451 Okul Yönetiminde Bilgisayar Uygulamaları R. Orçun Madran.
Bölüm 5 Döngü Komutları while Komutu while Komutu Diğer Operatörler (Bileşik atama, artırma ve azaltma operatörleri ) Diğer Operatörler (Bileşik atama,
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
BİLGİSAYAR PROGRAMLAMA DERSİ
Fonksiyonel Programlama
OYUN VE OYUNCAĞIN ÇOCUK GELİŞİMİ ÜZERİNE ETKİLERİ
PROGRAMLAMAYA GİRİŞ VE ALGORİTMA
Tüm ikililer arasında en kısa yollar
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
DOĞAL SAYILAR TAM SAYILAR
İleri Algoritma Analizi
BİLİŞİM SİSTEMLERİ GÜVENLİĞİ (2016)
Algoritma ve Programlamaya Giriş
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
VELİLER İÇİN ANKET GİRİŞİ
BİYOİNFORMATİK NEDİR? BİYOİNFORMATİKTE KULLANILAN SINIFLAMA YÖNTEMLERİ
Ağırlıksız ikili eşleştirme
Eğitim Siteleri
Ders 8 Değerlendirme ve kavram öğretimi
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
İleri Algoritma Analizi
PROBLEM ÇÖZME VE ALGORİTMALAR
Bilgisayar Programlamasına ve Veri Analizine Giriş - VI
Bölüm 7 İfadeler ve atamalar.
Meriç ÇETİN Pamukkale Üniversitesi Bilgisayar Mühendisliği Bölümü
İleri Algoritma Analizi
EĞİTİME GİRİŞ Mehmet Akif Ersoy Üniversitesi
B+-Ağaçları.
Doğrusal Mantık Yapısı İle Problem Çözme
PROGRAMLAMAYA GİRİŞ VE ALGORİTMA
Algoritmalar II Ders 15 En Küçük Örten Ağaçlar.
İleri Algoritma Analizi
LOJİK KAPILAR (GATES) ‘Değil’ veya ‘Tümleme’ Kapısı (NOT Gate)
Veri Yapıları ve Algoritmalar
Karar Yapıları İle Problem Çözme
Sonlu Özdevinirlere Giriş
NİŞANTAŞI ÜNİVERSİTESİ
Değerler ve Değişkenler
NİŞANTAŞI ÜNİVERSİTESİ
BLM-111 PROGRAMLAMA DİLLERİ I Ders-10 Diziler
MTM216 GÖRSEL PROGRAMLAMA
Tanımlar Sonlu Özdevinirlerle Eşdeğerlik
MTM216 GÖRSEL PROGRAMLAMA
İleri Algoritma Analizi
Algoritmalar II Ders 15 En Küçük Örten Ağaçlar.
Chapter 4 Divide-and-Conquer
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

Hızlı sıralama (quick sort) algoritması En çok tercih edilen sıralama algoritmalarından biridir. Bu algoritmadaki çözüm yaklaşım “parçala ve çözümle” ilkesine göre çalışmaktadır. Öncelikle sıralanacak diziden belirli bir kritere göre parçalayıcı bir eleman (örneğin orta elemen) seçilir. Sıralanacak dizi bu elemandan küçük eşit ve bu elemandan büyük olacak şekilde iki alt diziye bölünür. Bu işlemin ardından yukarıdaki işlem her alt dizi için özyinelemeli olarak tekrarlanır.

Hızlı sıralama (quick sort) algoritması C programlamada fonksiyon kavramını incelediğimiz için bu problemin çözümünde yapısal programlamanın çözümü daha kolay alt problemlere (modüllere) bölünme ilkesinden faydalanabiliriz. Her bir modülü daha kolay çözülebilir bir altprogram (yordam) olarak ele alabiliriz. Bu işlem, aşağıdaki şekilde de görülebileceği gibi her bir modülün kolaylıkla çözülebileceği seviyeye kadar devam eder.

#include void oku (void); void bol(int,int); void hsirala(int,int); void yaz (void); int i,n,ort; int A[100]; void main(void) { oku(); hsirala(1,n); yaz(); } void oku(void) { clrscr(); printf("dizi eleman sayisini giriniz: "); scanf("%d",&n); for(i=1;i<=n;i++) {printf("dizi elemanini girin: "); scanf("%d",&A[i]); } } void bol(int x,int y) { int alt,ust,g,eksen; eksen=A[(x+y)/2]; alt=x; ust=y; do { while(A[alt]<eksen) alt++; while(A[ust]>eksen) ust--; if(alt<=ust) { if(alt!=ust) { g=A[alt]; A[alt]=A[ust]; A[ust]=g; } alt++; ust--; } } while(alt<=ust); ort=ust; } void hsirala(int sol, int sag) {if (sol<sag) { bol(sol,sag); if(sol<ort) hsirala(sol, ort); if(sag>ort+1) hsirala(ort+1,sag); }

void yaz(void) {clrscr(); for(i=1;i<=n;i++) printf("%d ",A[i]); printf(" \n"); getch(); }

Birleştirmeli sıralama (merge sort) algoritması Bu sıralama algoritması “parçala çözümle ve birleştir” ilkesini kullanır. Bu algoritmada sıralanacak olan dizi ortadan iki alt diziye bölünür. Bu algoritmada öncelikle sıralanacak dizi birer elemandan oluşan alt diziler elde edilene kadar özyinelemeli olarak ikiye bölünür. Ardından alt diziler sıralı olarak birleştirilerek sıralı dizi elde edilir; Bu problemin çözümünde yapısal programlamanın çözümü daha kolay alt problemlere (modüllere) bölünme ilkesinden faydalanabiliriz. Her bir modülü daha kolay çözülebilir bir altprogram (yordam) olarak ele alabiliriz. Bu işlem, aşağıdaki şekilde de görülebileceği gibi her bir modülün kolaylıkla çözülebileceği seviyeye kadar devam eder.

#include void oku (void); void bol(int,int); void birles(int,int,int); void yaz (void); int n; int A[100]; void main(void) { oku(); bol(1,n); yaz(); } void oku(void) { int i; clrscr(); printf("dizi eleman sayisini giriniz: "); scanf("%d",&n); for(i=1;i<=n;i++) {printf("dizi elemanini girin: "); scanf("%d",&A[i]); } } void bol(int alt,int ust) { int ort,alts,usts; if(alt<ust) { alts=alt; usts=ust; ort=(alts+usts)/2; bol(alts,ort); bol(ort+1,usts); birles(alts,ort,usts); } }

void birles(int alts, int ort, int usts) { int i,ass,usb,g; ass=ort; usb=ort+1; while ((alts<=ass)&&(usb<=u sts)) { if (A[alts]<A[usb]) alts++; else { g=A[usb]; for (i=usb- 1;i>=alts;i--) A[i+1]=A[i]; A[alts]=g; alts++;ass++;usb++; } } } void yaz(void) {int i; clrscr(); for(i=1;i<=n;i++) printf("%d ",A[i]); printf(" \n"); getch(); }

Kümeleme/yığın sıralama (heap sort) algoritması. Kümeleme(heap) veri yapısı ikili ağaçların özel bir halidir. Bu yapıda her ebeveyn düğümün çocuk düğümlerin kendisinden küçük yada kendisine eşit olması kuralı esas alınır (bunun terside kullanılabilir).

Oluşan ağaç (heap) yapısının dizilerde gösterimi ise aşağıdaki şekilde olur; Ağacın en büyük değerli elemanı (root node: kök düğüm) her zaman dizinin ilk elemanıdır. Dizi üzerinde her i. ebeveyn düğümün çocuk düğümleri 2i. ve (2i+1). konumda olacaktır. Verilen bir diziden kümeleme (heap) oluşturmak için her i. ebeveyn düğümle 2i. ve (2i+1). çocuk düğümleri karşılaştırıp ebeveyn düğümden büyük olan çocuk düğümleri ebeveyn düğümle yer değiştirmemiz gerekecektir. Bu işlemi dizinin orta elemanına kadar yapmamız yeterlidir. Yarıdan sonraki diğer elemanlar ebeveyn olmayan çocuk elemanlar olduğundan bunlar için işlem yapmaya gerek yoktur.

Elde edilen kümelenmiş diziyi sıralamak için ise, kümenin ilk elemanın dizinin en büyük elemanı olduğunu bildiğimizden dizinin ilk elemanı ile son elemanının yerini değiştirerek en büyük elemanı sona atmış oluruz. Sonuncu elemanı içermeyen yeni dizi tekrar kümeleme işlemine tabi tutulur. Bu yeni dizide de ilk eleman ile son elemanın yeri değiştirilir. Bu yineleme işlemi dizinin boyu bir oluncaya kadar devam eder. Bu problemin çözümünde de özyinelemeli modüler yordamlar kullanılacaktır.

Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz