Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
YayınlayanGuliz Nazmi Değiştirilmiş 10 yıl önce
1
MIT503 Veri Yapıları ve algoritmalar Algoritmalara giriş
Yrd. Doç. Dr. Yuriy Mishchenko
2
Algoritmalara giriş Ders planı Algoritmalar nedir
Algoritma “olmayan” algoritmalar Günlük hayatta algoritmalar Sayı ekleme ve çarpma süreçleri Arama İkiye bölme arama, sözlükler ve kataloglar KD arama, anahtar kelime arama
3
Algoritmalar nedir Algoritmalar herhangi bir problem için detaylı ve biçimsel çözüm planıdır Herhangi algoritmanın temel adımları Problem yada sorun kesinleştirmek Problemin çözüm fikrini almak Problemin çözüm yöntemi kesinleştirmek Problemin çözüm planı yazdırmak, yani bu noktada algoritma vardır
4
Algoritmalar nedir Genel anlamda algoritmalar bir çok durumda günlük hayatımızda kullanırız, günlük hayattaki eylemlerimizin algoritmalar olmasını bile düşünmeyiz
5
Algoritma “olmayan” algoritmalar
Örneğin, yemek pişirme tariflerinin hepsi algoritmadır Yemek pişirmenin problemi – yemek pişirmektedir Pişirme tarifi, bu problemini çözümdür Yemek tarif websitelerinde tipik olarak bunun gibi tarifler görünülebilir ...
6
Algoritma “olmayan” algoritmalar
“Mercimek çorbası”: 2 su bardağı mercimek, 7 su bardağı su, 2 adet soğan, 1 tablet tavuk suyu kalıbı hazırlayın. İlk önce soğanları ince ince doğrayıp yağda kavurun. Önceden yıkadığımız mercimeği, 1 tablet tavuk suyu kalıbını soğanların bulunduğu tencereye atın. Ardından kaynar su ilave edin. Bu şekilde yaklaşık 10 dakika kaynatın. 10 dakika sonra tenceredeki malzemeleri ince bir süzgeç yardımıyla süzün. Süzdükten sonra tekrar tencereye alarak bir kere daha kaynatın. Son kaynama sırasında ağız tadınıza göre tuz ekleyin. Mercimek çorbası hazır!
7
Algoritma “olmayan” algoritmalar
Bu bir algoritma ama algoritma şeklinde değil çünkü Tarif adım adım ve yapılandırılmış şekilde değil, tüm adımlar hep birlikte ve karışık tek paragraftır Tarif çok detaylı değil, birçok eylem tek cümle içinde karışık şekilde anlatır “Tadınıza göre” gibi ifadeler belirli değil Bunun sorun, daha önce yemek hiç pişirmemiş kişi bu tarifi gereken şekilde uygulayamaz
8
“Mercimek çorba tarifi” algoritma şeklinde 2 su bardağı mercimek alın, M olsun 7 su bardağı su alın, SU olsun 2 adet soğan alın, SO olsun 1 tablet tavuk suyu kalıbı alın, TS olsun Tencere alın, T olsun SO ince ince doğrayıp yağda kavurun, K olsun K, T’ye atın M, yıkayın M ,T’ye atın SU T’ye ekleyin, Ç olsun Ç’yi kaynatın 10 dakika bekleyin Ç’deki malzemeleri süzgeç yardımıyla süzün Ç’yi tekrar kaynatın 1 dakika bekleyin 1 çay bardağı tuz ekleyin Mercimek çorbası hazır!
9
Algoritma “olmayan” algoritmalar
Bu tarifin ana farkları Tarif adım adım şekilnde yazılmıştır Tarif biçimsel yatay sırada yazılmıştır Eylemlerde kullanılacak malzemeler detaylı ve belirli şekilde tanımlanmıştır “Tadınıza göre” gibi belirsiz ifadeler yokmuş
10
Algoritma “olmayan” algoritmalar
Bu örnekte önemli bir kavramı da karşılaştık, yani değişken “tencere, T olsun” gibi ifadeler, uzun ifadeyi daha sonra daha kolayca birkaç defa tekrar kullanmak için faydalıdır Değişken, bu anlamda daha önce belirtilmiş ve daha sonra kullanılacak bir uzun ifadenin temsili Örneğin “mercimek, soğan, ve su içeren tencereyi kaynatın” tekrar tekrar yazmamak için, “T” sembolünü kullanarak, sadece “T’yi kaynatın” yazmamıza gerek var
11
Algoritma “olmayan” algoritmalar
Diğer açıdan değişken, aynı zamanda farklı ifadeler veya değerler içerebilir bir konteyner olarak düşünülebilir “T olsun” derken, “T” adlı konteynere birşeyin atanmasını düşünürüz “T” tekrar kullanacak zamanda, önce atanmış değerin tekrar kullanılması anlamına gelir
12
Algoritma “olmayan” algoritmalar
İşte değişken, yani başka bir uzun ifade/değer/işlemin sonucu/vb içeren ve anlamına gelen bir sembol
13
Algoritma “olmayan” algoritmalar
Ana okulda öğrenilmiş ekleme ve çarpma işlemleri de algoritmalar Yani, ekleme işlemi İki sayı birbirinin altında yazıp basamak basamak eklemeye başlıyoruz Eğer bir adımda sonuç 9 dan büyükse, 1 hatırlıyoruz ve sonraki basamakların toplamına ekliyoruz Tüm basamaklar için bu şekilde ekleme işlemini yapıyoruz
14
Algoritma “olmayan” algoritmalar
Örnek: 38399 18389 56788 x1x11
15
Algoritma “olmayan” algoritmalar
Bunun nasıl yapılacağını hepimiz biliyoruz, algoritma/işlem sırası şeklinde bunu yazmak çok basit soru değildir Deneyelim ...
16
“Sayı ekleme” A, 1. giriş sayı olsun B, 2
“Sayı ekleme” A, 1. giriş sayı olsun B, 2. giriş sayı olsun //basamakları sağdan sayılmayı deyelim A’nın 1. basamak elde edin, a olsun B’nın 1. basamak elde edin, b olsun a ve b’nın toplamı ekleme tablosunu (9x9) kullanarak bulun, C olsun Eğer C 9’dan büyük ise 1 hatırlayalım, H olsun Aksi halde H sıfır olsun C‘nin son basamağı sonucun 1. basamak olarak yazın sonra A’nın 2. basamak elde edin, a olsun B’nın 2. basamak elde edin, b olsun a ve b’nın toplamı ekleme tablosunu kullanarak bulun, C olsun Eğer H 1’e eşit ise C‘nın sonraki sayı elde edin, yine C olsun Aksi Halde C‘nin son basamağı sonucun 2. basamak olarak yazın A’nın 3. basamak elde edin, a olsun B’nın 3. basamak elde edin, b olsun ...
17
Algoritma “olmayan” algoritmalar
Burada iki yeni kavrama karşılaşıyoruz Koşullu işlemler; yani eğer bir koşul doğruysa bir işlem, değilse diğer işlem yapmamıza gerek var Eğer C 9’dan büyük ise H bir Değilse H yok Bunun gibi “ise” işlemlere koşullu işlem diyoruz
18
Algoritma “olmayan” algoritmalar
İkincisi önemli kavram olarak, fark edin ki algoritmamızda baya bir birine benzer işlem var, yani A’nın 2. basamak elde edin, a olsun B’nın 2. basamak elde edin, b olsun a ve b’nın toplamı ekleme tablosunu kullanarak bulun, C olsun Eğer H 1’e eşit ise C‘nın sonraki sayı elde edin, yine C olsun Eğer C 9’dan büyük ise 1 hatırlayalım, H olsun Aksi Halde H sıfır olsun C‘nin son basamağı sonucun 2. basamak olarak yazın Bu durumda “döngü” olduğunu diyoruz, yani birçok defa tekrarlanması gereken bir işlem
19
“Sayı ekleme” algoritması A, 1. giriş sayı olsun B, 2
“Sayı ekleme” algoritması A, 1. giriş sayı olsun B, 2. giriş sayı olsun H yok olsun //basamakları sağdan sayılmayı deyelim A’nın K. basamak yada B’nın K. basamak var IKEN A’nın K. basamak alın, a olsun B’nın K. basamak alın, b olsun a ve b’nın toplamı ekleme tablosunu kullanarak bulun, C olsun Eğer H varsa C‘nın sonraki sayı alın, yine C olsun Eğer C 9’dan büyük ise H var olsun Değilse C‘nin son basamağı sonucun K. basamağı olarak yazın K’nin sonraki sayı alın, K olsun //yani sonraki basamağa gidin
20
Algoritma “olmayan” algoritmalar
İşte koşullu işlemler ve döngüler Koşullu işlem algoritmanın bir koşula bağlı, yani bir koşul doğru İSE, işlemdir Döngü birkaç defa, yani bir koşul doğru İKEN, tekrarlanması gereken işlemdir
21
“Sayı ekleme” algoritması A, 1. giriş sayı olsun B, 2
“Sayı ekleme” algoritması A, 1. giriş sayı olsun B, 2. giriş sayı olsun H yok olsun A’nın K. basamak yada B’nın K. basamak var IKEN A’nın K. basamak elde edin, a olsun B’nın K. basamak elde edin, b olsun a ve b’nın toplamı ekleme tablosunu kullanarak bulun, C olsun Eğer H var ise C‘nın sonraki sayı elde edin, yine C olsun Eğer C 9’dan büyük ise H var olsun Aksi Halde C‘nin son basamağı sonucun K. basamağı olarak yazın K’nin sonraki sayı alın, K olsun //yani sonraki basamak alın
22
Algoritma “olmayan” algoritmalar
Benzer şekilde çarpma işlemini inceleyelim; İki sayı birbirinin altında yazıyoruz Önce, birinci sayı basamak basamak ikinci sayının son basamakla çarpıyoruz; Böyle çarpmaların sonuçları birbirinin altında her zaman soğa 1 basamak kayarak yazıyoruz Sonuçta bütün elde edilen öyle sayıları topluyoruz (toplama işlemi biliyoruz, yani önceki algoritma)
23
Algoritma “olmayan” algoritmalar
Örnek: 38399 389 345591 307202 115197
24
Algoritma “olmayan” algoritmalar
Algoritmasını nasıl yazarız ?
25
Algoritma “olmayan” algoritmalar
Çarpma işlemde iki döngü var, yani Bütün 2. sayının basamakları için, ve ... o 2. sayının basamağı için Bütün 1. sayının basamaklarını çarpmak gerekir Döngüler içinde iki sayıların basamakları çarpılır; Çarpımın son basamağı sonuca gider ve ilk basamağı hatırlanır ve sonraki basamakların çarpımını etkiler
26
“Sayı çarpma” algoritması A, 1. giriş sayı olsun B, 2
“Sayı çarpma” algoritması A, 1. giriş sayı olsun B, 2. giriş sayı olsun B’nın K. basamak var İKEN H, sıfır olsun A’nın M. basamak var İKEN B’nın K. basamak ve A’nın M. Basamak çarpım tablosu kullanarak (9x9, sonuçlar 81’den küçük) çarpın, C olsun C’ye H ekleyin, D olsun D’nin son basamağı eklenecek K. sonucun M. basamağı olarak yazın Eğer D 9 dan küçük ise H sıfır olsın Yoksa H D’nin ilk basamağı olsun Sonraki M basamağı alın Eklenecek K. sonuca sağda (K-1) sıfırı ekleyin //yani K. sonucu sola K-1 basamak kaydırmak lazım Sonraki K basamağı alın Elde edilmiş bütün eklenecek K sonucu birbiriyle ekleyin
27
Algoritma “olmayan” algoritmalar
Günlük hayatımızda düşünmeden birçok algoritma kullanırız, ama Genellikle bu algoritmaları nasıl işletmeyi bilip biçimsel şekilde anlatamayız İşlemi öğrenince tarifleri hatırlayamayız Öyle algoritmaların detaylı talimatlarını yazmak bizim için zordur (örneğin ekleme, çarpma, çıkartma, bölme)
28
Algoritma “olmayan” algoritmalar
Algoritmaların açık, detaylı ve biçimsel temsillerini verebilmemiz gerekir çünkü Yeni durumda aynı algoritmayı uygulamak için algoritmanın iyi tanımı gerekmektedir Algoritma diğerlere anlatmak için bu algoritmanın iyi tanımı gerekmektedir (özellikle bir algoritma bilgisayara anlatmak için) Algoritmanın davranışı ve onun özelliklerini anlamak için algoritmanın gerçek tanımı gerekmektedir Algoritmadan yeni algoritmaları çektirmek için algoritmanın gerçek tanımı gerekmektedir
29
Arama Yukarıdaki basit algoritmalarla biz ilgilemeyeceğiz, yani ekleme çıkartma gibi işlemlerin nasıl yapılmasını bilgisayar/işçinin bilmesini varsayırız Daha önemli algoritmalar, bu temel işlemler üstünde olan ve daha zor problem çözen algoritmalardır
30
Arama Arama, bunun gibi hem matematik hem bilgisayar işlemleri hem de günlük hayat için çok önemli bir konu Örnekler: arkadaşların telefon numarası, katalogda ürünler, ucağın zaman tablosu, vb Arama, algoritma bilimin en önemli konularından biri dir
31
Bir boyutlu arama Genel arama, “n” nesne arasında bir hedef nesneyi olup olmadığı söyleme demektir, hedef varsa onunn pozisyonunu da bulmak gerekir Diyoruz ki, “n” nesne dizisi vardır ve bu dizide bir hedef nesneyi aramamız lazım En basit yaklaşımda, hedefi bulmak için dizideki bütün nesnelerin incelenmesi gerekir, yani ortalama n/2 incelenme işlemi yapılmalı 2 5 7 11 12 13 17 22 23 30
32
Bir boyutlu arama Sıralanmış dizi varsa, arama daha dah çok hızlı gerçekleştirilebilir Sıralanmış dizi demek ki, nesneler veya dizideki sayılar bir şekilde sıralanmıştır, en küçük en büyüğe kadar artmakta 2 5 7 11 12 13 17 22 23 30
33
Bir boyutlu arama İkiye bölme algoritmanın ana fikri, ilk adımda dizinin ortasına bakmaktır Eğer ortasında var olan sayı hedeften büyük ise, dizi sıralanmış olduğu için, hedef dizinin sadece sol yarısında olabilir, aksi halde – sağ yarısında olmalıdır İkiye bölme araması... 2 5 7 11 12 13 17 22 23 30 hedef aramasının sırası
34
Bir boyutlu arama Öyleyse, ikinci adımda arama sol veya sağ yarısında devam eder İlişkili taraftaki orta sayısının hedeften daha büyük veya daha küçük olmasına göre, arama tekrar kalan dizinin parçasının yada sol yada sağ yarısında devam eder İkiye bölme araması... 2 5 7 11 12 13 17 22 23 30 hedef aramasının sırası
35
Bir boyutlu arama İkiye bölme sıralanmış dizide hedefi çok hızlı bulmaya fırsat sağlar çünkü kalan nesnenin sayısı her zaman iki kat azalır Örnek n=1000 sayı, ilk adımda dizinin ortasına bakınca yada alt yada üst yarısında devam ederiz, yani hedef için olabilir nesne sayısı 500 nesnedir İkiye bölme araması... 2 5 7 11 12 13 17 22 23 30 hedef aramasının sırası
36
Bir boyutlu arama İkinci adımda o yarısında çalışırken ortasına bakıyoruz, ve hedefin yeni yada alt yada üst yarısında olmasını öğreniyoruz, yani şimdi kalan nesne sayısı 250 Üçüncü adımda kalan nesne sayısı 125 İkiye bölme araması... 2 5 7 11 12 13 17 22 23 30 hedef aramasının sırası
37
Bir boyutlu arama 4. adımda, kalan nesne sayısı 65
İkiye bölme araması... 2 5 7 11 12 13 17 22 23 30 hedef aramasının sırası
38
Bir boyutlu arama 7. adımda, kalan nesne sayısı 9
11. adımda, kalan nesne sayısı 1, ve hedefi bulmaya garanti var İkiye bölme araması... 2 5 7 11 12 13 17 22 23 30 hedef aramasının sırası
39
Bir boyutlu arama Yani, 1000 nesne arasında biri bulmak için en çok 10 adım gerekliliği garantisi vardır Bütün dizi incelersek, en çok 1000 adım gerekebilirdi Bu yüzden sıralanmış dizinde ikiye bölme kullanarak arama çok hızlı yapılabilir İkiye bölme araması... 2 5 7 11 12 13 17 22 23 30 hedef aramasının sırası
40
Bir boyutlu arama İkiye bölme algoritması, sadece sayısal diziler için değil, çok genel durumda faydalı olabilir İkiye bölme araması:
41
Bir boyutlu arama Sözlükler, sıralanmış bilgi deposudur, yani birçok kelime içeren sıralanmış dizi; sözlükte gereken kelimeyi bulmak için ikiye bölme kullanılabilir İlk önce sözlüğün ortasına bakmamız lazım, oradaki kelimelerin daha “büyük” yada daha “küçük” olmasını öğrenmemiz lazım; ona göre arama yada ilk yada son sözlüğün yarısında devam edilebilir, vb İkiye bölme araması:
42
Bir boyutlu arama Ürün katalogları da düzenli şekilde ürün içerir; kataloglarda gereken ürünü bulmak için, ikiye bölme yöntemi kullanılabilir İlk önce katalogunun ortasına bakmamız lazım, oradaki ürünün daha “büyük” yada daha “küçük” olmasını öğrenmemiz lazım; ona göre arama yada ilk yada son katalogun yarısında devam edilecektir İkiye bölme araması:
43
Bir boyutlu arama Telefon kıtapları da sıralanmış diziler, yani arkadaşınızın numarasını bulmak için en hızlı yöntem şudur: önceden telefon kıtabının ortasına bakmak sonra yada ilk yada son yarısında aramaya devam etmektir İkiye bölme araması:
44
Bir boyutlu arama Gördüğümüz gibi, ikiye bölme algoritması önemli genel arama yöntemidir İkiye bölme araması:
45
Bir boyutlu arama İkiye bölme arama algoritması
giriş nesne dizisi, D olsun hedef nesnesi, H olsun D’nin ortasındaki nesnesi, A olsun A H’ye eşit değil ve D’nin boyut 1’den büyük İKEN EĞER A H’den büyük İSE yeni D D’nin sol yarısı olsun AKSİ HALDE yeni D D’nin sağ yarısı olsun D’nin ortasındaki nesnesi, A olsun Eğer A H’ye eşit değil İSE Hedef bulunamadı
46
Çok boyutlu arama Aramanın ikinci önemli örnek, KD-arama algoritmasıdır KD-arama “K-Dimensional search” (yani K-boyutlu arama) demektir KD-arama, birçok boyutlu verilerde verimli arama için bir yöntemdir
47
Çok boyutlu arama Bir boyutlu arama - sözlük yada kitapta arama olarak düşünülebilir, yani bir kelime/isim kullanarak bir sırada düzenlenmiş kayıtlar arasında bir kayıdı bulmak için
48
Çok boyutlu arama Çok boyutlu arama, birkaç kategoriye göre düzenlenmiş kütüphane katalogu olarak düşünülebilir Yani, tüm belgelere birkaç kategoriden (edebiyet türü, ülke, yazar, vb) anahtar kelimeleri atanmış durumda belirli anahtarlara göre hedef belgenin yerini bulmak lazım
49
Çok boyutlu arama İkiye bölme, “bir boyutlu” arama için efektif yöntemdir KD-arama, “birçok boyutlu” aramada kullanılan ve ikiye bölmeye benzer bir yöntemdir
50
Çok boyutlu arama Eğer 1. kategorinin bütün anahtarları bir eksene 2. kategorinin anahtarları 2. eksene koyarsak, tüm belgeler bu şekilde 2 boyutlu uzayında bir nokta olarak temsil edilecektir, yani “belge (anahtar1,anahtar2) “ 1. kategori anahtar 2. kategori anahtar (anahtar1,anahtar2)
51
Çok boyutlu arama KD-arama; 1. adım: bütün belgeleri 1. anahtara göre iki kümeye bölünce hedef hangi bölümde olması lazım? A B 2. boyut 1. boyut
52
Çok boyutlu arama 2. adım: tüm belgeleri 2. anahtara göre iki kümeye bölünce hedef hangi bölümde olması lazım? C 2. boyut D 1. boyut
53
Çok boyutlu arama I II III IV İkiside birlikte, hangi bölüm yapar?
54
Çok boyutlu arama I II III IV
Yani, farklı eksenleri sırayla ikiye bölüp hedefin hangi bölgede olmasını belirleyip belge sayısını her zaman 2’ye azaltırız I II 2. boyut III IV 1. boyut
55
Çok boyutlu arama I II III IV
2 adımdan sonra, kalan belge sayısı 4 kat düşük, 4 adımdan sonra - 16 kat, 10 adımdan sonra - 1,000 kat düşüktür I II 2. boyut III IV 1. boyut
56
Çok boyutlu arama I II III IV
20 adımdan sonra – kalan belge sayısı 1,000,000 kat düşüktür I II 2. boyut III IV 1. boyut
57
Çok boyutlu arama KD arama
Bir belge kümesi vardır, bütün belgelere K kategoriye göre anahtar kelimeleri atanmıştır, belge: (anahtar1, anahtar2,anahtar3,...) Hedef belgesinin yerini bulmak için, hedef belgesinin anahtarları kullanılır hedef: (anahtar1, anahtar2,anahtar3,...)
58
Çok boyutlu arama Hedefi bulmak için, ilk önce belgeler 1. anahtara göre iki bölgeye bölünür (mesela, bütün var olan 1. anahtarların orta noktasına göre belgeler küçükler ve büyüklere bölünür) Hedef 1. anahtarını kullanarak hedefin hangi bölgede olduğu öğrenilir; dolayısıyla o bölgede var olan belgeler elde tutulur (böyle taranacak belge sayısı 2 kat azaltılır)
59
Çok boyutlu arama Kalan belgeler 2. anahtara göre iki bölgeye bölünür (yani bütün var olan 2. anahtarların orta noktasına göre küçükler ve büyüklere bölünür) Hedef 2. anahtarına göre hedefin hangi bölgede olduğu öğrenilir; dolayısıyla sadece o bölgede olan belgeler elde tutulur (yeni tekrar belge sayısı 2 kat azaltılır) Devam...
60
“KD arama” (K boyutlu arama) giriş belge dizisi, B olsun bütün kategorilerin anahtarlarının değişim aralıkları, A olsun // yani K tane M, 1. kategori olsun B’nin boyut 1’den büyük İKEN hedefin k. anahtarı, H olsun M. A aralığının ortası, O olsun EĞER O H’den büyük İSE yeni B, O’dan küçük M. anahtara sahip olan B’deki tüm belgeler olsun yeni M. A aralığı kendinin alt yarısı olsun AKSI HALDE yeni B, O’dan büyük M. anahtara sahip olan B’deki tüm belgeler olsun yeni M. A aralığı kendinin alt yarısı olsun yeni M sonraki kategori olsun
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.