f(x) ve g(x) reel sayılarda tanımlı iki fonksiyon olmak üzere, x > k olacak şekilde bir k vardır öyle ki,

Benzer belgeler
BİL-341 ALGORİTMALAR BÜYÜK O NOTASYONU AHMET ATAKAN atakanahmet@hotmail.com KIRGIZİSTAN-TÜRKİYE MANAS ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

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

YZM 2116 Veri Yapıları

VERİ YAPILARI DERS NOTLARI BÖLÜM 2 ALGORİTMA ANALİZİ. Yard. Doç. Dr. Deniz KILINÇ

Algoritma Analizi ve Büyük O Notasyonu. Şadi Evren ŞEKER YouTube: Bilgisayar Kavramları

Algoritmalar. Arama Problemi ve Analizi. Bahar 2016 Doç. Dr. Suat Özdemir 1

Algoritma Analizi. Özelliklerinin analizi Algoritmanın çalışma zamanı Hafızada kapladığı alan

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

O NOTASYONU. Abdullah Gazi Emre DAĞLI

Alıştırma 1: Yineleme

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Algoritmaların Karşılaştırılması. Doç. Dr. Aybars UĞUR

VERİ YAPILARI VE PROGRAMLAMA (BTP104)

Algoritmalar. Sıralama Problemi ve Analizi. Bahar 2017 Doç. Dr. Suat Özdemir 1

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);

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

Algoritma Analizi Big O

Bölüm Özeti. Algoritmalar. Fonksiyonların Büyümesi. Algoritmaların Karmaşıklığı. Örnek Algoritmalar Algoritmik Paradigmalar

HACETTEPE ÜNİVERSİTESİ BAHAR DÖNEMİ

Selection Sort Insertion Sort

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

Algoritmalar, Akış Şemaları ve O() Karmaşıklık Notasyonu

Algoritma ve Programlamaya Giriş

HOMOGEN OLMAYAN DENKLEMLER

ALGORİTMA VE PROGRAMLAMA I

SÜREKLİLİK. 9.1 Süreklilik ve Süreksizlik Kavramları

Fonksiyonlarda limiti öğrenirken değişkenlerin limitini ve sağdan-soldan limit kavramlarını öğreneceksiniz.

Algoritmalar ve Karmaşıklık

A (B C) = {4, 5, 6} {2, 3, 4, 6, 7} = {4, 6} ; ve (A B) (A C) = {4, 6} {6} = {4, 6}. 6. Dağıtıcı yasayı Venn şeması yoluyla doğrulayınız.

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

ALGORİTMA İ VE PROGRAMLAMA

BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI. Kafkas Üniversitesi Mühendislik Fakültesi

Tanım 2.1. X boş olmayan bir küme olmak üzere X den X üzerine bire-bir fonksiyona permütasyon denir.

5. Salih Zeki Matematik Araştırma Projeleri Yarışması PROJENİN ADI DİZİ DİZİ ÜRETEÇ PROJEYİ HAZIRLAYAN ESRA DAĞ ELİF BETÜL ACAR

ALGORİTMA VE PROGRAMLAMA I

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

Ayrık Fourier Dönüşümü

Bu tanım aralığı pozitif tam sayılar olan f(n) fonksiyonunun değişim aralığı n= 1, 2, 3,, n,

Dr. Fatih AY Tel: fatihay@fatihay.net

MAK 210 SAYISAL ANALİZ

VERİ YAPILARI DATA STRUCTURE GİRİŞ

MATEMATiKSEL iktisat

BMT207 VERİ YAPILARI DATA STRUCTURE

İleri Diferansiyel Denklemler

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

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

fonksiyonu için in aralığındaki bütün değerleri için sürekli olsun. in bu aralıktaki olsun. Fonksiyonda meydana gelen artma miktarı

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Şekil 7.1 Bir tankta sıvı birikimi

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-7 Sıralama Algoritmaları

BLM-431 YAPAY ZEKA. Ders-5 Bilgili Arama Yöntemleri. Yrd. Doç. Dr. Ümit ATİLA

TÜREV VE UYGULAMALARI

Yrd. Doç. Dr. Ümit ATİLA

Bir üstel fonksiyondur. Tabanı 2 dir. Bu fonksiyonun değerlerinin ne kadar hızlı arttığına dikkat edelim. f(3) = 2 3 = 8. f(10) = 2 10 = 1024

Length: metin uzunluğunu yada diğer bir deyişle dizi elaman sayısını döndürür.

Ö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.

1- Sayı - Tam sayıları ifade etmek için kullanılır. İfade edilen değişkene isim ve değer verilir.

Temel Kavramlar. (r) Sıfırdan farklı kompleks sayılar kümesi: C. (i) Rasyonel sayılar kümesi: Q = { a b

1 RUBY HAKINDA 1 Ruby nin Gelişim Hikayesi 1 Neden Ruby? 1 Neden Bu Kadar Popüler? 2

Olimpiyat Soruları. sonuçları tekrar fonksiyonda yerine koyup çıkan tüm sonuçları toplayan program (iterasyon sayısı girilecek)

Bilgisayar programlamanın üç temel mantık yapısından biridir. Diğer ikisi ise Seçilim(Selection) ve Döngü(Loop, Iteration)dür.

Hatalar ve Bilgisayar Aritmetiği

Algoritmalar. Heap Sort. Bahar 2017 Doç. Dr. Suat Özdemir 1

YZM VERİ YAPILARI DERS#9: HASH FONKSİYONLARI

Gezgin Satıcı Probleminin İkili Kodlanmış Genetik Algoritmalarla Çözümünde Yeni Bir Yaklaşım. Mehmet Ali Aytekin Tahir Emre Kalaycı

İÇİNDEKİLER ÖNSÖZ Bölüm 1 SAYILAR 11 Bölüm 2 KÜMELER 31 Bölüm 3 FONKSİYONLAR

BİL-142 Bilgisayar Programlama II

Öğrenim Kazanımları Bu programı başarı ile tamamlayan öğrenci;

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

Algoritma ve Akış Diyagramları

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

Genel Programlama II

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

ALGORİTMA VE PROGRAMLAMA I

2. SİMETRİK GRUPLAR. Tanım 2.1. X boş olmayan bir küme olmak üzere X den X e birebir örten fonksiyona permütasyon denir.

YZM 2116 Veri Yapıları

Standard Template Library

ÖĞRENME ALANI TEMEL MATEMATİK BÖLÜM TÜREV. ALT ÖĞRENME ALANLARI 1) Türev 2) Türev Uygulamaları TÜREV

Zeki Optimizasyon Teknikleri

T I M U R K A R A Ç AY - H AY D A R E Ş C A L C U L U S S E Ç K I N YAY I N C I L I K A N K A R A

PROGRAMLAMAYA GİRİŞ VE ALGORİTMA «YTÜROK» EĞİTMEN:REHA ÖZGÜR ŞİMŞEK

13.Konu Reel sayılar

Prof. Dr. Mahmut Koçak.

Genetik Algoritmalar. Bölüm 1. Optimizasyon. Yrd. Doç. Dr. Adem Tuncer E-posta:

YZM 2116 Veri Yapıları

x e göre türev y sabit kabul edilir. y ye göre türev x sabit kabul edilir.

4- ALGORİTMA (ALGORITHM)

BMB204. Veri Yapıları Ders 12. Dizgi Eşleme (String Matching) Algoritmaları İleri Veri Yapıları

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

Yrd. Doç. Dr. Caner ÖZCAN

ALGORİTMA VE PROGRAMLAMA II

MAK 210 SAYISAL ANALİZ

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

1. LabVIEW ile Programlama

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları

İleri Yöneylem Araştırması Uygulamaları Tam Sayılı Programlama

İleri Diferansiyel Denklemler

Transkript:

Algoritma Karmaşıklığı ve Büyük O Gösterimi (Big O Notation) Yazdığımız bir algoritmanın doğru çalıştığından emin olmakla birlikte bu algoritmayı, daha önce yazılmış ve aynı sonucu veren başka algoritmalarla karşılaştırmak isteyebilirsiniz. Burada teknik olarak değerlendirilecek başlıca iki başlık söz konusudur. Birincisi algoritmaların bellek kullanım miktarı, ikincisi ise algoritmaların hesaplama yapmak için harcadığı süredir. Mesela yazdığınız bir algoritma aynı işi yapan diğer bir algoritmadan daha hızlı çalışmasına rağmen çoğu bilgisayar için bellek aşımı gerçekleştiriyorsa bu pek uygun olmayacaktır. Elbette diğer algoritmalarla karşılaştırma yapmak yerine, yazdığınız bir algoritmanın tek başına analizini yapmak da isteyebilirsiniz. Bunun için yazdığınız algoritmaları ve varsa karşılaştıracağınız algoritmaları tek tek çalıştırıp hız ve bellek testi yapabilirsiniz. Ama bu tahmin edebileceğiniz gibi hem zaman açısından sıkıntı yaratır hem de elde edeceğiniz veriler donanımsal ve sistemsel değişikliklerden dolayı bilimsel olmaz.(bu gibi işlemleri performans testi olarak da düşünebiliriz). Bu durumda matematiksel olarak ifade edebileceğimiz, donanımsal ve sistemsel bağımlılığı olmayan bir yönteme ihtiyacımız olacaktır. Bu yöntemle algoritmamıza girdi olarak verilen verilerin miktarına bağlı olarak sonuçlar üretiriz. İşte elde edilen bu sonuçlar ilgili algoritmanın karmaşıklığı olarak tanımlanır. Bir algoritmanın karmaşıklığı performansını etkiler ama karmaşıklık ile performans farklı kavramlardır görüldüğü gibi. Karmaşıklık hesabı yapacağımız asimptotik notasyonlardan en çok kullanılanını açıklamaya çalışayım. Büyük O Notasyonu (Big O Notation): O notasyonu ilk olarak 1894 yılında Alman matematikçi Bachmann tarafından kullanılmış ve Landau tarafından da yaygınlaştırılmıştır. Bu yüzden adına Landau notasyonu veya Bachmann Landau notasyonu da denmektedir. Algoritmanın en kötü durum analizini yapmak için kullanılan notasyondur. Matematiksel olarak şöyle tanımlanır: f(x) ve g(x) reel sayılarda tanımlı iki fonksiyon olmak üzere, x > k olacak şekilde bir k vardır öyle ki, f(x) < C* g(x) dir ve sayılardır ve x ten bağımsızdırlar. şeklinde gösterilir. Burada C ve k sabit 1

Bu tanımı bir örnekle daha açık hale getirmeye çalışayım: Burada k = 1 (x in 1 den büyük olduğu tüm durumlarda) ve C = 10 olarak alınmıştır. Aşağıda O fonksiyonu ile karmaşıklık hesaplamadaki bazı ana konuları madde madde açıklamaya çalışayım: Sabit zamanlı ifadeler O(1) ile gösterilirler. Örnek, atama işlemleri. if - else ifadelerinde, ifadenin if veya else bloğundaki hangi ifade karmaşıklık olarak daha büyükse O fonksiyonu o değeri döndürür. (Çünkü biliyorsunuz ki O fonksiyonu her zaman en kötü durumu analiz eder) Yani bunu şöyle ifade edebiliriz: Maks (if ifadesinin çalışma zamanı, else ifadesinin çalışma zamanı) Örneğin if bloğu içi O(1) else bloğunun içi O(n) ise if else bloğu O(n) olarak ele alınır. //aşağıdaki if-else ifadesi O(n)'dir if (ifade) { //birinci ifade O(1) olsun 2

} else { //ikinci ifade O(n) olsun } Bir döngü ifadesinin içindeki bir ifade, döngünün dönme sayısı kadar çalışacağı için, eğer döngü N kez dönüyorsa ve döngü içindeki ifadenin çalışma zamanı C ise, toplam çalışma zamanı N*C dır. //aşağıdaki for döngüsü O(C.N)'dir. for (int i = 0; i < N; i++) { //buradaki ifade C zamanda çalışsın } İç içe döngülerde içteki döngü N kez, dıştaki döngü ise K kez dönüyorsa ve iç döngünün içindeki ifadenin çalışma zamanı C ise, toplam çalışma zamanı N*K*C dir. //aşağıdaki for döngüsü O(C.N.K)'dir. for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { //buradaki ifade C zamanda çalışsın } } Notasyon İsim Açıklama O(1) Sabit Algoritmadaki icra sayısı belliyse sabit bir değerle 3

gösterlir. Örneğin, bir sayının tek mi çift mi olduğunun bulunması. O(logn) Logaritmik n değerinin büyüyen değerlerine karşın algoritmanız çok daha az yavaşlıyorsa logaritmik bir durum söz konusudur. Örneğin, binary search ile sıralı bir dizide değer aramak. O(n) Lineer n değerinin büyümesine karşılık algoritmanın lineer bir şekilde yavaşlaması söz konusudur. Örnek, sırasız bir listeden bir değeri bulmak. O(n logn) Loglineer Bir problemi alt problemlere bölüp bağımsız olarak çözen, daha sonra bu sonuçları birleştiren algoritmalarda görülür. Örnek, birliştirmeli sıralama (merge sort) algoritması. O(n^2) Karesel İç-içe döngüler ile verileri ikişerli şekilde inceleyen algoritmalarda görülür. Örnek, seçmeli sıralama (selection sort) O(2^n) Üstel Girilen veriye göre iki kat yavaşlama görülen bu algoritmalar hiç pratik değildir. Örnek, seyyar satıcı problemi. 4

Big O devam Bilgisayar bilimlerinde bir algoritmanın incelenmesi sırasında sıkça kullanılan bu terim çalışmakta olan algoritmanın en kötü ihtimalle ne kadar başarılı olacağını incelemeye yarar. Bilindiği üzere bilgisayar bilimlerinde yargılamalar kesin ve net olmak zorundadır. Tahmini ve belirsiz karar verilmesi istenmeyen bir durumdur. Bir algoritmanın ne kadar başarılı 5

olacağının belirlenmesi de bu kararların daha kesin olmasını sağlar. Algoritmanın başarısını ise çalıştığı en iyi duruma göre ölçmek yanıltıcı olabilir çünkü her zaman en iyi durumla karşılaşılmaz. Algoritma analizinde kullanılan en önemli iki ölçü hafıza ve zaman kavramlarıdır. Yani bir algoritmanın ne kadar hızlı çalıştığı ve çalışırken ne kadar hafıza ihtiyacı olduğu, bu algoritmanın performansını belirleyen iki farklı boyuttur. En iyi algoritma en hızlı ve en az hafıza ihtiyacı ile çalışan algoritmadır. İşte en kötü durum analizi olayın bu iki boyutu için de kullanılabilir. Yani en kötü durumdaki hafıza ihtiyacı ve en kötü durumdaki hızı şeklinde algoritma analiz edilebilir. Limit teorisindeki master teoremde büyük O ile gösterilen (big-oh) değer de bu en kötü durumu analiz etmektedir. Bu yüzden en kötü durum analizine, büyük O gösterimi (Big-O notation) veya algoritmanın sonsuza giderken nasıl değiştiğini anlatmak amacıyla büyüme oranı (growth rate) isimleri verilmektedir. Örnek Bir çok terimli fonksiyonun (polynomial function) big-o değerini hesaplamaya çalışalım. Örnek olarak fonksiyonumuz aşağıdaki şekilde olsun: f(x) = 3x 4 +2x 2 +5 Fonksiyonun üst asimtotik sınırı (asymptotic upper bound), her zaman için fonksiyona eşit veya daha yüksek değer veren ikinci bir fonksiyondur. Bu durumda, yukarıdaki f(x) fonksiyonu için O(x 4 ) denilmesinin anlamlı, herhangi bir sayı ile x 4 değerinin çarpımının, f(x) fonksiyonuna eşit veya daha yüksek üreteceğidir. Bu durum aşağıdaki şekilde gösterilebilir: f(x) cx 4 Gerçekten de bu değer denenirse, c=4 için aşağıdaki çizim elde edilebilir: 6

Yukarıdaki mavi renkte görülen fonksiyon 4x 4 ve kırmızı renkte görülen fonksiyon da f(x) fonksiyonudur. Görüldüğü üzre x>1 için 4x 4 fonksiyonu, f(x) fonksiyonundan büyüktür. Dolayısıyla tanımımıza x>1 koşulu eklenebilir. Kısaca f(x) = O (g(x)) tanımı, f(x) c.g(x) şeklinde yorumlanabilir. Buradaki c değeri herhangi sabit bir sayıdır ve sonuçta elde edilen değer eşit veya daha büyüktür. Büyük-O (Big-O) gösterimi ile kardeş olan bir gösterim de küçük-o (small-o) gösterimidir. Bu iki gösterim arasındaki temel fark küçük-o gösteriminde asimptotik üst sınır (asymptotic upper bound) fonksiyonunun tamamıncan büyük olmasıdır. Yani büyük-o gösterimindeki eşitlik durumu yoktur. f(x) = og(x) için 7

f(x) < c g(x) şartı sağlanmalıdır. Dolayısıyla f(x) = O (f(x)) tanımı doğru olurken f(x)=o(f(x)) tanımı hatalıdır. Bazı örnekler aşağıda verilmiştir: x=o(x) Yukarıda görüldüğü üzere x>1 için x=o(x) doğrudur. Ancak x 1 durumunda x=o(x) yazılmalıdır. log(x) = o(x) 8

Yukarıdaki şekillerde krımızı ile gösterilen f(x) fonksiyonlarının small-o fonksiyonları mavi renk ile çizilmiştir. Ters Parça Algoritması (Reverse Factor Algorithm) Genetik Programlama (Genetic Programming) Paradigma Kayması (Paradigm Shift) Jensen Shannon Mesafesi (Jensen-Shannon Divergence) Kullback Leibler Uzaklığı (kullback-leibler divergence) Entailment (İcap) Soru: H(n)= 1+ 1/2 +...+ 1/n ifadesinin algoritma karmaşıklığı nedir? Cevap: bottom up approach kullanalim ve base line ile başlayalım: H(1)=1 H(2) = 1 + 1/2 H(2) = H(1) + 1/2 H(3) = 1 + 1/2 +1/3 H(3) = H(2) + 1/3 demek ki H(n) = H(n-1) + 1/n 9

o halde O(n) denilebilir. Benzer şekilde top down approach kullanırsak H(n-1) = 1+... + 1/(n-1) şeklinde yazılabilir H(n) = H(n-1) + 1/n olacaktır. Bu arada, karmaşıklık konusunun yanında ufak bir dipnot olarak bu sayı gamma sabiti denilen değerdir gamma = 0.57721566490153286061... 10