Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı Ömer Özselçuk
Bu sunumda Bağlı Listeler (linked list), Yığınlar (stack), kuyruk veri yapısı (QUEUES) konu anlatımı yapılmış. Örnek C kodları ve örnek algoritmalar ile anlatım desteklenmiştir.
Bağlı Liste (Linked List) Nedir?
Dizilerden sonra en çok kullanılan veri yapısıdır.
Doğrusal Liste (Linear List) yapısı yalnızca öncelik - sonralık ilişkisini yansıtabilecek yapıdadır.
Yığın Veri Yapısı Nedir ( Stack Data Type)
Nesne ekleme ve çıkarmalarının en üstten (top) yapıldığı veri yapısına stack (yığın) adı verilir.
QUEUES (KUYRUK) Veri Yapısı
Kuyruk veri yapısında da veri ekleme (enqueue) ve kuyruktan veri çıkarma (dequeue) şeklinde iki tane işlem tanımlıdır.
Yığınların tersine FIFO (First In First Out) prensibine göre çalışırlar ve ara elemanlara erişim doğrudan yapılamaz.
The document discusses Strassen's algorithm for matrix multiplication. It begins by explaining traditional matrix multiplication that has a time complexity of O(n3). It then explains how the divide and conquer strategy can be applied by dividing the matrices into smaller square sub-matrices. Strassen improved upon this by reducing the number of multiplications from 8 to 7 terms, obtaining a time complexity of O(n2.81). His key insight was applying different equations on the sub-matrix multiplication formulas to minimize operations.
This document introduces fuzzy sets. It defines a fuzzy set as a set where elements have gradual membership rather than binary membership. Fuzzy sets allow membership values between 0 and 1. Operations on fuzzy sets like union, intersection, and complement are defined. An example fuzzy set distinguishes young and adult ages on a scale rather than a binary classification. Fuzzy sets permit ambiguous or uncertain boundaries unlike classical sets.
This document outlines the course content and structure for a class on Fundamentals of Algorithms. It includes:
1. The prerequisites for the class which include programming experience and familiarity with data structures.
2. An overview of the purpose and evaluation scheme for the class, which focuses on analyzing and designing algorithms rather than programming. Student work will be evaluated through tests, assignments, and other activities.
3. A list of topics to be covered including analysis of algorithms, data structures like trees and graphs, sorting techniques, and others. Reference books are also provided.
Man in the Middle Atack (Ortadaki Adam Saldırısı)Ahmet Gürel
Süleyman Demirel Üniversitesi Siber Güvenlik Laboratuvarında yapmış olduğum Man in the Middle Atack (Ortadaki Adam Saldırısı) sunumu. Mail : info@gurelahmet.com | Blog: www.gurelahmet.com | Twitter: @ahmettgurell
The document discusses various algorithm design techniques, including brute force. It describes brute force as the simplest approach that directly solves a problem based on its definition. While brute force is widely applicable and simple, its algorithms tend to be inefficient. Examples given of brute force algorithms include selection sort, string matching, and exhaustive search. Selection sort is then explained in more detail, along with pseudocode. Brute force string matching is also explained, with pseudocode provided.
This document discusses deque, or double-ended queue, which is an abstract data type that allows elements to be added or removed from either end. It describes two types of deques, input-restricted and output-restricted, and common operations like push, pop, and isEmpty. Examples are given of using a deque for palindrome checking, A-Steal job scheduling, and undo-redo operations in software.
Yapay sinir ağları ile alakalı İnternet de bulunan belgelerden yararlanarak, yapay sinir ağlarına giriş için hazırladığım sunumum. Yapay sinir ağları ile alakalı herhangi bir bilginiz yok ise başlangıç için ideal bir kaynak. (Telif hakkı bulundurabileceği gerekçesi ile kendim hazırlamadığım resimleri kaldırdım. )
The document discusses priority queues, which are data structures that allow elements to be inserted and removed based on priority. Elements with higher priority are served before those with lower priority. There are two main types - ascending order queues prioritize lower numbers, while descending order queues prioritize higher numbers. Priority queues can be implemented using linked lists, arrays, binary heaps, and binary search trees. Common applications include shortest path algorithms, heap sorting, and operating system processes.
This document discusses data structures and their organization in computer memory. It defines a data structure as a way of storing and organizing data in memory for efficient use. There are two main types of data structures - linear and non-linear. Linear data structures like arrays and linked lists represent sequential relationships, while non-linear structures like trees and graphs represent hierarchical relationships. Memory can be allocated contiguously, linked, or indexed to implement different data structure formats. Common examples discussed are arrays, linked lists, stacks, queues, trees and graphs.
The brute force algorithm finds the maximum subarray of a given array by calculating the sum of all possible contiguous subarrays. It has a time complexity of O(n^2) as it calculates the sum in two nested loops from index 1 to n. While simple to implement, the brute force approach is only efficient for small problem sizes due to its quadratic time complexity. More optimized algorithms are needed for large arrays.
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı Ömer Özselçuk
Bu sunumda Bağlı Listeler (linked list), Yığınlar (stack), kuyruk veri yapısı (QUEUES) konu anlatımı yapılmış. Örnek C kodları ve örnek algoritmalar ile anlatım desteklenmiştir.
Bağlı Liste (Linked List) Nedir?
Dizilerden sonra en çok kullanılan veri yapısıdır.
Doğrusal Liste (Linear List) yapısı yalnızca öncelik - sonralık ilişkisini yansıtabilecek yapıdadır.
Yığın Veri Yapısı Nedir ( Stack Data Type)
Nesne ekleme ve çıkarmalarının en üstten (top) yapıldığı veri yapısına stack (yığın) adı verilir.
QUEUES (KUYRUK) Veri Yapısı
Kuyruk veri yapısında da veri ekleme (enqueue) ve kuyruktan veri çıkarma (dequeue) şeklinde iki tane işlem tanımlıdır.
Yığınların tersine FIFO (First In First Out) prensibine göre çalışırlar ve ara elemanlara erişim doğrudan yapılamaz.
The document discusses Strassen's algorithm for matrix multiplication. It begins by explaining traditional matrix multiplication that has a time complexity of O(n3). It then explains how the divide and conquer strategy can be applied by dividing the matrices into smaller square sub-matrices. Strassen improved upon this by reducing the number of multiplications from 8 to 7 terms, obtaining a time complexity of O(n2.81). His key insight was applying different equations on the sub-matrix multiplication formulas to minimize operations.
This document introduces fuzzy sets. It defines a fuzzy set as a set where elements have gradual membership rather than binary membership. Fuzzy sets allow membership values between 0 and 1. Operations on fuzzy sets like union, intersection, and complement are defined. An example fuzzy set distinguishes young and adult ages on a scale rather than a binary classification. Fuzzy sets permit ambiguous or uncertain boundaries unlike classical sets.
This document outlines the course content and structure for a class on Fundamentals of Algorithms. It includes:
1. The prerequisites for the class which include programming experience and familiarity with data structures.
2. An overview of the purpose and evaluation scheme for the class, which focuses on analyzing and designing algorithms rather than programming. Student work will be evaluated through tests, assignments, and other activities.
3. A list of topics to be covered including analysis of algorithms, data structures like trees and graphs, sorting techniques, and others. Reference books are also provided.
Man in the Middle Atack (Ortadaki Adam Saldırısı)Ahmet Gürel
Süleyman Demirel Üniversitesi Siber Güvenlik Laboratuvarında yapmış olduğum Man in the Middle Atack (Ortadaki Adam Saldırısı) sunumu. Mail : info@gurelahmet.com | Blog: www.gurelahmet.com | Twitter: @ahmettgurell
The document discusses various algorithm design techniques, including brute force. It describes brute force as the simplest approach that directly solves a problem based on its definition. While brute force is widely applicable and simple, its algorithms tend to be inefficient. Examples given of brute force algorithms include selection sort, string matching, and exhaustive search. Selection sort is then explained in more detail, along with pseudocode. Brute force string matching is also explained, with pseudocode provided.
This document discusses deque, or double-ended queue, which is an abstract data type that allows elements to be added or removed from either end. It describes two types of deques, input-restricted and output-restricted, and common operations like push, pop, and isEmpty. Examples are given of using a deque for palindrome checking, A-Steal job scheduling, and undo-redo operations in software.
Yapay sinir ağları ile alakalı İnternet de bulunan belgelerden yararlanarak, yapay sinir ağlarına giriş için hazırladığım sunumum. Yapay sinir ağları ile alakalı herhangi bir bilginiz yok ise başlangıç için ideal bir kaynak. (Telif hakkı bulundurabileceği gerekçesi ile kendim hazırlamadığım resimleri kaldırdım. )
The document discusses priority queues, which are data structures that allow elements to be inserted and removed based on priority. Elements with higher priority are served before those with lower priority. There are two main types - ascending order queues prioritize lower numbers, while descending order queues prioritize higher numbers. Priority queues can be implemented using linked lists, arrays, binary heaps, and binary search trees. Common applications include shortest path algorithms, heap sorting, and operating system processes.
This document discusses data structures and their organization in computer memory. It defines a data structure as a way of storing and organizing data in memory for efficient use. There are two main types of data structures - linear and non-linear. Linear data structures like arrays and linked lists represent sequential relationships, while non-linear structures like trees and graphs represent hierarchical relationships. Memory can be allocated contiguously, linked, or indexed to implement different data structure formats. Common examples discussed are arrays, linked lists, stacks, queues, trees and graphs.
The brute force algorithm finds the maximum subarray of a given array by calculating the sum of all possible contiguous subarrays. It has a time complexity of O(n^2) as it calculates the sum in two nested loops from index 1 to n. While simple to implement, the brute force approach is only efficient for small problem sizes due to its quadratic time complexity. More optimized algorithms are needed for large arrays.
Esnek Atölye Tipi Çizelgeleme Problemleri için Bir Melez Harmoni Arama Algori...Mustafa Tanyer
A hybrid harmony search algorithm for the flexible job shop
scheduling problem
Yuan Yuan, Hua Xu, Jiadong Yang
State Key Laboratory of Intelligent Technology and Systems,
Tsinghua National Laboratory for Information Science and Technology,
Department of Computer Science and Technology,
Tsinghua University,
Beijing 100084, PR China
Akış Şemaları ( İş Analizi ve Uygulamaları Dersi)Tugba Ozen
İş Analizi dersi için ödev; iş akışlarını, sorunlarını ve işlem sıralarını takip edebilmek için oluşturulan akış şemalarının şekil, anlam ve kullanım tekniklerini anlatan bir çalışma.
Aşağıda gerçekleştirilen projeler, daha önceden başka ekipler tarafından yapılan projelerin analizlerinde elde ettiğim tecrübelerimi paylaşmaya çalıştım. Aşağıda teknik unsurlar özetlenmeye çalışılacak. Bununla birlikte bir projenin başarılı olabilmesi için proje ekibinin çok önemli bir etken olduğu unutulmamalıdır.
İlk haftanın konusu Python'la programlama temelleri,mikroişlemci ve denetleyiciler arasında ki farklar , arduino & stm32 ve raspberry farkları ve birkaç projenin gösterilmesi, sensörler (analog,dijital) farkları , birkaç sensörün nasıl çalıştığının anlaşılması ve geliştirme kartlarıyla sensörlerin nasıl ilişkilenmesiydi.
Similar to Yzm 2116 - Bölüm 2 (Algoritma Analizi) (15)
1. YZM 2116
Veri Yapıları
Yrd. Doç. Dr. Deniz KILINÇ
Celal Bayar Üniversitesi
Hasan Ferdi Turgutlu Teknoloji Fakültesi
Yazılım Mühendisliği
2. BÖLÜM - 2
Bu bölümde,
• Algoritma Analizi,
• Çalışma Zamanı Analizi
• Algoritma Analiz Türleri
• Asimptotik Notasyon,
• Big-O Notasyonu,
• Algoritmalar için “Rate of Growth” (Büyüme Hızı)
• Big-O Hesaplama Kuralları
• Big-O Avantajları
konularına değinilecektir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
3. 3
• Basit tanım: Belirli bir görevi yerine getiren sonlu
sayıdaki işlemler dizisidir.
• Geniş tanım: Verilen herhangi bir sorunun çözümüne
ulaşmak için uygulanması gerekli adımların hiç bir
yoruma yer vermeksizin açık, düzenli ve sıralı bir
şekilde söz ve yazı ile ifadesidir. Algoritmayı oluşturan
adımlar özellikle basit ve açık olarak ortaya konmalıdır.
19.yy da İranlı Musaoğlu Horzumlu Mehmet (Alharezmi adını
Araplar takmıştır) problemlerin çözümü için genel kurallar
oluşturdu. Algoritma Alharezmi'nin Latince okunuşudur.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Algoritma Nedir?
4. 4Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Algoritmaların Sahip Olması Gereken
Özellikler
• Giriş/çıkış bilgisi
• Sonluluk
• Kesinlik
• Etkinlik
• Başarım ve performans
5. 5Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Algoritma Analizi
• Aynı problemi (örneğin sıralama) birçok
algoritma ile (insertion, bubble, quick vs)
çözmek mümkün olduğu için algoritmalar
verimlilik (kullandıkları hafıza ve işlemi
gerçekleştirdikleri zaman) anlamında
kıyaslanmalı ve seçim buna göre yapılmalıdır.
• Bu kıyaslama algoritma analizinde çalışma
zamanı karşılaştırması olarak bilinir.
6. 6Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Algoritma Analizi (devam…)
• Algoritma analizi yapılma nedenleri:
o Algoritmanın performansını ölçmek için
o Farklı algoritmalarla karşılaştırmak için
o Daha iyisi mümkün mü? Bu mudur en iyisi?
• Analiz edilen özellikler aşağıdaki gibidir
o Algoritmanın çalışma zamanı analizi
o Hafızada kapladığı alan analizi
7. 7Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Çalışma Zamanı Analizi
• Çalışma zamanı analizi (karmaşıklık analizi) bir
algoritmanın (artan) “(veri) giriş” boyutuna bağlı
olarak işlem zamanının / süresinin nasıl arttığını
(değiştiğini) tespit etmek olarak tanımlanır.
• Algoritmaların işlediği sıklıkla karşılaşılan “(veri)
giriş” türleri:
o Array (boyuta bağlı)
o Polinom (derecesine bağlı)
o Matris (eleman sayısına bağlı)
o İkilik veri (bit sayısı)
o Grafik (kenar ve düğüm sayısı)
8. 8Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Çalışma Zamanı Analizi (devam…)
• Çalışma zamanı/karmaşıklık analizi için
kullanılan başlıca yöntemler aşağıdaki gibidir:
1. Deneysel Analiz Yöntemi: Örnek problemlerde
denenmiş bir algoritmadaki hesaplama deneyimine
dayanır. Amacı, pratikte algoritmanın nasıl
davrandığını tahmin etmektir. Bilimsel yaklaşımdan
çok, uygulamaya yöneliktir. Programı yazan
programcının tekniğine, kullanılan bilgisayara,
derleyiciye ve programlama diline bağlı değişkenlik
gösterir.
2. RAM (Random Access Machine) Modeli ile Komut
Sayarak Çalışma Zamanı Analiz Yöntemi
9. 9Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Çalışma Zamanı Analizi (devam…)
• RAM Modeli:
o RAM modeli algoritma gerçekleştirimlerini ölçmek için
kullanılan basit bir yöntemdir.
o Genel olarak çalışma zamanı veri giriş boyutu n’e bağlı
T(n) ile ifade edilir.
o Her operasyon (+,-, * =, if, call) “bir” zaman biriminde
gerçekleşir.
o Döngüler ve alt rutinler (fonksiyonlar) basit
operasyonlar ile farklı değerlendirilirler.
o RAM modelinde her bellek erişimi yine “bir” zaman
biriminde gerçekleşir.
10. 10
Örnek 1: Dizideki sayıların toplamını bulma
int Topla(int A[], int N)
{
int toplam = 0;
for (i=0; i < N; i++){
toplam += A[i];
} //Bitti-for
return toplam;
} //Bitti-Topla
Bu fonksiyonun
yürütme zamanı ne
kadardır?
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
11. İşlem
sayısı
1
N
N
1
--------
Toplam: 1 + N + N + 1 = 2N + 2
• Çalışma zamanı: T(N) = 2N+2
– N dizideki eleman sayısı
int Topla(int A[], int N)
{
int topla = 0;
for (i=0; i < N; i++){
topla += A[i];
} //Bitti-for
return topla;
} //Bitti-Topla
Örnek 1: Dizideki sayıların toplamını bulma
12. 12
Örnek 2: Dizideki bir elemanın aranması
Bu fonksiyonun
yürütme zamanı
ne kadardır?
int Arama(int A[], int N,
int sayi) {
int i = 0;
while (i < N){
if (A[i] == sayi) break;
i++;
} //bitti-while
if (i < N) return i;
else return -1;
} //bitti-Arama
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
13. 13
int Arama(int A[], int N,
int sayi) {
int i = 0;
while (i < N){
if (A[i] == sayi) break;
i++;
} //bitti-while
if (i < N) return i;
else return -1;
} //bitti-Arama
İşlem
sayısı
1
1<=L<=N
1<=L<=N
0<=L<=N
1
1
---------
Toplam: 1+3*L+1+1 = 3L+3
Örnek 2: Dizideki bir elemanın aranması
• Çalışma zamanı: T(N) = 3N+3
14. 14Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Algoritma Analiz Türleri
• Bir algoritmanın analizi için o algoritmanın kabaca
bir polinom veya diğer zaman karmaşıklıkları
cinsinden ifade edilmesi gerekir.
• Bu ifade üzerinden veri girişindeki değişime bağlı
olarak algoritmanın best case (en az zaman alan) ve
worst case (en çok zaman alan) durumları
incelenerek algoritmalar arası kıyaslama yapılabilir.
Bu şekilde bir algoritma üç şekilde incelenebilir:
1. Worst case (en kötü)
2. Best case (en iyi)
3. Average case (ortalama)
15. 15Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Algoritma Analiz Türleri (devam…)
• Worst case (en kötü): Algoritma çalışmasının en fazla
sürede gerçekleştiği analiz türüdür. En kötü durum, çalışma
zamanında bir üst sınırdır ve o algoritma için verilen
durumdan “daha uzun sürmeyeceği” garantisi verir. Bazı
algoritmalar için en kötü durum oldukça sık rastlanır.
Arama algoritmasında, aranan öğe genellikle dizide olmaz
dolayısıyla döngü N kez çalışır.
• Best case (en iyi): Algoritmanın en kısa sürede ve en az
adımda çalıştığı giriş durumu olan analiz türüdür. Çalışma
zamanında bir alt sınırdır.
• Average case (ortalama): Algoritmanın ortalama sürede ve
ortalama adımda çalıştığı giriş durumu olan analiz türüdür.
16. 16Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Algoritma Analiz Türleri (devam…)
• Bu incelemeler:
• Lower Bound (i) <= Average Bound (ii) <= Upper Bound (iii)
şeklinde sıralanırlar.
• Grafiksel gösterimi aşağıdaki gibidir:
17. 17Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Algoritma Analiz Türleri (devam…)
• Örnek 2 için en iyi, en kötü ve ortalama çalışma zamanı nedir?
int Arama(int A[], int N,
int sayi) {
int i = 0;
while (i < N){
if (A[i] == sayi) break;
i++;
} //bitti-while
if (i < N) return i;
else return -1;
} //bitti-Arama
En iyi çalışma zamanı
o Döngü sadece bir kez çalıştı
T(n) = 6
Ortalama çalışma zamanı
o Döngü N/2 kez çalıştı
T(n)=3*n/2+3 = 1.5n+3
En kötü çalışma zamanı
o Döngü N kez çalıştı
T(n) = 3n+3
18. 18
• Bir algoritmanın genelde EN KÖTÜ durumdaki
çalışma zamanına bakılır. Neden?
o En kötü durum çalışma zamanında bir üst sınırdır ve o
algoritma için verilen durumdan daha uzun sürmeyeceği
garantisi verir.
o Bazı algoritmalar için en kötü durum oldukça sık
rastlanır. Arama algoritmasında, aranan öğe genellikle
dizide olmaz dolayısıyla döngü N kez çalışır.
o Ortalama çalışma zamanı genellikle en kötü çalışma
zamanı kadardır. Arama algoritması için hem ortalama
hem de en kötü çalışma zamanı doğrusal fonksiyondur.
Algoritma En Kötü Durum Analizi
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
19. • Bir problemi çözmek için A ve B şeklinde iki algoritma
verildiğini düşünelim.
• Giriş boyutu N için aşağıda A ve B algoritmalarının
çalışma zamanı TA ve TB fonksiyonları verilmiştir.
Hangi algoritmayı
seçersiniz?
Çalışmazamanı
Giriş Boyutu (N)
Asimptotik Notasyon
20. 20
• N büyüdüğü zaman A ve B nin çalışma zamanı:
Şimdi hangi
algoritmayı
seçersiniz?
ÇalışmaZamanı
Giriş Boyutu (N)
Asimptotik Notasyon (devam…)
21. 21
• Asimptotik notasyon, eleman sayısı n’nin sonsuza
gitmesi durumunda algoritmanın, benzer işi yapan
algoritmalarla karşılaştırmak için kullanılır.
• Eleman sayısının küçük olduğu durumlar mümkün
olabilir fakat bu birçok uygulama için geçerli değildir.
• Verilen iki algoritmanın çalışma zamanını T1(N) ve
T2(N) fonksiyonları şeklinde gösterilir. Hangisinin
daha iyi olduğunu belirlemek için bir yol belirlememiz
gerekiyor.
– Big-O (Big O): Asimptotik üst sınır
– Big W (Big Omega): Asimptotik alt sınır
– Big Q (Big Teta): Asimptotik alt ve üst sınır
Asimptotik Notasyon (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
22. 22
• Algoritmanın f(n) şeklinde ifade edildiğini
varsayalım.
• Algoritma, fonksiyonunun sıkı üst sınırı (tight
upper bound) olarak tanımlanır.
• Bir fonksiyonun sıkı üst sınırı genel olarak:
f(n) = O(g(n))
• şeklinde ifade edilir.
• Bu ifade n’nin artan değerlerinde
– f(n)’nin üst sınırı g(n)’dir
• şeklinde yorumlanır.
Big-O Notasyonu
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
23. 23
• Örneğin:
f(n) = n4 + 100n2 + 10n + 50 algoritma fonksiyonunda
g(n)= n4 olur.
• “Daha açık bir ifadeyle”, n’nin artan değerlerinde f(n)
nin maksimum büyüme oranı
g(n) = n4
• O-notasyonu gösteriminde bir fonksiyonun düşük n
değerlerindeki performansı önemsiz kabul edilir.
Big-O Notasyonu (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
24. 24
• O(g(n)) = {
– f(n): tüm n>=n0 için, 0 <= f(n)<= cg(n) olmak üzere
pozitif c ve n0 sabitleri bulunsun
• }
• Bu durumda g(n), f(n)’nin asimptotik (n sonsuza
giderken) sıkı üst sınırı olur.
• n’nin düşük değerleri ve o değerlerdeki değişim
dikkate alınmazken, no’dan büyük değerler için
algoritmanın büyüme oranı değerlendirilir.
Big-O Notasyonu (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
25. 25
• Dikkat edilirse, no’dan büyük değerler için c*g(n),
• f(n) için üst sınırı (asimptot) olarak görülürken,
• no öncesinde iki fonksiyonun değişimi farklı
olabilir.
Big-O Notasyonu (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
26. 26
Büyüme Oranı (Rate of Growth)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Zaman
karmaşıklığı
Açıklama Örnek
O(1) Sabit: Veri giriş boyutundan
bağımsız gerçekleşen işlemler.
Bağlı listeye ilk eleman olarak
ekleme yapma
O(log N) Logaritmik: Problemi küçük veri
parçalarına bölen algoritmalarda
görülür.
Binary search tree veri yapısı
üzerinde arama
O(N) Lineer – doğrusal: Veri giriş
boyutuna bağlı doğrusal artan.
Sıralı olmayan bir dizide bir eleman
arama
O(N log N) Doğrusal çarpanlı logaritmik:
Problemi küçük veri parçalarına
bölen ve daha sonra bu parçalar
üzerinde işlem yapan.
N elemanı böl-parçala-yönet
yöntemiyle sıralama. Quick Sort.
O(N2) Karesel Bir grafikte iki düğüm arasındaki en
kısa yolu bulma veya Buble Sort.
O(N3) Kübik Ardarda gerçekleştirilen lineer
denklemler
O(2N) İki tabanında üssel Hanoi’nin Kuleleri problemi
27. 27
Büyüme Oranı (Rate of Growth) (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
28. 28
• f(n), g(n), h(n), ve p(n) pozitif tamsayılar kümesinden, pozitif
reel sayılar kümesine tanımlanmış fonksiyonlar olsun:
1. Katsayı Kuralı: f(n) , O(g(n)) ise o zaman kf(n) yine O(g(n))
olur. Katsayılar önemsizdir.
2. Toplam Kuralı: f(n), O(h(n)) ise ve g(n), O(p(n)) verilmişse
f(n)+g(n), O(h(n)+p(n)) olur. Üst-sınırlar toplanır.
3. Çarpım Kuralı: f(n), O(h(n)) ve g(n), O(p(n)) için f(n)g(n) is
O(h(n)p(n)) olur.
4. Polinom Kuralı: f(n), k dereceli polinom ise f(n) için O(nk)
kabul edilir.
5. Kuvvetin Log’u Kuralı: log(nk) için O(log(n)) dir.
Big-O Analiz Kuralları
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
29. 29
• Programların ve algoritmaların Big-O
yaklaşımıyla analizi için aşağıdaki kurallardan
faydalanırız:
1. Döngüler (Loops)
2. İç içe Döngüler
3. Ardışık deyimler
4. If-then-else deyimleri
5. Logaritmik karmaşıklık
Big-O Hesaplama Kuralları
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
30. Kural 1: Döngüler (Loops)
Bir döngünün çalışma zamanı, en çok döngü
içindeki deyimlerin çalışma zamanının iterasyon
sayısıyla çarpılması kadardır.
for (i=1; i<=n; i++)
{
m = m + 2;
}
Sabit zaman
n defa
çalışır
Toplam zaman = sabit c * n = cn = O(N)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
DİKKAT: Eğer bir döngünün n değeri sabit verilmişse.
Örneğin: n = 100 ise değeri O(1)’dir.
30
31. İçteki analiz yapılır. Toplam zaman bütün
döngülerin çalışma sayılarının çarpımına eşittir.
for (i=1; i<=n; i++) {
for (j=1; j<=n; j++) {
k = k+1;
}
} Sabit zaman
Dış döngü
n defa
çalışır
iç döngü
n defa
çalışır
Toplam zaman = c * n * n * = cn2 = O(N2)
Kural 2: İç İçe Döngüler
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları 31
32. 32
Her deyimin zamanı birbirine eklenir.
Toplam zaman = c0 + c1n + c2n2 = O(N2)
x = x +1;
for (i=1; i<=n; i++) {
m = m + 2;
}
for (i=1; i<=n; i++) {
for (j=1; j<=n; j++) {
k = k+1;
}
}
iç döngü
n defa
çalışır
Dış döngü
n defa
çalışır Sabit zaman
n defa
çalışır
Sabit zaman
Sabit zaman
Kural 3: Ardışık Deyimler
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
33. En kötü çalışma zamanı: test zamanına then veya
else kısmındaki çalışma zamanının hangisi
büyükse o kısım eklenir.
if (depth( ) != otherStack.depth( ) ) {
return false;
}
else {
for (int n = 0; n < depth( ); n++) {
if (!list[n].equals(otherStack.list[n]))
return false;
}
}
then:
sabit
else:
(sabit +sabit) * n
test:
sabit
Diğer if :
sabit+sabit
(else yok)
Toplam zaman = c0 + c1 + (c2 + c3) * n = O(N)
Kural 4: If Then Else Deyimleri
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları 33
34. Problemin büyüklüğünü belli oranda(genelde ½)
azaltmak için sabit bir zaman harcanıyorsa bu
algoritma O(log N)’dir.
for(i=1; i<=n;)
i = i*2;
• kod parçasında n döngü sayısı i = i*2 den dolayı her seferinde
yarıya düşer.
• Loop’un k kadar döndüğünü varsayarsak;
o k adımında 2i = n olur.
o Her iki tarafın logaritmasını alırsak;
ilog2 = logn ve i = log n olur.
o i’ye bağlı olarak (problemi ikiye bölen değişken!)
Kural 5: Logaritmik Karmaşıklık
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları 34
35. Kural 5: Logaritmik Karmaşıklık (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Örneğin: Binary Search (İkili arama) algoritması
kullanılarak bir sözlükte arama:
o Sözlüğün orta kısmına bakılır.
o Sözcük ortaya göre sağda mı solda mı kaldığı bulunur?
o Bu işlem sağ veya solda sözcük bulunana kadar
tekrarlanır.
• bu tarz bir algoritmadır. Bu algoritmalar genel olarak
“divide and conquer (böl ve yönet)” yaklaşımı ile
tasarlanmışlardır. Bu yaklaşımla tasarlanan olan
örnek sıralama algoritmaları:
o Merge Sort and Quick Sort.
35
36. 36
• Sabitler göz ardı edilirler çünkü
o Donanım, derleyici, kod optimizasyonu vb. nedenlerden
dolayı bir komutun çalışma süresi her zaman farklılık
gösterebilir. Amacımız bu etkenlerden bağımsız olarak
algoritmanın ne kadar etkin olduğunu ölçmektir.
o Sabitlerin atılması analizi basitleştirir. 3.2n2 veya 3.9n2
yerine sadece n2’ye odaklanırız.
• Algoritmalar arasında kıyaslamayı basit tek bir değere
indirger.
• Küçük n değerleri göz ardı edilerek sadece büyük n
değerlerine odaklanılır.
Big-O Avantajları
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
37. 37
• Özetle: Donanım, işletim sistemi, derleyici ve
algoritma detaylarından bağımsız, sadece büyük n
değerlerine odaklanıp, sabitleri göz ardı ederek daha
basit bir şekilde algoritmaları analiz etmemize ve
karşılaştırmamızı sağlar.
• RAM’den O(n)’ dönüşüm:
o 4n2 - 3n log n + 17.5 n - 43 n⅔ + 75
o n2 – n log n + n - n⅔ + 1 sabitleri atalım
o n2 sadece büyük n değerlerini alalım
o O(n2)
Big-O Avantajları (devam…)
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
38. 38
• Aşağıdaki fonksiyonların karmaşıklıklarını Big O
notasyonunda gösteriniz.
o f1(n) = 10 n + 25 n2
o f2(n) = 20 n log n + 5 n
o f3(n) = 12 n log n + 0.05 n2
o f4(n) = n1/2 + 3 n log n
Çalışma
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
40. Yararlanılan Kaynaklar
• Ders Kitabı:
• Data Structures through JAVA, V.V.Muniswamy
• Yardımcı Okumalar:
• Data Structures and Algorithms in Java, Narashima
Karumanchi
• Data Structures, Algorithms and Applications in Java,
Sartaj Sahni
• Algorithms, Robert Sedgewick
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Editor's Notes
Hemen atlamayalım…It depends… N=50 oluncaya kadar Tb daha iyi