Temel Algoritma Kavramları -...

17
Mustafa Kemal Üniversitesi Algoritma Geliştirme ve Veri Yapıları – 1 Temel Algoritma Kavramları

Transcript of Temel Algoritma Kavramları -...

Page 1: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Algoritma Geliştirme ve Veri Yapıları – 1

Temel Algoritma Kavramları

Page 2: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Giriş

1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri yapıları 4) Algoritma veya yazılım şekilsel gösterimi 5) Rekürsif algoritmalar 6) Arama ve sıralama algoritmaları 7) Liste ve bağlantılı liste 8) Kuyruk ve yığın yapısı 9) Ağaç veri modeli ve uygulanması 10) Graf veri modeli 11) Durum makinası ve davranış modelleri 12) Dizinli Dosyalama Yapısı

Kaynaklar: • Algoritma Geliştirme ve Veri Yapıları - Rifat Çölkesen – Papatya Yayıncılık (Temel kitap) • Veri Yapıları ve Algoritma Temelleri – Sefer Kurnaz – Papatya Yayıncılık

Page 3: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

• Program, belirli tasarlanmış/geliştirilmiş kodlardan oluşan bir yazılım parçasıdır.

• Veri, program kodlarının yürütülmesi sırasında üzerinde işlem yapılacak parametrelerdir.

• Verilerin bellek üzerinde saklanma şekline veri yapısı, ilişkisel düzeni ise veri modeli olarak isimlendirilir.

• Veri yapısı – modelini kullanarak belli bir işi yapan programın algoritmik şekline ise algoritma adı verilir.

Page 4: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

1) Veri Yapısı ve Veri Modeli • Veri yapısı, verinin veya bilginin bellekte tutulma şeklini

gösterir.

• Tüm programlama dillerinin çeşitli temel veri yapıları bulunmaktadır(tamsayı, karakter, sözcük vb. ). Program yazarı bu yapıların bellek organizasyonu ile ilgili konulara hakim olmak zorunda değildir.

• Programcı, temel veri yapıları dışında başka tip yapılara

ihtiyaç duyuyorsa programlama dilinin esnekliğine uygun olarak istediği türde yapılar oluşturabilir.

Page 5: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

1) Veri Yapısı ve Veri Modeli

• Veri modeli, verilerin birbirleriyle ilişkisel veya sırasal durumunu gösterir; problemin çözümü için kavramsal bir yaklaşım yöntemidir.

• Tüm matematik ve mühendislik problemleri uygun veri modelleri ile çözülebilmektedir.

Page 6: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

1) Veri Yapısı ve Veri Modeli

• Uygun veri modeli kullanılarak yazılım performansı arttırılabilir, karmaşık problemler minimum sistem kullanımı (ram, cpu gibi) ile çözülebilir.

• Bazı veri modelleri; liste, ağaç, graf, sonlu durum makinası, vb.

Page 7: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

2) Algoritmik ve Heuristik Yaklaşımlar • Bir problem iki farklı yaklaşımla çözülebilmektedir;

Algoritmik ve Heuristik. • Algoritmik yaklaşım, çözüm için daha önce doğruluğu

ispatlanmış olan olası yöntemlerden en uygun olanı seçilir ve uygulanır; her şey apaçık ortadadır.

• Heuristik (sezgisel) yaklaşımda ise, çözüm sonuna kadar açıkça ortada değildir; ya problem henüz algoritmik olarak çözülmemiştir ya da tasarımcı deneyimi, birikimi ve o andaki düşüncesi problemi algoritmik olarak çözmek için yeterli değildir. Bu yüzden problem sezgisel olarak çözülür.

Page 8: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

3) Kaba Kod ve Gerçek Kod

• Kaba kod; bir algoritmanın yarı programlama dili deyimleri, yarı konuşma dili ifadelerine dayalı olarak tanımlanmasıdır. Daha çok pogramlama dilinin karşılaştırma ve döngü deyimleri için kullanılır.

• Kaba kod, bir algoritmanın kabaca çözümüdür.

Page 9: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

3) Kaba Kod ve Gerçek Kod

• Gerçek kod, algoritmanın herhangi bir programlama diliyle, belirli bir veri yapısı üzerinde gerçekleştirilmiş halidir.

• Veri yapısı üzerinde yapılan değişikliklerde algoritmanın gerçek kodu üzerinde oynamalar yapılmalıdır.

Page 10: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

3) Kaba Kod ve Gerçek Kod En küçük elemanı bulma kaba-kodu en küçük= Dizinin ilk elemanı

for (ikinci elemandan dizi sonuna kadar) if ( Sıradaki eleman< en küçük) en küçük = Sıradaki eleman.

En küçük elemanı yazdır veya gönder.

Gerçek Kod(C programlama diliyle) bulEnKucuk(int A[], int N) int enKucuk; enKucuk=A[0]; for(k=0; k<N; k++) if(A[k]<enKucuk) enKucuk=A[k]; return enKucuk;

Page 11: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

4) Algoritma Karmaşıklığı • Programın çalışma hızı, belirlenen bir problemin

çözümü için tasarlanan program kodunun görevini yerine getirmesi için gerekli zaman bilgisini veren bir ifadedir(sayı ya da matematiksel ifade).

• Bellek gereksinimi, programın yürütülmesi sırasında program kodu ve kodun yürütülmesi esnasında kullanılan verilerin gereksinim duyduğu toplam bellek alanıdır.

• Algoritma karmaşıklığı, bir algoritmanın çok sayıda parametre karşısında maliyet davranışındaki değişikliği gösteren kavramsal bir ifadedir.

Page 12: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

4) Algoritma Karmaşıklığı

• Karmaşıklığı ifade edebilmek için asimtotik ifadeler kullanılır(O(g(n)), Θ(g(n)), Ω(g(n)), o(g(n)), vb.).

• Algoritma karmaşıklığı zaman ve alan(veya bellek) karmaşıklığı olarak ikiye ayrılır.

• Zaman karmaşıklığı, algoritmanın sonuca ulaşması için gerekli zaman hakkında bilgi verir.

• Alan karmaşıklığı, algoritmanın ihtiyaç duyacağı bellek miktarı hakkında bilgi verir.

Page 13: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

4-1. Büyük O Notasyonu • Algoritma karmaşıklığı iki şekilde ifade edilebilir

o Doğrudan parametrelere bağlı matematiksel ifade

o Parametrelerin karmaşıklık üzerine etkisinin mertebe ile gösterilmesi

• Doğrudan parametre ile ifade yönteminde parametrelerin gerçek değerleri yerine koyularak hesap yapılır ve tam olarak çalışma hızı bulunabilir.

• Mertebe şeklindeki ifade yönteminde ise gerçek hız hesaplanmaz, bunun yerine parametrelerdeki değer artışının karmaşıklığı hangi mertebelerde değiştirdiği gözlenir(O,Ω).

Page 14: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

Page 15: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

4-2. Kıyaslama (Benchmarking) • Kıyaslama, aynı işi yapan iki programın veya yazılımın

evrensel anlamda örnek veriler üzerinde çalıştırılarak başarımlarını karşılaştırmaktır.

• Kıyaslamada en önemli unsur, örnek verinin herkes tarafından bilinen ve kolayca elde edilen evrensel düzeyde olmasıdır.

• Kıyaslama verisi seçilirken olası tüm durumları yeteri kadar denetleyecek nitelikte olmalıdır. Örneğin cpu veya gpu performans testi için kullanılacak kıyaslama verileri.

Page 16: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

4-3. Programın Bellek Gereksinimi • Bir program iki açıdan belleğe ihtiyaç duyar; kodun

tutulması ve kodun çalıştırılması.

• Bir program kodunun uzun olması onun çok yüksek seviyede bir bellek ihtiyacı duyacağı anlamına gelmez.

• Daha çok programın bellek ihtiyacı duyduğu yapılar dizi, matris vb. yapılardır. Programın tasarımı için doğru olmayan bir veri modeli de fazla bellek alanı gerektirebilir.

Page 17: Temel Algoritma Kavramları - myo.bartin.edu.trmyo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari1.pdf · 1) Algoritma geliştirme üzerine temel kavramlar 2) Veri modelleri 3) Veri

Mustafa Kemal Üniversitesi

Temel Algoritma Kavramları

5) Algoritma

• Algoritma; belirli bir işi veya görevi, var olan ya da sonradan tanımlanan veri modeline dayandırılarak adım adım ortaya koymak ve bunu bilgisayar ortamında herhangi bir programlama dili ile kodlamaktır.

• Kullanılan algoritmalardan bazıları,

o Arama algoritması

o Sıralama algoritması

o Matris veya vektörel işlem algoritması

o Graf algoritmaları vb.