IT503 Veri Yapıları ve algoritmalar

Slides:



Advertisements
Benzer bir sunumlar
Yığınlama Sıralaması (Heap Sort)
Advertisements

FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Karmaşıklık Giriş.
MIT503 Veri Yapıları ve algoritmalar
Algoritmalar Ders 8 Dinamik Programlama.
MIT503 Veri Yapıları ve algoritmalar Algoritma Oluşturma – Açgözlü algoritmalar ve buluşsallar Y. Doç. Yuriy Mishchenko.
MIT563 Yapay Zeka ve Makine Öğrenmesi
MIT563 Yapay Zeka ve Makine Öğrenmesi
MIT504 İnternet ve Web Programlama: Javascript programlama devam Yrd. Doç. Dr. Yuriy Mishchenko.
MIT505 İnternet ve Web Programlama: Web Şablonları ve Web düzenleme
Algoritma ve Akış Diyagramları
MIT563 Yapay Zeka ve Makine Öğrenmesi
Algoritmalar DERS 2 Asimptotik Notasyon O-, Ω-, ve Θ-notasyonları
BİLGİSAYAR MÜHENDİSLİĞİNE GİRİŞ
MIT503 Veri Yapıları ve algoritmalar Algoritmalara giriş
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
MIT503 Veri Yapıları ve algoritmalar En önemli graf problemleri
MIT503 Veri Yapıları ve algoritmalar Algoritmalara giriş
BPR151 ALGORİTMA VE PROGRAMLAMA - I
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Recursion (Özyineleme)
Algoritmalar DERS 3 Böl ve Fethet(Divide and Conquer) İkili arama
Algoritma ve Akış Diyagramları
ALGORİTMA ve PROGRAMLAMA
Algoritmalar DERS 4 Çabuk sıralama Böl ve fethet Bölüntüler
MIT503 Veri Yapıları ve algoritmalar Sıralama algoritmaları
ALIŞTIRMALAR - 1 Sunu 1 ve Sunu 2 İçeriği
Nesneye Dayalı Programlama
ÇİZGELERİN GÖSTERİMİ Yılmaz KILIÇASLAN. Sunu Planı Bu derste, çizgelerin bilgisayarda gösterimine ilişkin iki standart yaklaşımı inceleyeceğiz.
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 5: Fonksiyonlar
MIT503 Veri Yapıları ve algoritmalar Veri ağaçları
Veri Yapıları ve Algoritmalar
Problem Çözme Süreci.
Temel tanımlar ve işleyiş
ÇİZGELERİN GÖSTERİMİ Yılmaz KILIÇASLAN.
Recursion (Özyineleme)
ÖĞRETİMİ TASARLAMA: SIRALAMA
YMT219: Veri Yapıları Ders Saatleri: Pazartesi 9:15-12, 17:30-20:15
FIZ 172 BİLGİSAYARA GİRİŞ II
Problem Yaklaşım Temelleri, Algoritma ve Akış Şeması
Veri Yapıları ve Algoritmaları ders_1
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
SONLU ELEMANLARA GİRİŞ DERSİ
ENF 204 Bilgisayar Programlama Algoritma ve Akış Diyagramları
Problem Yaklaşım Temelleri, Algoritma ve Akış Şeması
Karar Bilimi 1. Bölüm.
BİL 102 BİLGİSAYAR PROGRAMLAMA DERS 1. PROGRAM GELİŞTİRME AŞAMALARI 1- Probleme ilişkin veriler nelerdir? 2- Çözüm yöntemi nasıl olacaktır? 3- Çözüm sonucunda.
Matemati ğ i Niçin Ö ğ reniyoruz? Enes demir 9-E 170.
PROGRAMLAMA Doç.Dr. Murat ÇAKIROĞLU 2015 – 2016 Güz Dönemi Kredi : 3+1
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Programlama Araçları ve Programlama Yapısı
KISIM II Matematiksel Kavram ve Prosedürlerin Gelişimi
BİL3112 Makine Öğrenimi (Machine Learning)
PROGRAMLAMA MANTIĞI, ALGORİTMA PROBLEM ÇÖZME
Algoritma Analizi Algoritma Algoritma bir problemi çözmek için izlenen komutlar kümesidir. Verilen bir problemin birden fazla çözümü dolayısıyla.
Dinamik programlama ve Açgözlü algoritma
ALGORİTMA VE PROGRAMLAMA 
Algoritma ve Akış Şemaları
Algoritmalar II Ders 6 Açgözlü Algoritmalar.
Algoritmalar II Ders 2 Dinamik Programlama Yöntemi.
Algoritmalar II Ders 5 Açgözlü Algoritmalar.
YAPAY ZEKA DERS NOTLARI UYGULAMALARI Bölüm 1 : Yapay Zeka
Erken çocukluk dönemi fen ve matematik eğitimi için ortam hazırlama
Algoritmalar II Ders 8 Açgözlü Algoritmalar.
Algoritmalar II Ders 7 Açgözlü Algoritmalar.
Optimizasyon Teknikleri
Algoritma Nedir? Algoritmayı, herhangi bir problemin çözümü için izlenecek yolun adımlar halinde yazılması olarak tanımlayabiliriz. Algoritma, bir problemin.
Algoritmalar II Ders 9 Dinamik Programlama ve Açgözlü Yaklaşım Soruları.
Algoritmalar II Ders 2 Dinamik Programlama Yöntemi.
Sunum transkripti:

IT503 Veri Yapıları ve algoritmalar Yrd. Doç. Dr. Yuriy Mishchenko

Tanıştırma ve Temel Kavramlar Ders planı Algoritmalara giriş, algoritmalar nedir? Algortima temsil yöntemleri Algoritma türleri Algoritma analizi

Algoritmalar nedir? Algoritmalar Algoritmalar, bilgisayar yazılım açısından çoğunlukla biliriz Algoritmaların çoğunun matematiksel ve bilgisayar program olmasına rağmen, algoritmalar daha çok geniş kavramdır

Algoritmalar nedir? Algoritmalar Matematiksel ve bilgisayar programları için algoritmalar, bilgisayar biliminin (yani computer science) konusudur Bilgisayar bilimi, matematiğin bir bölümüdür Buradaki anlamda algoritmalar, bir matematiksel problemin çözüm talimatı yada planıdır

Algoritmalar nedir? En basit matematiksel algoritma – ana okulda verilen sayı ekleme süreci: 127 326 453 + 1

Algoritmalar nedir? Matematiksel algoritmalar, Matematiksel bir soru var, Sorunun çözüm/amacına nasıl ulaşabileceğini açıklayan detaylı bir plan, bu problemin algoritmasıdır

Algoritmalar nedir? Daha genel anlamda algoritmalar, her hangi bir sorunun detaylı çözüm planı olarak düşünülebilir Sadece matematikte yada bilgisayar programlamada değil, günlük hayatta hepimiz bol bol algoritma kullanırız

Algoritmalar nedir? Çorba pisirme tarifi, aslında bir algoritmadır Sebzeleri hazırlamak Suyu kaynatmak Tavuğu ekleyip pişirmek Sebze kestirip kızartmak Herşeyi tencereye koymak Birkaç (birçok) dakika kaynatmak Ateşi kapatmak ve sakinleşmesini beklemek

Algoritmalar nedir? Okula ders için gelmek, bu da algoritmadır Evden çıkmak Evin kapısını kilitlelemek Dolmuşa binmek Dolmuşta para vermek Toros durağını beklemek Durağınızda durağını söyleyip inmek Dersliğe kadar yürümek

Algoritma temsilleri Algoritma belirtmek için, çözüm planı/tarifi belirli, biçimsel ve biri tarafından kolayca anlanabilir şekilde tanımlanması gerekmektedir Önceki örnekler gibi, bir talimat liste şeklinde sırayla tanımlanan algoritmalara sözde kod denir

Algoritma temsilleri Sözde kod, algoritmanın talimatları adım adım ve biçimsel şekilde belirtmek için normal dil ifadeleri kullanır Sözde kod, normal bilgisayar programlara kollayca dönüştürülebilmesi için, algoritmaların temel tanımları vermek için genellikle kullanılır

Algoritma temsilleri Algoritmaların temsili için ikinci popüler yöntem akış şemalarıdır

Sebzeleri hazırlamak Suyu kaynatmak Tavuğu ekleyip pişirmek Sebze kestirip kızartmak Herşeyi tencereye koymak Birkaç (birçok) dakika kaynatmak Ateşi kapatmak ve sakinleşmesini beklemek

Algoritma temsilleri Bu şekilde temsil edilen algoritmalara akış şeması denir Akış şeması, algoritmanın talimat sırasını veya algoritmanın işlem akışını belirtir

Algoritma temsilleri Algoritma, normalde belirli bir soru için geliştirilir ve farklı sorular için farklı algoritmalara gerek vardır; bu anlamda genel bir algoritma olamaz Ancak genel algoritma geliştirme stratejileri veya birçok benzer soruyu çözen algortimalar olabilir Özyineleme (recursion) Böl ve fethet (divide and conquire) Açgözlü/yerel (greedy or local) Dynamik programlama (dynamic programming)

Algoritma türleri Özyineleme (recursion) Çözüm adımları aynı işlemin tekrarlanması şeklindedir Sonuç aynı işlem yinelenen uygulamasıyla elde edilir Factöriyel özyinelemenin klasik örnektir: Faktöriyel – “n!=1*2*3*…*n” Özyineleme adımı: n!=n*(n-1)! Özyineleme uygulaması: F(sayı)=sayı*F(sayı-1) Bunun uygulanması faktöriyeldir, yani F(n)=n*F(n-1)=n*(n-1)*F(n-2) ...=n*(n-1)*(n-2)*...*1

Algoritmaların temel türleri Böl ve fethet (divide and conquire) Problem birkaç daha küçük probleme bölünebilir Daha küçük problemlerin çözümü daha çok kolaydır Orijinal problem, altproblemlerin çözümlerini kullanarak daha hızlı çözülebilir Sıralama böl-ve-fethet yaklaşımın klasik örneğidir Bir n-elemanlı dizi sıralanması n2 karşılaştırma işlemi gerekir Diziyi iki n/2-elemanlı parçaya bölüp parçaları ayrı ayrı sıralayıp böylece 2*(n/2)2 = n2/2 karşılaştırma işlem olacak Parçaları geri birleştirip orijinal dizi n2/2+n işlemle sıralanacaktır

Algoritmaların temel türleri Açgözlü/yerel (greedy/local) Genellikle optimizasyon problemlerinde kullanılan yaklaşım, yani bir soru için en uygun (optimal olan) cevabı bulmak gerekmektedir Böyle cevabı adım adım ararken, tüm adımlarda o adımda en iyi olarak görünen seçimi yapmak gerekmektedir Açgözlü/yerel yol seçme örneği: Evden çıktığımızda okula en yakın yere giden dolmuşu bineriz Durakta inince, tekrar okula en yakın yere giden dolmuşu bineriz ... VB Bu yol seçme sorunun açgözlü çözümüdür

Algoritmaların temel türleri Dinamik programlama (dynamic programming) Bir tür optimizasyon problemlerinde kullanılan yaklaşım Bütün olabilir cevapların uygunluğu bir özyineleme kullanarak hesaplanabilirse, dinamik programlama uygulanabilir Dinamik programlama ile yol seçme örneği Fikir: Bütün duraklar için o duraktan okula ulaşmak için optimal gereken zamanı t(DURAK) olsun; t-hesaplanması: Okulda olan A durağında t(A)=0 A durağına bağlı duraklar için, t(B)=min(t(A)+t(A←B)) Bu adım bütün duraklar için uygulayınca, bütün duraklar için t(B) elde edilebilir A’dan başlayınca, bütün bağlı duraklar adım adım inceleyip ona optimal ulaşma zamanı seçin, bu duraklar için özyineleme şekilde ona bağlı duraklar için t(B) hesaplayın, vb

Algoritmaların temel türleri Okul Ev 5 dk 10 dk 15 dk 10 dk

Algoritmaların temel türleri 15=min(5+10,10+10) 5=0+5 30 20 25 15 5 10 Okul Ev 5 dk 10 dk 15 dk 10 dk

Algoritmaların temel türleri Bu şekilde bulunmuş en hızlı yolun tam zamanı 5+10+10+5=30 dk 30 20 25 15 5 10 Okul Ev 10 dk 5 dk 15 dk 5 dk 10 dk

Algoritmaların temel türleri Fark edin ki açgözlü yolun zamanı 15+5+5+10=35 dk 30 20 25 15 5 10 Okul Ev 10 dk 5 dk 15 dk 5 dk 10 dk

Algoritmaların temel türleri Dinamik programlama yol seçme algoritması sadece “yol seçme” için değil birçok durumda faydalı olabilir; Üretim süreç planlanması Belge işletme planlanması Benzer grafik şeklinde temsil edilebilir herhangi bir problem çözülebilir

Algoritma analiz temelleri Herhangi algoritma biri tarafından uygulanması düşünülmektedir (örneğin, bir kişi, bilgisayar, vb) Bu açıdan, herhangi algoritmanın çok önemli olan bir noktası algoritmanın işlemlerini gerçekleştirmek için gereken zaman ve herhangi diğer önemli maliyetidir

Algoritma analiz temelleri Algoritmanın işletme zamanı kesin durumuna bağlıdır (örneğin, durakların sayısı, dizinin boyutu, ...) Bunun gibi kesin “durumlara” algoritmanın girişi denir Böylece, algoritmaların işletme zamanı ve diğer maliyetlerinin girişine bağlı dır

Algoritma analiz temelleri Algorıtma analizinin amacı, belirli bir giriş için algoritmanın zaman ve bellek gereksinimleri belirtmektedir Algoritmaların zaman ve bellek gereksinimleri giriş boyutuyla genellikle artır Giriş boyutuna genellikle “n” denir Böylece “n”, girişin boyutunu herhangi şekilde belirten bir niceliktir – sıralanacak sayıların sayısı, yol için olabilir durak sayısı, vb

Algoritma analiz temelleri Böyle algoritmanın zamanı göstermek için genellikle O notasyonu kullanılır; O(n), algoritmanın zamanı lineerdir, yani büyük n’ler için yaklaşık olarak const*n gibi artır O(n2), algoritmanın zamanı kareseldir, yani büyük n’ler için yaklaşık olarak const*n2 gibi artır VB Örneğin, sıralamanın basit algoritmalarının zamanı O(n2) ve en iyi algoritmanın zamanı O(n log n) olarak bilinir

Algoritma analiz temelleri Problem: veritabanında verileri sıralamak gerekir; Veritabanında kayıt sayısı “n”=1,000,000=106 O(n2) sıralama algoritmasının işletme zamanı n2=1012 O(n log n) algoritmasının işletme zamanı n log n=6*106 Eğer bilgisayar sanyede 10,000 işlem yaparsa, O(n2) sıralama 108 saniye ve O(n log n) sıralama sadece 600 saniye gerekecektir! Veritabanlarında sıralama herhangi bilgisayar uygulamalarında her gün defalarca yapılır, o yüzden algoritmanın işletme zamanı büyük fark yaratır