1 / 71

MIT503 Veri Yapıları ve algoritmalar Algoritmalar nasıl oluşturulur

MIT503 Veri Yapıları ve algoritmalar Algoritmalar nasıl oluşturulur. Y. Doç. Yuriy Mishchenko. Algoritmalar Nasıl Oluşturulur. Ders planı Algoritmalar nasıl oluşturulur Lineer olmayan denklem çözme Hızlı sıralama Çok boyutlu (belgeler) arama. Algoritmalar Nasıl Oluşturulur.

analu
Télécharger la présentation

MIT503 Veri Yapıları ve algoritmalar Algoritmalar nasıl oluşturulur

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MIT503 Veri Yapıları ve algoritmalarAlgoritmalar nasıl oluşturulur Y. Doç. Yuriy Mishchenko

  2. Algoritmalar Nasıl Oluşturulur Ders planı • Algoritmalar nasıl oluşturulur • Lineer olmayan denklem çözme • Hızlı sıralama • Çok boyutlu (belgeler) arama

  3. Algoritmalar Nasıl Oluşturulur Algoritmalar nasıl oluşturulur • Sorun çözme bir fikri almak lazım • Çözme sürecini adım adım şekilde yazmak lazım • Çözme sürecini formal şekilde (sözde kod yada akış şeması olarak) belirtmek lazım

  4. Lineer olmayan denklem çözme • Lineer olmayan denklem: • Burada, f(x) lineer olmayan bir fonksiyon, ve x bir yada çok boyutlu vektör olabilir • Bu soruların birçok uygulaması var

  5. Lineer olmayan denklem çözme • Kolay durumda bile yapılamaz bir sorun: • Bunun gibi sorular çözmek için bir algoritma nasıl oluşturabiliriz?

  6. Lineer olmayan denklem çözme 1. Adım: • Herhangi diğer bir problem gibi, ilk önce çözümün bir fikri bulmamız lazım • Peki, orijinal denklemi yapamayız, ne yapabiliriz ama? • Lineer denklemi nasıl yapabileceğini biliyoruz...

  7. Lineer olmayan denklem çözme • Ana fikri: • Orijinal denklemi yaklaşık olarak lineer denklem ile temsil edeceğiz • Bu yaklaşık denklemi çözeceğiz • Sonucu gerçek çözümüne belki daha yakın olacak • Tekrarlayacağız

  8. Lineer olmayan denklem çözme 2. Adım – talimat listesi: • Orijinal denklemi yaklaşık olarak lineer denklem ile temsil edeceğiz türev

  9. Lineer olmayan denklem çözme 2. Adım – talimat listesi: • Bu yaklaşık denklemi çözeceğiz; yeni “x” doğru çözümüne daha yakın olacağını umuyoruz

  10. Lineer olmayan denklem çözme 2. Adım – talimat listesi: • Tekrar tekrar edeceğiz

  11. Lineer olmayan denklem çözme 2. Adım – talimat listesi : • Orijinal denklemi yaklaşık olarak lineer denklem ile temsil edeceğiz (türev kullanarak) • Yaklaşık lineer denklemi çözüp yeni “x” doğru çözümüne daha yakın olacağını umuyoruz • Tekrarlıyoruz

  12. Lineer olmayan denklem çözme 3. Adım – formal belirtme: • Algoritmada kullanılacak değişkenler: • x, çözüm noktasını temsil eder, bir gerçek sayıdır; • f, çözülecek fonksiyon, bir fonksiyondur; • f‘, çözülecek fonksiyonun türevi, bir fonksiyondur.

  13. Lineer olmayan denklem çözme Algoritmanın söz kodu: f:=çözülecek fonksiyon //girdif’:=f’nin türevi //girdix:=ilk nokta //girdiDÖNGÜ x:=x-(f’(x)^-1)*f(x) DÖNGÜ SONU

  14. Lineer olmayan denklem çözme Algoritmanın söz kodu: f:=çözülecek fonksiyon //girdif’:=f’nin türevi //girdix:=ilk nokta //girdiDÖNGÜ x:=x-(f’(x)^-1)*f(x) DÖNGÜ SONU Burada bir sorun var – döngü ne zaman bitiyor ?

  15. Lineer olmayan denklem çözme Algoritmanın söz kodu f:=çözülecek fonksiyon //girdif’:=f’nin türevi //girdix:=ilk nokta //girdi e:= hedef hassasiyeti //girdi (0.0001 gibi) x0:=-100000 //önceki nokta(|x-x0|/x0>e)’İKEN x0:=x x:=x-(f’(x)^-1)*f(x) DÖNGÜ SONU

  16. Lineer olmayan denklem çözme Algoritmanın söz kodu f:=çözülecek fonksiyon //girdif’:=f’nin türevi //girdix:=ilk nokta //girdi e:= hedef hassasiyeti //girdi (0.0001 gibi) x0:=-100000 //önceki nokta(|x-x0|/x0>e)’İKEN x0:=x x:=x-(f’(x)^-1)*f(x) DÖNGÜ SONU Burada da bir sorun var – eğer bu metod çözüme yaklaşmıyorsa (ve yaklaşmayabilir) döngü durmaz

  17. Lineer olmayan denklem çözme Algoritmanın söz kodu f:=çözülecek fonksiyon //girdif’:=f’nin türevi //girdix:=ilk nokta //girdi e:= hedef hassasiyeti //girdi (0.0001 gibi)m:=max tekrarlama //girdi (max tekrarlama sayısı) n:=0 //tekrarlama sayacı x0:=-100000 //önceki nokta(|x-x0|/x0>e VE n<m)’İKEN x0:=x n:=n+1 x:=x-(f’(x)^-1)*f(x) DÖNGÜ SONU

  18. Newton-Raphsonmetodu Algoritmanın söz kodu f:=çözülecek fonksiyon //girdif’:=f’nin türevi //girdix:=ilk nokta //girdi e:= hedef hassasiyeti //girdi (0.0001 gibi)m:=max tekrarlama //girdi (max tekrarlama sayısı) n:=0 //tekrarlama sayacı x0:=-100000 //önceki nokta(|x-x0|/x0>e VE n<m)’İKEN x0:=x n:=n+1 x:=x-(f’(x)^-1)*f(x) DÖNGÜ SONU <Algoritma OluşturmaBudur

  19. Hızlı Sıralama • Sıralama sorununa önce baktık • Bir sayı dizisini sıralanmış şekline çevirmek lazım • Kıbarcık sıralama metodu vardı • Çok kötü sıralama metodu – O(n2) vakit gerekir Diziyi ilk sayı’dan son sayı’ya inceleyip yanlış sırada çiftleri varsa ... ... sayıların yerleri değiştirin 2 5 7 11 17 13 15 18 23 30

  20. Hızlı Sıralama 1. Adım – Ana Fikri: • Eğer sıralama n2 vakit gerekiyorsa, daha hızlı sıralama için bir fikir olabilir ki... • Orijinal diziyi iki eş parçaya bölüp şunları ayrı ayrı sıralayabiliriz, vakit = 2*(n/2)2=n2/2 • Yani: orijinal diziyi iki eş parçaya bölürek onu daha hızlı sıralayabiliriz • Neden iki parçaya bölmeleyiz ?? bu iki parçayı tekrar bölebiliriz !! Daha hızlı bile sıralayabiliriz !!

  21. Hızlı Sıralama 2. Adım – talimat listesi: • Bu fikrini adım adım şekilde yazdırmamız lazım • Var olan diziyi iki eş parçaya bölelim (örneğin – sol ve sağ yarısı) • İki parçayı ayrı ayrı sıralayalım, aynı algoritmayı kullanarak; yani tekrar iki yeni parçaya bölürek vb • özyineleme var – birinci derste konuştuk biraz – algoritma kendine referans ediyor ! • İki sıralanmış parçayı geri birliğe toplayalım

  22. Hızlı Sıralama 3. Adım – formal belirtme: Algoritma sozde kodu (hızlı arama) D:=girdi dizi //girdisol:=D’nin sol yarısısağ:=D’nin sağ yarısısol:=hızlı_sıralama(sol) //özyineleme sağ:=hızlı_sıralama(sağ) //özyineleme “sağ” ve “sol”u geri birliğe toplayın

  23. Hızlı Sıralama 3. Adım – formal belirtme: Algoritma sozde kodu (hızlı arama) D:=girdi dizi //girdisol:=D’nin sol yarısısağ:=D’nin sağ yarısısol:=hızlı_sıralama(sol) //özyineleme sağ:=hızlı_sıralama(sağ) //özyineleme “sağ” ve “sol”u geri birliğe toplayın ???

  24. Hızlı Sıralama • Yeni sorun (alt sorun): sıralanmış sol ve sağ dizileri birliğe nasıl toplayacağız? • Sağ ve sol dizide bir işaretçi oluşturalım • EĞER sol işaretçi sağ işaretçiden daha küçük, sonuca sol taraftan sayı koyup sol işaretçiyi artıracağız • YOKSA sonuca sağ taraftan sayı koyup sağ işaretçiyi artıracağız

  25. Hızlı Sıralama 2 7 15 18 30 5 11 13 17 23 Daha küçük

  26. Hızlı Sıralama 2 7 15 18 30 5 11 13 17 23 Daha küçük 2

  27. Hızlı Sıralama 2 7 15 18 30 5 11 13 17 23 Daha küçük 2 5

  28. Hızlı Sıralama 2 7 15 18 30 5 11 13 17 23 Daha küçük 2 5 7

  29. Hızlı Sıralama 2 7 15 18 30 5 11 13 17 23 Daha küçük 2 5 7 11

  30. Hızlı Sıralama 2 7 15 18 30 5 11 13 17 23 Daha küçük 2 5 7 11 13

  31. Hızlı Sıralama 2 7 15 18 30 5 11 13 17 23 Daha küçük 2 5 7 11 13 15

  32. Hızlı Sıralama 2 7 15 18 30 5 11 13 17 23 Sıralanmış toplama algoritması bu... 2 5 7 11 13 15 17 18 23 30

  33. Hızlı Sıralama Algoritma sozde kodu (hızlı arama) D:=girdi dizi //girdisol:=D’nin sol yarısısağ:=D’nin sağ yarısı sol:=hızlı_sıralama(sol) //özyineleme sağ:=hızlı_sıralama(sağ) //özyineleme çıktı:=sıralanmış_toplama(sol,sağ)

  34. Hızlı Sıralama Algoritma sozde kodu (sıralanmış toplama) işar_sağ:=1 işar_sol:=1 (solda yada sağda kalan sayılar var) İKEN EGER sol(işar_sol)<sağ(işar_sağ) sonuç:=dizi(sonuç,sol(işar_sol)) işar_sol:=işar_sol+1 AKSİ HALDE sonuç:=dizi(sonuç,sol(işar_sol)) işar_sol:=işar_sol+1DÖNGÜ SONU

  35. Hızlı Sıralama Algoritma Analizi • Kıbarcık sıralama n2 vakit gerektiriyordu • Hızlı algoritma ne kadar zamandır gerekiyor ?

  36. Hızlı Sıralama Algoritma Analizi • Eğer T(n) n boyutta dizi sıralama vakti ise, bu vakit ne içerir ? • İki daha küçük dizi sıralama (2T(n/2) vakti) ve bu dizileri geri toplama (n vakit) • Sonuçta bu formül çıkıyor

  37. Hızlı Sıralama Algoritma Analizi • T(n)=n olamaz (çünkü bu durumda T(n)=2T(n/2)) • Aynı zamanda T(n)=n2 de olamaz (çünkü bu durumda n2>2(n/2)2+n)

  38. Hızlı Sıralama Algoritma Analizi • Birkaç opsiyon deneyince, T(n)=n log2 n olduğunu görebilirsiniz

  39. Hızlı Sıralama Algoritma Analizi • Hızlı sıralama sadece O(n log n) vakit gerekiyor • Algoritma analizi budur

  40. Hızlı Sıralama Algoritma Analizi • Başka bir hızlı sıralama yaklaşımı: çıktı birbiri ardına hemen sıralanmış şekilde oluşturmak • Sıralanmış diziye yeni sayı ikiye bölme kullanarak verimli şekilde ekleyebiliriz (log n vakit gerekiyor) İkiye bölme araması... 2 5 7 11 12 13 17 22 23 30 hedef

  41. Hızlı Sıralama Algoritma Analizi Sözde Kod (başka hızlı sıralama algoritması) girdi:=girdi dizi //girdi çıktı:=boş dizi //oluşturulacak çıktı BÜTÜN girdi’DEKİ sayı’lar İÇİN sayı ikiye bölme kullanarak çıktıye sıralanmış şeklinde ekle DÖNGÜ SONU

  42. Hızlı Sıralama Algoritma Analizi Sözde Kod (başka hızlı sıralama algoritması) • Bu algoritma da n log2 n vakit gerekiyor • Bir ikiye bölme ekleme operasyonu, en çok log2 n vakit gerekiyor • n ekleme opearsyon var, toplam O(n log n) vakit gerekiyor • Aslında, sıralama en az n log n vakit gereksinimi gösterilebilir – daha hızlı algoritmalar yok

  43. Çok boyutlu arama • Bir boyutlu diziler için ikiye bölme arama algoritması gördük • Gerçekten çok faydalı yaklaşımdır – n sayılar içeren dizide hedefi bulma sadece log2 n adım gerekiyor • 1,000,000 var olan sayı – arama 20 adımla yapılabilir

  44. Çok boyutlu arama • Dizi birçok bouytlu ise – 2D, 10D, 1000D ? • Bu sorunun ana örğeği internet aramadır: • Bütün internet belgeleri anahtar kelime kümelerle temsil edilebilir • Belgenin birçok anahtar kelim olabilmesi için, bu bütün belgeler birçok boyutlu “anahtar kelime” vektörleriyle (üzlerce boyut) bilgisayar veri tabanında saklanabilir • Kullanıcı arama satırı alınca, miliyonlarca olabilir belgelerin arasında uygun bir hedefi hızlı bulmak lazım

  45. Çok boyutlu arama Ana fikri: • Verimli çok boyutlu arama (KD-araması) • İlk önce bütün belgeler için anahtar kelimlerini birçok hücreye koyuyoruz • Örneğin: • Bütün belgeleri birinci anahtar kelimesine göre iki bölgeye (“büyük”/”küçük” anahtar kelimesi) bölüyoruz • Bütün belgeleri ikinci anahtar kelimesine göre iki bölgeye (“büyük”/”küçük” anahtar kelimesi) bölüyoruz • Devam ...

  46. Çok boyutlu arama K=2 durumu (KD’de K boyut sayısı demektir) Belgeleri ve iki anahtar kelimesi 2. boyut 1. boyut

  47. Çok boyutlu arama K=2 durumu 1. anahtar kelimesine göre bölme 2. boyut 1. boyut

  48. Çok boyutlu arama K=2 durumu 2. anahtar kelimesine göre bölme 2. boyut 1. boyut

  49. Çok boyutlu arama K=2 durumu 4 tane hücre oldu I II 2. boyut III IV 1. boyut

  50. Çok boyutlu arama K=2 durumu Bütün hücrelerde 4 kat daha az belge oldu I II 2. boyut III IV 1. boyut

More Related