600 likes | 955 Views
MIT503 Veri Yapıları ve algoritmalar Algoritmalar a giriş. Yrd. Doç. Dr. Yuriy Mishchenko. Algoritmalara giriş. Ders planı Algoritmalar nedir Algoritma “olmayan” algoritmalar Günlük hayatta algoritmalar Sayı ekleme ve çarpma süreçleri Arama
E N D
MIT503 Veri Yapıları ve algoritmalarAlgoritmalaragiriş Yrd. Doç. Dr. Yuriy Mishchenko
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
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
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
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 ...
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!
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
“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!
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ş
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
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
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
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
Algoritma “olmayan” algoritmalar • Örnek: 38399 18389 56788 x1x11
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 ...
“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 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 ------ sonra A’nın 3. basamak elde edin, a olsun B’nın 3. basamak elde edin, b olsun a ve b’nın toplamı ekleme tablosunu kullanarak bulun, C olsun ...
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 varEğer C 9’dan büyük ise H birDeğilse H yok • Bunun gibi “ise” işlemlere koşullu işlem diyoruz
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
“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 H yok olsun C‘nin son basamağı sonucun K. basamağı olarak yazın K’nin sonraki sayı alın, K olsun //yani sonraki basamağa gidin
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
“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 H yok olsun C‘nin son basamağı sonucun K. basamağı olarak yazın K’nin sonraki sayı alın, K olsun //yani sonraki basamak alın
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)
Algoritma “olmayan” algoritmalar • Örnek: 38399 389 345591 307202 115197 14938311
Algoritma “olmayan” algoritmalar • Algoritmasını nasıl yazarız ?
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
“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
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)
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
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
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
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
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
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ı
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ı
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ı
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ı
Bir boyutlu arama • 4. adımda, kalan nesne sayısı 65 • 5. adımda, kalan nesne sayısı 33 • 6. adımda, kalan nesne sayısı 17 İkiye bölme araması... 2 5 7 11 12 13 17 22 23 30 hedef aramasının sırası
Bir boyutlu arama • 7. adımda, kalan nesne sayısı 9 • 8. adımda, kalan nesne sayısı 5 • 9. adımda, kalan nesne sayısı 3 • 10. adımda, kalan nesne sayısı 2 • 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ı
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ı
Bir boyutlu arama • İkiye bölme algoritması, sadece sayısal diziler için değil, çok genel durumda faydalı olabilir İkiye bölme araması:
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ı:
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ı:
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ı:
Bir boyutlu arama • Gördüğümüz gibi, ikiye bölme algoritması önemli genel arama yöntemidir İkiye bölme araması:
Bir boyutlu arama İkiye bölme arama algoritması giriş nesne dizisi, D olsun hedef nesnesi, H olsunD’nin ortasındaki nesnesi, A olsunA 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ı
Ç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
Ç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
Ç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
Ç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
Ç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) “ (anahtar1,anahtar2) 2. kategori anahtar 1. kategori anahtar