• Sonuç bulunamadı

Makine Öğrenmesi Data ve Algoritma Yapıları. Dr. Cahit Karakuş

N/A
N/A
Protected

Academic year: 2022

Share "Makine Öğrenmesi Data ve Algoritma Yapıları. Dr. Cahit Karakuş"

Copied!
124
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

Makine Öğrenmesi

“Data ve Algoritma Yapıları”

Dr. Cahit Karakuş

(2)

2

Giriş

(3)

Problem Çözmenin Adımları

• Analiz: Bir bütün içerisindeki bileşiklerin hepsinin veya bir kaçının

özelliklerinin neler olduğunu ortaya koymak. Çözümlemek, Tahlil etmek.

• Modelleme: Bilgisayardaki gelişmeler, problemlerin matematiksel olarak çözümlerinin modellenmesi ve bu modellerin gerçek hayata yansıtılması olanağını vermiştir. Matematiksel modelleme tekniğinde doğrusal ve

doğrusal olmayan modeller kullanılmaktadır.

• Algoritma: Bir sorunun çözüm sürecinde tasarlanan yollar ve yöntemlerdir.

• Program: Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak

yazılmış komutlar dizisi.

(4)

Algoritma geliştirmede uzman olunması gereken alanalar

• Senaryolar

• Yazılım kodu, Yazılım dili

• Algoritma ve Matematiksel modelleme

• Donanım: CPU, Bellek, I/O, Bellek Organizasyonu, Girdiler, Çıkışlar,

• İş süreçleri analizi

(5)

Sembol - Veri – Bilgi – Yetenek - Bilgelik Data – Information – Knowledge - Wisdom

• Semboller (Sinyaller, Resimler, Şekiller, ...): Giriş aşamasında bilgisayarın belleğine aktarılan rakamlar ve semboller, rakamlar, kelimeler, görüntüler, video ve ses gibi bilgi parçacıklarıdır.

• Veri, anlam kazanmamış, ilişkilendirilmemis, özümlenmemiş, işlenmemiş gerçekler ya da bilgi

parçacıklarıdır. Herhangi bir içerikten yoksun formlardadırlar. Bazen fiziksel bir olaydır, yorumlanmamış gözlemlerdir. Yorum taşımazlar ancak işlenmek için hazırdırlar. Karar vermede etkili değillerdir.

• Information ( Bilgi ) : Cevaplanması gereken ne, kim, ne zaman, nerede sorulardır. Bilgi, işlenmiş, düzenlenmiş, anlamlandırılmış verilerdir. Bilgi, organize, anlamlı ve yararlı verilerdir. Çıktı aşaması

sırasında, oluşturulan bilgiler basılı rapor, garfik ve görseller ile sunum formuna sokulur. Bilgiler ileride kullanılmak üzere bilgisayar saklanır.

• Knowledge ( irfan sahibi, Yetenek - Tecrübe, Deneyim ): Karar vermede, kestirim yapmada, doğruyu aramada performansı yükseltmektir.

• Understand (Bilinçlenmek): anlayarak, kavrayarak, hissederek bilinçlenmektir.

• Wisdom ( Bilgelik ): Değerlendirilmiş anlayıştır. Sorgulayarak, kestirim yaparak karar vermek ve yorumlamaktır.

(6)

What is Program

• A Set of Instructions

• Data Structures + Algorithms

• Data Structure = A Container stores Data

• Algorithm = Logic + Control

(7)

Algoritma Nedir?

Algoritma, bir sorunun çözüm sürecinde tasarlanan yollar ve yöntemlerdir. Kısaca algoritma mevcut bilgilerden istenilen sonuca erişme yöntemidir. Algoritma planlanan çözüm yöntemlerinin semboller ile açıklanmasıdır.

• Algoritma, verilerin, bilgisayara hangi çevre biriminden girileceğinin, problemin nasıl çözüleceğinin, hangi basamaklardan geçirilerek sonuç alınacağının, sonucun nasıl ve nereye yazılacağının semboller ile fade edilmesi biçiminde tanımlanabilir.

• Program geliştirme sürecinde işlemlerin hangi sırada ve nasıl gerçekleşeceğini belirleyen planların yapılması gerekir. Algoritma doğru bir şekilde oluşturulduktan sonra istenen programlama dili ile kodlama yapılabilir.

• Algoritma oluşturulduktan sonra problemin çözüm basamaklarında birbirleri ile ilişkili bilgi akışı daha kolay görülebilir ve yanlışlıklar düzeltilebilir. Bir giriş verisine karşılık, çıkış verisi elde edilir.

• Matematiksel modelin çözülmesinde algoritmalar çok sık kullanılır.

Algoritma bir programlama dili değildir. Programlama dillerine yol gösteren bir semboller dizisidir. Algoritma, sıralı olmalıdır, belirli olmalıdır, sonlu olmalıdır.

(8)

Bir çözüm yönteminin algoritma olabilmesi için gerekli koşullar:

• İşlemler yeterli, sonuca uygun ve işleyici için geçerli ve genel olmalıdır.

• İşlem dizisinde beklenen sonuca en kısa yoldan ulaşmalı, el ile ya da mantıksal olarak ya da kağıt kalemle doğruluğu izlenebilir olmalıdır.

• İşlem tekrarlarının önüne geçebilmek için kütüphane ve alt parogramlardan yararlanılmalıdır.

• Girdileri ve çıktıları tanımlı olmaldır.

8

(9)

Bir algoritma oluştururken dikkat edilecek özellikler

I. Kesinlik : Algoritma içindeki adımların herkes tarafından anlaşılabilir olması, içerisinde farklı anlamlara gelebilecek bulanık ifadeler içermemesi gerekir.

I. Sıralı Olma : Yapılacak işlemlerin hangi adımda gerçekleştirileceği algoritma içerisinde net bir şekilde belirtilmelidir.

II. Sonluluk : Algoritma mutlaka sonlu sayıda adımdan oluşmalıdır. Her algoritmanın bir son noktası ve sınırlı bir zaman dilimi olması gerekir.

(10)

Algoritma geliştirmenin temel adımları

1. Problemin Tanımlanması : Algoritmanın amacı belirli bir problemi çözmektir. bu nedenle problem ne kadar anlaşılırsa algoritmanın geliştirilmesi de o kadar kolaylaşır.

2. Girdi ve Çıktıların Belirlenmesi : Problemin iyi tanımlanabilmesi için başlangıç ve bitiş noktalarının çok net bilinmesi gerekir.

3. Çözüm Yolları Bulmak : Bir problemin çözümü için birden fazla çözüm alternatifi olabilir. Bu noktada programcının en sade çözümü tercih etmesi gerekir. Çünkü karmaşık çözümlemeler programa dönüştürüldüğünde anlaşılabilirliğini kaybedebilir.

4. Çözümün Kontrolü ve Testi : Algoritma oluşturulduktan sonra mutlaka kontrol edilmelidir.

Kontrol esnasında bir eksiklik ya da bir hata ile karşılaşılır ise bu sorunun düzeltilmesi gerekir.

Bu eksiklikler ve hatalar giderildikten sonra mutlaka algoritma kağıt üzerinde değerler vererek test edilmelidir.

(11)

Algoritma

5. Algoritmanın Kodlanması: Geliştirilen algoritma bilgisayar üzerinde bir programlama dili ile yazılır. Böylece kağıt üzerinde geliştirilen algoritma bilgisayar ortamında çalışabilecek hale gelmiş olur.

6. Kodun Sınanması ve İyileştirilmesi: Yazılan kod algoritmada olduğu gibi test edilir. Bu test aşamasında bir hata meydana gelir ise hatanın bulunduğu kod bloğunda iyileştirilme yapılır.

7. Algoritma oluşturma ve iyileştirme aşamalarında beyin fırtınasına yönelik ekip çalışmasına gereksinim vardır. Unutulan, hatalı oluşturulan ve farklı yorumlanan ifadeler sorgulanarak düzeltilmelidir.

(12)

Algoritmanın temel öğeleri

• Tanımlayıcı : Değişken, sabit , alt yordam gibi programlama birimlerine yazılımcı tarafından verilmiş isimlere tanımlayıcı adı verilir.

• Değişken : Programın akışı içinde farklı değerleri tutmak üzere ayrılmış bellek bölümlerine değişken adı verilir.

• Sabit : Program her çalıştırıldığında ve programın içinde herhangi bir aşamada hep aynı değeri döndüren tanımlayıcılara sabit adı verilir.

• Gömülü değer : Kod içinde yazılmış olan metinsel, sayısal ya da diğer veri tiplerindeki

sabit değerlere denir.

(13)

13

Algoritma geliştirmede önemli noktalar

• Belirsizlik

• Giriş aralığı

• Hassasiyet

• Aynı algoritma farklı şekillerde gösterilebilir

• Aynı problemi çözmek için birkaç algoritma

• Tekrarlar

(14)

14

Data Yapıları

(15)

Number systems

• Number systems

– Decimal – Binary – Bits

– bytes

– Hexadecimal – Octal

– Numbers conversion among different systems

• Ascii code

(16)

Classification of data structures

(17)

İlkel veri yapıları

İlkel veri yapıları, programlama dillerinin çoğunda bulunan temel veri türleridir.

İlkel veri yapıları, tek değerleri temsil etmek için kullanılır.

Örnek: Tam sayı, karakter, dizi, Boole

(18)

İlkel Olmayan Veri Yapısı

Birincil veri yapısından türetilen veri yapısı, İlkel olmayan veri yapısı olarak bilinir.

Bu veri türleri, değer grubunu depolamak için kullanılır.

Örnek: Diziler, Yapı, Birleşim, bağlantılı liste, Yığınlar, Kuyruk vb.

(19)

Doğrusal Veri Yapıları

Doğrusal veri yapısı, elemanlar sıralı olarak saklanır. Doğrusal veri yapıları

Dizi: Ardışık bellek konumunda depolanan aynı veri türündeki verilerin bir koleksiyonudur ve ortak adla anılır

Bağlantılı liste: Aynı veri tipindeki verilerin bir koleksiyonudur, ancak veri öğelerinin ardışık bellek konumlarında depolanması gerekmez.

Yığın: Ekleme ve silme işleminin yığının tepesi adı verilen yalnızca bir uçta gerçekleştiği Son Giren İlk Çıkar doğrusal veri yapısıdır.

Kuyruk: Arka olarak adlandırılan bir uçta eklemelerin ve silmelerin Ön adı verilen bir uçta yer aldığı İlk Giren İlk Çıkar Doğrusal veri yapısıdır.

(20)

Doğrusal Olmayan Veri Yapısı

Öğeler, veriler arasındaki hiyerarşik ilişkiye göre saklanır. Aşağıdakiler Doğrusal Olmayan veri yapılarıdır:

• Ağaçlar, veri öğeleri arasında hiyerarşik bir ilişki olan verileri temsil etmek için kullanılır.

• Grafik, doğası gereği hiyerarşik olması gerekmeyen öğe çifti arasında ilişki olan

verileri temsil etmek için kullanılır. Örneğin elektrik ve iletişim ağları, havayolu

güzergahları, akış şeması, planlama projeleri için grafikler.

(21)

Veri yapısı üzerinde işlem

Ekleme: Veri yapısına yeni öğe ekleme

Silme: Veri yapısından veri kaldırılmasıdır

Arama: Verilen bir veri yapısı içindeki bir verinin yerini bulmaktır.

Sıralama: Verilerin mantıksal bir sırayla düzenlenmesidir.

Geçiş: Bir veri yapısı, her veriye yalnızca bir kez erişmektedir.

Birleştirme: İki benzer veri yapısının birleştirilmesidir.

(22)

Array

Linked List

Tree

Queue

Stack

Veri yapılarının türleri

(23)

23

Temel Kavramlar

Bilgisayar Organizasyonu

(24)

Bits and Bytes are Slightly Different

When Referring to Bytes (as in computer memory) – Kilobyte (KB) 210 = 1,024 bytes

– Megabyte (MB) 220 = 1,048,576 bytes

– Gigabyte (GB) 230 = 1,073,741,824 bytes

– Terabyte (TB) 240 = 1,099,511,627,776 bytes

When Referring to Bits Per Second (as in transmission rates) – Kilobit per second (Kbps) = 1000 bps (thousand)

– Megabit per second (Mbps) = 1,000,000 bps (million) – Gigabit per second (Gbps) = 1,000,000,000 bps (billion)

– Terabit per second (Tbps) = 1,000,000,000,000 bps (trillion)

“Kilo” or “Mega” have slightly different values when used with bits per second or with bytes.

(25)

Bits as Codes

• Klavyedeki her tuşun 8 bitlik bir karşılığı vardır.

• İkili Kodlar her harf, rakam ve özel karakteri temsil eder.

• ASCII: Her karakter benzersiz bir 8 bitlik koddur

• AsCII: 26 harf, 10 hane, özel karakterler için 256 benzersiz kod

• Unicode: 100.000'den fazla benzersiz karakteri destekler

25

(26)

What Is A Computer?

26

• Bilgisayar, veri işleme yeteneği olan bir yapıdır.

• Bilgisayar, otonom olarak bir dizi aritmetik veya mantıksal işlem gerçekleştirmek amacıyla programlanan genel amaçlı bir aygıttır.

• Yakın gelecekte binlerce işlemci, verileri çok hızlı işleyebilmesi için birarada çalışırken kuantalama hesaplama kullanacaktır. Bitler

elektronlar ya da fotonlar ile temsil edilecektir.

• Information System: Verileri alan, depolayan, işleyen ve çıktı olarak bilgi

sağlayan bir sistem

(27)

Günümüzde, askeri, sağlık, kritik alt yapılar, uzay ve beyin alanlarında kullanılan bilgisayar sistemleri bilgiyi işleyen, analiz eden ve kestirim yapan yazılımlar ile birlikte yoğun olarak kullanılmaktadır. Boyut

küçülmesi ve yüksek veri işleme hızları ile birlikte her alanda başta robotik sistemler olmak üzere

günümüzde bilgisayar sistemleri, uygarlığın özellikle nesnelerin (IoT) bütünleşik bir parçası olmuştur.

Bilgisayar Sistemlerinin Yetenekleri:

• Aritmetik hesaplamaları gerçekleştirir.

Mantıksal hesaplamalar yapar

• Karşılatırma yapar.

Verileri saklar. Verileri çok kısa zamanda arayıp bulur.

Verileri yazılan program doğrultusunda işler.

Büyük boyutlu problemleri kısa zamanda çözer.

Bilgisayar Sistemleri iki ana unsurdan oluşurlar: Donanım (hardware), bilgisayarların fiziksel kısımlarına donanım

denilmektedir. Ekran, klavye, Sabit disk (harddisk), fare, yazıcı, bellek, mikroişlemci, tarayıcı,… Yazılımı (software):

donanımı kullanmak için gerekli programlar. İşletim sistemleri ve altında çalışan bütün programlar.

Bilgisayar Sistemlerinin fonksiyonları ve yetenekleri

(28)

28

Computer Organization

Central Processor Unit (CPU)

Memory Storage Unit

registers

ALU clock

I/O Device

#1

I/O Device

#2

data bus

control bus address bus

CU

• control unit (CU) : controls operation timing / sequencing

• arithmetic logic unit (ALU) : performs all math & logic operations, receives command sequence from CU

• clock : synchronizes CPU operation

(29)

A Computer System

Blok diyagramları kullanan bir bilgisayar sisteminin temel bileşenleri

CPU – Central Processing Unit (Mekezi İşlemci Birimi - Mikroişlemci)

Memory

Input and output unit

System Bus: data bus, address bus and control bus.

 Evolution of microprocessor address lines: 8,16,32 dan 64 bit; Adres hatları bellek gözü veya I/O birimi seçmede kullanılır. Parelel hatlardır. Grup olarak çalışırlar. Üzerlerinde bitleri (1 / 0) temsil eden elektrik sinyalleri taşınır.

 Toplam kapasite= 2n byte olarak hesaplanır. Buradaki n ifadesi adres hattı sayısıdır.

 Örneğin adres hattı sayısı, n=30 ise bilgisayar sistemin adresleme kapasitesi=230 byte =1 GByte’dır.

 Data lines: Nibble, byte, word ... Longword. Bellekler ve I/O birimleri ile veri yazma ve okumada

kullanılır. Parelel hatlardır. Grup olarak çalışırlar. Üzerlerinde 1 ya da 0’ı temsil eden elektrik sinyalleri taşınır.

 Data bus hat sayısı taşınacak veri kapasitesini byte cinsinden belirler. Örneğin data bus hat sayısı 64 bit ise, data bus kapasitesi=64/8=8 byte’dır.

Address Decoding Unit

Fetching and execution cycles

Microprocessor clock system

29

(30)

The structure of a microprocessor

Arithmetic and logic unit

Control Unit

 Registers:

 Data Registers

 Pointer and Index registers,

 Segment registers,

 Program counter,

 Flags

30

İşlemci iki kısından oluşur:

• Kontrol birimi ve aritmetik/mantık birimi.

• Bu iki bileşen işlemci içinde sistem veriyolu adı verilen bir çeşit elektronik bağ ile birleştirilir.

• Veriyolu aynı zamanda bu bileşenleri bilgisayar sisteminin belleklekleri ve I/O birimleri ile

birleştirir.

(31)

Registers

• Special-purpose

• High-speed

• Temporary storage

• Located inside CPU

Mikroişlemcinin iç yapısında,

• Veri işleme ve Veri iletişim ara yüzünde kullanılır.

• Özel amaçlı saklayıcıdır.

• Yüksek hızlı veri işlemde ve transfer etme hızlı rol oynar.

• Geçici depolama alanıdır.

• CPU içinde bulunur. CPU’nun ana bileşenidir.

(32)

Mikroişlemci işlev döngüsü

(33)

Mikroişlemci ana işlev döngüsünde, Fetch Process:

• Veriyi bellek ya da I/O biriminden Git – Al – Getir.

• Veriyi bellek ya da I/O birimine Al - Götür.

Execute process : Uygula, işle

Decode: Bellek ve ilgili gözünü seçer.

(34)

34

Address decoding unit, bellek seçer. Belleğin gözü ise CPU’dan gelen adres hatları yardımıyla seçilir.

Bir bellek seçilirken adres decoding devresine CPU’dan gelen adres hatları kullanılır. Adres decoding devresinin çıkışları bellekleri seçmede kullanılır.

Seçilecek bellek sayısı=Address decoding devresi çıkış sayısı=2m dir.

Burada m CPU’dan gelen adres hattı sayısıdır.

Herbir belleğin kapasitesini belirleyen (Kapasite=2n ) n adet hat CPU’dan gelir.

Amaç aynı anda bir belleğin ilgili veri gözünün seçilmesidir.

Adres decoding devresinin çıkış sayısı bellek sayısına eşit ya da büyük olmak olmak sorundadır.

Adres decoding devresini girişi, CPU dan gelecek adres hattı sayısı belirlenir. Özeldir.

Address Decoding Unit

(35)

A computer consists of

1) Central Processing Unit 2) Memory unit

3) Input/Output units 4) System Bus

5) Address decoding units; select memories and memory cell; prevent overlap

Bus is data path.

Control bus checks the data to the destination.

Adres Bus ve Data Bus, grup olarak çalışırlar.

Üzerlerinde bitleri (1 / 0) temsil eden elektrik

sinyalleri taşınır.

(36)

Memory Types

• Ana Bellek: Ram, Rom, CMOS (BIOS)

• Cache

• Dynamic ram

• Static ram

• Flash memory

• Memory sticks

• Virtual memory

• Video memory

• Bios

• Hard Disk

• Belleklerin üç görevi vardır:

– İşlenecek veriyi depolar.

– Veriyi işleyen komutları (programları) depolar.

– İşlenmiş, iletişim veya çıkış aygıtlarına gönderilmek için bekleyen veriyi

depolar.

(37)

37

Algoritma Geliştirmede Kullanılan

Temel Kavramlar

(38)

Aritmetik İşlemler

Algoritma aşamalarında aritmetik işlemler programlama koduna uygun olmalıdır. Bilgisayar organizasyonu ile uyumlu olmadı.

Özellikle fetch, execute, decoding döngüsünün iyi bilinmesi gerekir.

Aritmetiksel Operatörler

İşleç Adı Örnek Açıklama

+ Toplama C=A+B A ve B sayılarını toplar ve sonucu C ye aktarır.

- Çıkarma C=A-B A sayısından B yi çıkarır ve sonucu C ye aktarır.

* Çarpma C=A x B A ve B sayılarını çarpar ve sonucu C ye aktarır.

/ Bölme C=A / B A sayısını B sayısına böler ve sonucu C ye aktarır.

% Mod C=A % B A sayısını B sayısına böler ve kalanı C ye aktarır.

= Atama C=A+B A ve B sayılarını toplar ve sonucu C ye aktarır.

(39)

Mantıksal İşlemler

Bir algoritma akışı içerisinde, belirli bir koşula bağlı olarak akışın hangi yönde ilerleyeceğine karar vermede mantıksal operatörler kullanılır. Bu operatörler karşılaştırma işlemlerinde kullanıldıklarında sonuç olarak sadece true(doğru) ya da false(yanlış) değerleri üretilir.

İşleç Adı Örnek Açıklama

> Büyük A > B A değişkeni B değişkeninden büyükse true, değilse false değeri üretir..

< Küçük A < B A değişkeni B değişkeninden küçükse true, değilse false değeri üretir..

== Eşit A == B A değişkeni B değişkeninden eşitse true, değilse false değeri üretir..

!= Eşit Değil (Farklı) A != B A değişkeni B değişkeninden eşit değilse true, değilse false değeri üretir..

>= Büyük eşit A >= B A değişkeni B değişkeninden büyük ya da eşitse true, değilse false değeri üretir..

<= Küçük eşit A <= B A değişkeni B değişkeninden küçük ya da eşitse true, değilse false değeri üretir..

(40)

• Programming Constructs:

– decision structures: if … then … [else …]

– while-loops: while … do

– repeat-loops: repeat … until … – for-loop: for … do

– array indexing: A[i], A[i,j]

• Methods:

– calls: object method(args) – returns: return value

Karşılaştırma, Aritmetik, Çevrimsel ve Alt Programlar

(41)

Algoritma Geliştirmede Kullanılan Temel Kavramlar

1 – Değişkenler

2 – Atama Operatörü 3 – Sayaçlar

4 – Döngüler

(42)

Algoritma Geliştirmede Kullanılan Temel Kavramlar

• 1- Değişken : Bir program içerisinde bilgileri tutmak ve bu bilgiler üzerinde işlem yapmak için değişkenlerden yararlanılır.

• Örneğin c=a+b ifadesindeki "a","b" ve "c" değişkenlerdir.

• Değişkenler, farklı zamanlarda farklı değerler alabilen bilgi sahalarına verilen sembolik adlardır.

• Bilgisayar işlem yaparken RAM belleği(geçici bellek) kullanır. İşte program yazılırken programcının Ram belleği kullanmasını sağlayan değişkenlerdir.

• Değişkenler Ram bellekte tahsis edilmiş odacıklar olarak düşünülebilir. Yani bir değişken tanımlandığında ram bellekte bir odacık (bir bölüm) açılır ve bu bölüme değişken ismiyle ulaşılır.

• Program içinde kullanılacak olan değişkenler problemin tanımı ve girdi-çıktı belirleme aşamalarında belirlenmelidir.

42

(43)

Algoritma Geliştirmede Kullanılan Temel Kavramlar

 2-Atama: Herhangi bir değişkenin içine bir değeri veya ifadenin/işlemin sonucunu aktarma işlemidir.

• değişken = ifade

• Satırında ‘ değişken’ yazan kısım, herhangi bir değişkenin adıdır. ‘ifade’ yazan kısımda ise matematiksel, mantıksal veya alfa nümerik bir ifade olabilir. Aradaki ‘=‘ sembolü, ‘atama operatörü’ olarak adlandırılır ve sağdaki ifadenin/işlemin sonucunu soldaki değişkene aktarır. Bu durumda değişkenin -eğer varsa- bir önceki değeri (eski değeri) silinir.

• X=3

• Y=X+5

• işleminin sonucunda Y’nin bir önceki değeri silinerek yerine 8 değeri yazılır.

43

(44)

Algoritma Geliştirmede Kullanılan Temel Kavramlar

• 3- Sayaç : Programlarımızda bazı işlemlerin belirli sayıda yaptırılması veya işlenen/üretilen değerlerin sayılması gerekebilir.

• Örneğin: Klavyeden girilen bir cümlede kaç sesli harf olduğunu bulan programda, cümlenin her harfi sırayla çağrılır ve sesli harfler kümesine ait olup olmadığı araştırılır. Eğer çağrılan harf bu kümeye ait ise bunları sayacak olan değişkenin değeri bir artırılır.

sayac = sayac + 1

• Şeklindeki işlemde sağdaki ifadede değişkenin eski(önceki) değerine ‘1’

eklenmekte; bulunan sonuç yine kendisine, yeni değer olarak aktarılmaktadır.

Bu tür değişkenlere, algoritmada “sayaç” veya “sayıcı” (counter) adı verilir.Yani

“sayaç”; işlem akışı kendisine her geldiğinde, belirtilen adım değeri kadar

artan/azalan değişkendir.

(45)

4- Döngü :

• Birçok programda, bazı işlemler belirli ardışık değerlerle gerçekleştirilmekte veya belirli sayıda yapılmaktadır.

• Programlardaki belirli işlem bloklarını, belirli sayıda tekrarlayan işlem akış çevrimlerine döngü denir.

45

Algoritma Geliştirmede Kullanılan Temel Kavramlar

(46)

Algoritma Geliştirmek

Problem çözmenin 3. adımı algoritma geliştirmektir. Geliştirilen algoritma kağıt ya da bilgisayar ortamında yazılı hale getirilmelidir. Algoritmayı yazılı hale getirebilmek için 3 yöntem kullanılır.

• Satır Algoritma Yöntemi

• Akış Diyagramları Yöntemi

• Sözde Kod Yöntemi

Satır algoritma ile Akış diyagramı yöntemleri matematik, inşaat, vb. herhangi bir konuda problem çözülürken kullanılabilir. Ancak sözde kod tamamen programlamaya yönelik bir gösterimdir. Ve kodlamaya çok yakın bir yöntemdir.

(47)

47

Akış Diyagramları

(48)

Akış Şeması

• Akış Şeması, algoritmanın görsel ya da şekilsel olarak ortaya koyulmasıdır. Problemin çözümü için yapılması gerekenleri başından sonuna kadar geometrik şekillerden oluşan simgelerler gösterilir.

• Algoritma geliştirildikten sonra, daha iyi anlaşılabilir olması ve programlama dillerine aktarımı daha kolay olması nedeniyle, akış şeması oluşturulur.

• Akış şeması bir problemin çözüm sürecinin semboller ile gösterilmesidir.

(49)

49 49

Akış Diyagramları

• Geliştirilecek olan yazılımın genel yapısının şematik gösterimine akış diyagramı veya blok diyagramı adı verilir.

• Akış diyagramları, yazılımı oluşturacak program parçalarını ve bu parçaların birbirleri ile olan ilişkilerini belirler.

• Bir bilgisayar programının oluşturulmasında akış diyagramlarının hazırlanması, algoritma oluşturma aşamasından sonra gelmektedir.

• Bilgisayar programının oluşturulması sırasında algoritma aşaması atlanarak, doğrudan akış diyagramlarının hazırlanmasına başlanabilir.

• Programlama tekniğinde önemli ölçüde yol almış kişiler bu aşamayı da atlayarak direkt olarak programın yazımına geçebilirler.

• Akış diyagramlarının algoritmadan farkı, adımların simgeler şeklinde kutular içinde

yazılmış olması ve adımlar arasındaki ilişkilerin (iş akışı) oklar ile gösterilmesidir.

(50)

Akış Diyagramları

Akış Diyagramları, algoritmanın belirli grafikler kullanılarak ifade edilme şeklidir.

Şekil Anlamı

Algoritmanın Başlangıcını ve bitişini göstermekte kullanılır.

Kullanıcıdan bilgi alınacağı zaman kullanılır.

Aritmetiksel, Mantıksal vb. işlemleri ifade etmek için kullanılır.

Kullanıcıya bilgi gösterileceği zaman kullanılır.

Başla/Dur

Bilgi Girişi

İşlem

Bilgi Çıkışı

(51)

Akış Diyagramları

Akış Diyagramları, algoritmanın belirli grafikler kullanılarak ifade edilme şeklidir.

Şekil Anlamı

Algoritma içinde belirli bir koşula bağlı olarak akışın dallanmasını sağlamak için, karar yapılarında kullanılır.

Tekrarlı işlemleri ifade etmek için kullanılır.

Aynı sayfaya sığmayacak algoritmaların devamıyla bağını göstermek için kullanılır.

Adımlar arasındaki bağlantıyı ve akış yönünü göstermek için kullanılır.

Karar

Döngü

Bağ

(52)

Akış Çizelgesinde Kullanılan Semboller

(53)

Akış Şeması Yapısı

• Sıra

• Karar

• Tekrarlama

• Durum

(54)

What is a Flowchart?

• A flowchart is a diagram that

depicts(“yosor”) the “flow” of a program.

• The figure shown here is a

flowchart for the pay-calculating program in Chapter 1.

START

Display message “How many hours did you work?”

Read Hours

Display message “How much do you get paid per

hour?”

Read Pay Rate

Multiply Hours by Pay Rate. Store result in

Gross Pay.

Display Gross Pay

END

(55)

Basic Flowchart Symbols

• Terminals

– represented by rounded rectangles – indicate a starting or ending point

START

Display message

“How many hours did you work?”

Read Hours

Display message “How much do you get paid per hour?”

Read Pay Rate

Multiply Hours by Pay Rate. Store

result in Gross Pay.

Display Gross Pay

END

Terminal

START

END

Terminal

(56)

Karar Verme – Koşul ileri sürme

(57)

Karar Verme

(58)

Karar Verme

(59)

Döngü Yapısı

• Bu yapı kullanılırken, döngü sayacı, koşul bilgisi ve sayacın artım bilgisi verilmelidir. Döngü sayacı kullanılmıyorsa sadece döngüye devam edebilmek için gerekli olan koşul bilgisi verilmelidir.

Genel olarak çoğu programlama dilinin döngüdeyimleri ;

• While

• Do-while

• For

gibi yapılar üzerine kurulmuştur. Farklı dillerde bu yapılara farklı alternatifler olsa da döngülerin çalışma mantığı genel olarak benzerdir.

(60)

1- Döngü değişkeninin başlangıç değeri belirlenir.

2- Döngü değişkeninin bitiş değeri belirlenir.

3- Döngü değişkeninin bitiş değerine ulaşıp ulaşmadığı test edilir.

4- İstenen işlem gerçekleştirilir.

5- Döngü değişkeni, döngü içinde adım miktarı kadar artırılır ya da azaltılır.

Döngü Oluşturma Kuralları:

60

(61)

While Deyimi

• Koşul daha çevrim içerisine girmeden sınanır. Koşul olumsuz olduğunda çerime hiç girilmez ve döngü içerisinde yapılması gerekenler atlanır.

(62)

Do-While Deyimi

• Bu döngüdeyiminde, çevrim en az bir defa olmak üzere gerçekleşir.

Çünkü koşul sınaması döngü

sonunda yapılmaktadır. Eğer koşul sonucu olumsuz ise bir sonraki

çevrime geçilmeden döngüden

çıkılır. Çevrimin devam edebilmesi için her döngü sonunda yapılan

koşul testinin olumlu sonuçlanması

gerekir.

(63)

For Deyimi

• Diğer deyimlerden farklı olarak, döngü sayacı doğrudan koşul parametreleri düzeyinde verilir.

• Döngü girmeden önce sayaç değişkenine başlangıç değeri atanmakta ve daha sonra koşula bakılmaktadır. Döngü içerisinde belirtilen işlemler yapıldıktan sonra sayaç

değişkeni arttırılmaktadır.

I=1,20,3 J=30,4,-2 K=1,80

(64)

İç İçe Döngüler

• İçiçe döngü kurulurken en önemli unsur, içteki döngü sonlanmadan bir dıştaki döngüye geçilmemesidir.

Diğer bir deyişle döngüler birbirlerini kesmemelidir.

• Aşağıdaki gösterimde en içteki döngü bir dıştaki döngünün her adımında N kez tekrarlanır.

(65)

Matrix Operations

• Matrix addition/subtraction

– Matrices must be of same size.

• Matrix multiplication

Condition: n = q

m x n q x p m x p

(66)

Akış Diyagramları

Klavyeden girilen iki adet sayıdan büyük olanını ekrana yazan algoritmayı oluşturunuz.

Başla

Oku (Sayı1)

Oku (Sayı2)

Yaz Sayı1 Yaz Sayı2

Dur

Sayı1 > Sayı 2

True (E) False (H)

(67)

Akış Diyagramları

Klavyeden girilen sayının pozitif ya da negatif, ya da sıfır olduğunu ekrana yazan algoritmayı oluşturunuz.

Başla

Oku (Sayı)

Sayı>0

‘’POZİTİF’’

Dur

True (E)

False (H)

Sayı<0 True (E)

‘’NEGATİF’’ ‘’SIFIR’’

False (H)

(68)

Akış Diyagramları

Örnek: Kullanıcıdan 100 adet sayı alarak, bu sayıların toplamını ekrana yazan algoritmayı akış diyagramları ile oluşturunuz.

Oku (Sayı)

Adet<=100 Yaz ‘’Bir Sayı Girin’’

Başla

Toplam=0, Sayac=1, Adet=0

Toplam=Toplam + Sayı

Adet=Adet + 1

Yaz Toplam

Dur True (E)

Başla

Toplam=0, Sayac=1,

Sayac=1,100,1

Yaz ‘’Bir Sayı Girin’’

Oku (Sayı)

Toplam=Toplam + Sayı Yaz Toplam

Dur

(69)

Akış Diyagramları

Klavyeden girilen sayının faktöriyelini hesaplayan algoritmayı oluşturunuz.

Başla

Fakt=1,Sayac=0

Oku (Sayı)

Sayac=Sayac + 1

Fakt=Fakt * Sayac

Sayac<Sayı

Yaz Fakt

Dur True (E)

(70)

Case Structure

• One of several possible actions is taken, depending on the contents of a variable.

• The structure below indicates actions to perform depending on the value in years_employed.

CASE

years_employed

1 2 3 Other

bonus = 100 bonus = 200 bonus = 400 bonus = 800

(71)

Case Structure

CASE

years_employed

1 2 3 Other

bonus = 100 bonus = 200 bonus = 400 bonus = 800

If years_employed = 1, bonus is set to 100

If years_employed = 2, bonus is set to 200

If years_employed = 3, bonus is set to 400

If years_employed is any other value, bonus is set to 800

(72)

72

• İki sayının toplamını ve ortalamasını yapan bilgisayar

programının akış diyagramını çiziniz.

Ortalama, Toplam

2

(73)

73

• A²+Bx+C=0 şeklinde verilen 2. derece denklemin köklerini bulan programın akış diyagramını

Kökler Sanal

X1,X2

C=?

(74)

Örnek 12: p sayısının formülü olduğuna göre serinin paydasındaki ifade 100 oluncaya kadar pi sayısını hesaplayan bilgisayar programının akış diyagramını çiziniz.

Pi

(75)

Örnek: Girilen sayının tek mi, çift mi olduğunu gösteren akış diyagramı.

Bir sayıyı giriniz

Sayı ikiye bölümünden kalanı bul

Bitiş Başla

Kalan

0 mı ?

Tek

Çift

Algoritması 1-Başla

2- Bir sayı giriniz

3- sayının 2 ye bölümünden kalanı bul 4- kalan o ise «sayı çifttir» yaz

5-değilse »Sayı çift «yaz 6- Bitir

(76)

Bir sayıyı giriniz (x)

S=X*Y

Bitiş Başla

X>Y

S

Bir sayıyı giriniz(Y)

S=X + Y

Değişkenler:

Birinci sayı = X İkinci sayı = Y Sonuç = S

Algoritma : 1.Adım : Başla

2.Adım : Birinci sayıyı oku (X) 3.Adım : İkinci sayıyı oku(Y)

4.Adım : X > Y ise S=X*Y ve 6. adıma git 5.Adım : X <= Y ise S= X +Y

6.Adım : S yi göster 7.Adım : Bitir.

Girilen iki sayıdan birincisi ikincisinden büyükse

İkisini çarpan küçük veya eşitse toplayıp sonucunu

Gösteren programın algoritması

(77)

Korona evde kal algoritması

(78)

78

Sözde Kodlar

(79)

Sözde Kodlar

Bilgisayarda bir programlama dili olarak çalışmayan, ancak programlama dillerine yakın algoritma ifadelerine sözde kodlar(pseudo-code) denir. Bu yöntem farklı kullanım şekillerine sahiptir. Fakat genel kullanım dili İngilizce ve programlama dili olarak pascal diline çok benzerlik gösterir.

Kaba Kod veya Sözde Kod ( Pseudo Code), bir algoritmanın yarı programlama dili kuralı, yarı konuşma diline dönük olarak ortaya koyulması ya da tanımlanmasıdır. Bu şekilde gösterim algoritmayı genel hatlarıyla yansıtır.

Sözde kodlar yapısal olarak 4 temel ögeye sahiptir.

1. Okuma / Yazma İşlemleri: Okuma işlemleri için GET, READ , Yazma işlemleri için WRITE,DISPLAY gibi komutlar kullanılır.

2. İşlemler :Sözde kod içinde gerçekleştirilen toplama, çıkarma, çarpma, bölme vb.

aritmetiksel işlemler, bir değişkene değer atanması gibi işlemlerdir.

3. Karar Yapıları : Bir koşula bağlı olarak bir işin yapılıp yapılamayacağına karar verme işlemleridir.

4. Tekrarlı Yapılar : Program içinde bir koşula bağlı olarak ya da belirli bir sayıda tekrar edecek işlemler için kullanılırlar.

(80)

Pseudo code: basic notation

1. We will use := for the assignment operator.

2. Method signatures will be written as follows:

Algorithm name ({parameter list})

3. Programming constructs will be described as follows:

decision structures: if ... then ... else ...

while loops: while ... do {body of the loop}

repeat loops: repeat {body of the loop} until ...

for loops: for ... do {body of the loop}

array indexing: A[i]

4. Method calls: Method name ({argument list}) 5. Return from methods: return value

(81)

Örnek: Aşağıdaki algoritmada 1-10 arası tek sayıların toplamı hesaplanmaktadır. (Aşağıdaki algoritmayi çift sayıların toplamına hangi değişikliği yaparak dönüştürebilirsiniz?)

A1: Başla

A2: toplam=0 A3: sayac=1

A4: Eğer sayac>=10 ise adım 8 e git A5: toplam=toplam+sayac

A6: sayac=sayac+2 A7: Adım 4 e git

A8: toplam ı ekrana yaz A9: Bitir

‘Döngü’ Kavramına Örnek:

Döngü

Hangi amaçlarla kaç değişkene ihtiyaç var?

81

(82)

Örnek : Dışarıdan girilen iki sayının toplamını bulan programın algoritması aşağıdaki gibi kurulur:

Algoritma:

A1 : Başla

A2 : A değerini gir A3 : B değerini gir A4 : C= A+B

A5 : C' yi ekrana yaz A6 : Bitir

Hangi amaçlarla kaç değişkene ihtiyaç var?

(83)

Örnek : Dışarıdan girilen 3 sayıdan en büyüğünü bulan algoritmayı kurunuz.

Algoritma:

A1 : Başla

A2 : A, B ve C sayılarını dışarıdan gir A3 : enBuyuk=A

A4 : Eğer enBuyuk<B ise enBuyuk=B yap A5 : Eğer enBuyuk<C ise enBuyuk=C yap A6 : enBuyuk değerini ekrana yaz

A7 : Bitir

Hangi amaçlarla kaç değişkene ihtiyaç var?

(84)

Örnek: 0’dan 100’e kadar olan sayma sayılarının kümülatif toplamını ekrana yazdıran algoritmayı geliştiriniz.

1. A1 : Başla

2. A2 : toplam=0;sayac=1 baslangıç değerlerini ata 3. A3 : Eğer sayac=100 ise 6. adıma git

4. A4 : toplam=toplam+sayac

5. A5 : sayac=sayac+1 yap ve 3. Adıma geri dön 6. A6 : toplam’ı ekrana yaz

7. A7 : Bitir

Hangi amaçlarla kaç değişkene ihtiyaç var?

(85)

Örnek: Verilen bir sayının faktöriyelini hesaplayan programın algoritmasını yazınız. (Faktöriyeli hesaplanacak sayı negatif girilmişse yeniden giriş istenmelidir.)

Değişkenler:

Sayının faktöriyeli : faktor , Faktöriyel Değişkeni :sayac Faktöriyeli hesaplanacak sayı :Y

Algoritma:

A1: Başla

A2 : faktor =1; sayac =1 A3 : Y’yi gir

A4 : Eğer Y<=0 ise 3. adima git A5 : Eğer sayac>Y ise adim 8 e git A6: faktor=faktor*sayac

A7: sayac =sayac+1 yap ve adım 5 e git A8 : faktor degerini ekrana yaz

A9 : Bitir

Hangi amaçlarla kaç değişkene ihtiyaç var?

Anlamlı Değişken İsimleri Seçmek Çok Önemli !!!!!!!!!!!!

(86)

86

Satır Algoritmaları

(87)

Satır Algoritmaları

Satır Algoritmalar, problem çözümünü günlük yazı konuşma diliyle ifade ederek sıra numarasıyla yazılarak oluşturulur. Konuşma diline çok yakın olmasından dolayı bir algoritmayı ifade etmenin en basit yoludur.

Örnek : Kullanıcıdan iki sayıyı alıp, bu iki sayının toplamını ekrana yazdıran algoritmayı tasarlayın.

Çözüm : 1. Başla

2. Oku (Sayı1,Sayı2) 3. Sonuç=Sayı1 + Sayı2 4. Sonucu Ekrana Yaz 5. Dur

Not: Burada Sayı1 ve Sayı2 değişkenleri girdi, Sonuç değişkeni çıktı olarak kullanılmıştır.

Yani programın iki girdisi ve bir çıktısı vardır.

(88)

Satır Algoritmaları

Örnek: Kullanıcıdan bir kenarı alınan karenin çevresini ve alanını hesaplayarak ekrana yazdıran algoritmayı tasarlayın.

1. Başla

2. Oku (Kenar)

3. Çevre=kenar * 4 4. Alan=kenar * kenar 5. Çevreyi ekrana yaz 6. Alanı ekrana yaz 7. Dur

Not : Burada kenar bilgisi girdi, çevre ve alan değerleri ise değişken olarak

kullanılmıştır. Burada kenar, çevre, alan değişken olarak tanımlanmıştır.

(89)

Satır Algoritmaları

Örnek: Klavyeden yol ve aracın hız bilgisi alınarak ne kadar sürede yolun tamamlanacağını hesaplayan algoritmayı oluşturunuz.

Çözüm;

1. Başla

2. Oku (Yol) 3. Oku (Hız)

4. Süre=Yol / Hız (Y=V * t den) 5. Süreyi Ekrana Yaz

6. Dur

(90)

Satır Algoritmaları

Örnek: Klavyeden girilen iki adet sayıdan büyük olanını ekrana yazan algoritmayı oluşturunuz.

Çözüm;

1. Başla

2. Oku (Sayı1) 3. Oku (Sayı2) 4. Eğer

4.1. (Sayı1>Sayı2) Enbüyük=Sayı1 4.2. Değilse Enbüyük=Sayı2

5. Enbüyüğü ekrana yaz

6. Dur

(91)

Satır Algoritmaları

Örnek: Klavyeden girilen sayının tek ya da çift olup olmadığını ekrana yazdıran algoritmayı oluşturunuz.

Çözüm;

1. Başla

2. Oku (sayı) 3. Eğer

3. 1. ((Sayı % 2)==0) ise ekrana yaz ‘’çift’’

3. 2. Değilse ekrana yaz ‘’tek’’

4. Dur

(92)

Satır Algoritmaları

Örnek: Kullanıcıdan bir sayı alıp 1 den başlayarak kullanıcıdan aldığı sayıya kadar bir artırarak ekrana yazdıran algoritmayı oluşturunuz.

Çözüm;

1. Başla

2. Sayac=0, Toplam=0 3. Oku (sayı)

4. Eğer (Sayac >= Sayı), Adım 8 e git 5. Toplam = Toplam + Sayac

6. Sayac = Sayac + 1 7. Adım 4 e git

8. Yaz Toplam

9. Dur

(93)

Satır Algoritmaları

Örnek: 1 den 100 e kadar olan sayılardan 8 e tam bölünebilen sayıları ekrana yazdıran algoritmayı oluşturunuz.

Çözüm;

1. Başla 2. Sayı=0 3. Eğer

3. 1. (Sayı > 100) ise Adım 6 ya git 3. 2. Eğer

3. 2. 1. ((Sayı % 8)==0) ise Sayıyı ekrana yaz 4. Sayı=Sayı + 1

5. Adım 3 e git

6. Dur

(94)

94

Algoritma Analizi

(95)

Analysis of Algorithms

Analysis of Algorithms is the area of computer science that provides tools to analyze the efficiency of different methods of solutions.

• How do we compare the time efficiency of two algorithms that solve the same problem?

Naïve Approach: implement these algorithms in a programming language (C++), and run them to compare their time requirements. Comparing the programs (instead of algorithms) has difficulties.

– How are the algorithms coded?

• Comparing running times means comparing the implementations.

• We should not compare implementations, because they are sensitive to programming style that may cloud the issue of which algorithm is inherently more efficient.

– What computer should we use?

• We should compare the efficiency of the algorithms independently of a particular computer.

– What data should the program use?

• Any analysis must be independent of specific data.

(96)

Analysis of Algorithms

Algoritmaların Analizi, farklı çözüm yöntemlerinin verimliliğini analiz etmek için araçlar sağlayan bilgisayar bilimi alanıdır.

• Aynı problemi çözen iki algoritmanın zaman verimliliğini nasıl karşılaştırırız?

Naïve Yaklaşımı: Algoritmaları bir programlama dilinde (C ++) uygulanır ve zaman gereksinimlerini karşılaştırmak için çalıştırılır. Programları karşılaştırırken (algoritmalar yerine) zorluklar var.

– Algoritmalar nasıl kodlanıyor?

• Çalışma sürelerinin karşılaştırılması, uygulamaları karşılaştırmak anlamına gelir.

• Uygulamaları karşılaştırmamalıyız çünkü bunlar, hangi algoritmanın doğası gereği daha verimli olduğu konusunu bulandırabilecek programlama stiline duyarlıdır.

– Hangi bilgisayarı kullanmalıyız?

• Algoritmaların verimliliğini belirli bir bilgisayardan bağımsız olarak karşılaştırmalıyız.

– Program hangi verileri kullanmalıdır?

• Herhangi bir analiz belirli verilerden bağımsız olmalıdır.

(97)

Analysis of Algorithms

• Algoritmaları analiz ederken, algoritmaları belirli uygulamalardan, bilgisayarlardan veya verilerden bağımsız olarak analiz eden matematiksel teknikler kullanmalıyız.

• Algoritmaları analiz etmek için:

– İlk olarak, verimliliğini değerlendirmek için belirli bir çözümdeki önemli işlemlerin sayısını saymaya başlarız.

– Ardından, büyüme fonksiyonlarını kullanarak algoritmaların verimliliğini ifade edeceğiz.

(98)

The Execution Time of Algorithms

• Each operation in an algorithm (or a program) has a cost.

 Each operation takes a certain of time.

count = count + 1;  take a certain amount of time, but it is constant

A sequence of operations:

count = count + 1; Cost: c1 sum = sum + count; Cost: c2

 Total Cost = c1 + c2

(99)

The Execution Time of Algorithms (cont.)

Example: Simple If-Statement if (n < 0)

absval = -n else

absval = n;

Example: Simple Loop

i = 1;

sum = 0;

while (i <= n) {

i = i + 1;

sum = sum + i;

}

(100)

The Execution Time of Algorithms

Example: Nested Loop

i=1;

sum = 0;

while (i <= n) { j=1;

while (j <= n) {

sum = sum + i;

j = j + 1;

}

i = i +1;

}

(101)

General Rules for Estimation

• Döngüler: Bir döngünün çalışma süresi, en fazla o döngünün içindeki ifadelerin çalışma süresinin yineleme sayısı ile çarpımıdır.

• İç İçe Döngüler: En içteki döngüde bir deyim içeren yuvalanmış bir döngünün çalışma süresi, tüm döngülerin boyutunun çarpımı ile ifade çalışma süresidir.

• Ardışık İfadeler: Sadece bu ardışık ifadelerin çalışma sürelerini ekleyin.

• If / Else: Hiçbir zaman testin çalışma süresinin yanı sıra S1 ve S2'nin daha uzun çalışma

sürelerinden fazla olamaz.

(102)

Algorithm Growth Rates

We measure an algorithm’s time requirement as a function of the problem size.

– Problem size depends on the application: e.g. number of elements in a list for a sorting algorithm, the number disks for towers of hanoi.

• So, for instance, we say that (if the problem size is n)

– Algorithm A requires 5*n2 time units to solve a problem of size n.

– Algorithm B requires 7*n time units to solve a problem of size n.

• The most important thing to learn is how quickly the algorithm’s time requirement grows as a function of the problem size.

– Algorithm A requires time proportional to n2. – Algorithm B requires time proportional to n.

An algorithm’s proportional time requirement is known as growth rate.

• We can compare the efficiency of two algorithms by comparing their growth rates.

(103)

Algorithm Growth Rates

• Bir algoritmanın zaman gereksinimini problem boyutunun bir fonksiyonu olarak ölçülürr.

– Sorunun boyutu uygulamaya bağlıdır: ör. sıralama algoritması için bir listedeki öğelerin sayısı, hanoi kuleleri için sayı diskleri.

• Yani, örneğin, şunu söylüyoruz (problem boyutu n ise)

– Algoritma A, n boyutundaki bir problemi çözmek için 5 * n2 zaman birimi gerektirir.

– Algoritma B, n boyutundaki bir problemi çözmek için 7 * n zaman birimi gerektirir.

• Öğrenilmesi gereken en önemli şey, algoritmanın zaman gereksiniminin problem boyutunun bir fonksiyonu olarak ne kadar hızlı büyüdüğüdür.

– Algoritma A, n2 ile orantılı zaman gerektirir.

– Algoritma B, n ile orantılı zaman gerektirir.

• Bir algoritmanın orantılı zaman gereksinimi büyüme oranı olarak bilinir.

• İki algoritmanın verimliliğini, büyüme oranlarını karşılaştırarak karşılaştırabiliriz.

(104)

Common Growth Rates

Function Growth Rate Name

c Constant

log N Logarithmic

log

2

N Log-squared

N Linear

N log N

N

2

Quadratic

N

3

Cubic

2

N

Exponential

(105)

Definition of the Order of an Algorithm

Definition:

Algorithm A is order f(n) – denoted as O(f(n)) – if constants k and n

0

exist such that A requires

no more than k*f(n) time units to solve a problem of size n  n

0

.

• The requirement of n  n 0 in the definition of O(f(n)) formalizes the notion of sufficiently large problems.

– In general, many values of k and n can satisfy this definition.

(106)

Order of an Algorithm

If an algorithm requires n2–3*n+10 seconds to solve a problem size n. If constants k and n0 exist such that k*n2 > n2–3*n+10 for all n n0 .

the algorithm is order n2 (In fact, k is 3 and n0 is 2) 3*n2 > n2–3*n+10 for all n 2 .

Thus, the algorithm requires no more than k*n2 time units for n n0 , So it is O(n2)

(107)

A Comparison of Growth-Rate Functions

(108)

Growth-Rate Functions

O(1) Time requirement is constant, and it is independent of the problem’s size.

O(log2n) Time requirement for a logarithmic algorithm increases increases slowly as the problem size increases.

O(n) Time requirement for a linear algorithm increases directly with the size of the problem.

O(n*log2n) Time requirement for a n*log2n algorithm increases more rapidly than a linear algorithm.

O(n2) Time requirement for a quadratic algorithm increases rapidly with the size of the problem.

O(n3) Time requirement for a cubic algorithm increases more rapidly with the size of the problem than the time requirement for a quadratic algorithm.

O(2n) As the size of the problem increases, the time requirement for an exponential algorithm increases too rapidly to be practical.

(109)

Growth-Rate Functions

• If an algorithm takes 1 second to run with the problem size 8, what is the time requirement (approximately) for that algorithm with the problem size 16?

• If its order is:

O(1)  T(n) = 1 second

O(log2n)  T(n) = (1*log216) / log28 = 4/3 seconds O(n)  T(n) = (1*16) / 8 = 2 seconds

O(n*log2n) T(n) = (1*16*log216) / 8*log28 = 8/3 seconds O(n2)  T(n) = (1*162) / 82 = 4 seconds

O(n3)  T(n) = (1*163) / 83 = 8 seconds

O(2n)  T(n) = (1*216) / 28 = 28 seconds = 256 seconds

(110)

Properties of Growth-Rate Functions

1. We can ignore low-order terms in an algorithm’s growth-rate function.

– If an algorithm is O(n

3

+4n

2

+3n), it is also O(n

3

).

– We only use the higher-order term as algorithm’s growth-rate function.

2. We can ignore a multiplicative constant in the higher-order term of an algorithm’s growth-rate function.

– If an algorithm is O(5n

3

), it is also O(n

3

).

3. O(f(n)) + O(g(n)) = O(f(n)+g(n))

– We can combine growth-rate functions.

– If an algorithm is O(n

3

) + O(4n), it is also O(n

3

+4n

2

)  So, it is O(n

3

).

– Similar rules hold for multiplication.

Referanslar

Benzer Belgeler

Bazıları insanları enfekte edebiliyor ve yaygın olarak basit bir soğuk algınlığına ya da MERS (Orta doğu solunum sendromu) ve SARS (Ciddi akut solunum sendromu) gibi çok ciddi

Expectations of investors is most important speciality of FZ's sector, because Zones are established for especially foreign investors and investor decides investing on this

şöyle der: “Aslında şunun farkına varıyoruz ki, dünya, daha iyi olduğu kadar daha kötü için de, her zaman daha fazla olasılıklar banndınyor

Daha önce de belirtildiği gibi birey, kendini herhangi bir bağlamda iç grup-dış grup boyutunda sınıflandırdığında yani bireyin sosyal kimliği ön plana

Method: Transgastric combined endoscopic and laparoscopic surgery (CELS) using an intragastric port was performed in one patient and transgastric CELS with gastrotomy was

Oküler cerrahi sonras› endoftalmi insidans›; kata- rakt cerrahisi için %0.1, trabekülektomi için %0.15, kera- toplasti için %0.2, sekonder göz içi lensi yerlefltirilmesi

Whereas Namık Kemal attributed to Ibn Haldun’s compulsory anthropomorphic theory the frozen, interrupted and corrupted practices of progress and fall practices of the state

IEEE 14,30,57, 118 and 300 Bus Test systems are used for speed tests to compare AC load flow computational speed to harmony search based double branch outage simulation.