Upload
frhtngn
View
366
Download
22
Embed Size (px)
Citation preview
VERİ YAPILARI ve ALGORİTMA
ALGORİTMA
VERİ YAPISI
İnsanlar düşünme ve problem çözme yeteneğini algoritmalarla makinelere aktarırlar.
Veri Yapıları ve AlgoritmaVeri Yapıları ve Algoritma
Bir işi gerçekleştirmek için gerekli olan işlem bilgileri ve çözüm yöntemleri algoritmalara adım adım nakşedilir.
Bir makinenin yeteneğini belirleyen en önemli unsur bu yönden bakıldığında algoritmalardır.
Eğer bir problemin algoritmasını oluşturabiliyorsak o problem makinelerle çözülebilir ve bunun terside doğrudur. Yani bir problem için algoritma kurulamıyorsa gücü ne olursa olsun bu problem makine (bilgisayar) ile çözülemez.
Sanal makineden soyutlanma (Abstraction of virtual machine)
int sum(int[] x) {int sum(int[] x) { int sum = 0;int sum = 0; n = 0;n = 0; while (n < x.length) {while (n < x.length) { sum += x[n];sum += x[n]; }} return sum;return sum;}}
0010101010101000101010101010101010111110101010101111101011101010101110111010101011100010101010101000101010101010
......
Algoritma Nedir?
Algoritma bir problemi çözüme ulaştırmak için uygulanan kurallar dizisidir.
Herhangi bir giriş verisine karşılık, çıkış verisi elde edilmesi gereklidir. Bunun dışındaki durumlar algoritma değildir.
Algoritmanın önemli özellikleri
Yazılan komutun tek bir anlama gelmesi ve herkes tarafından anlaşılır olması gereklidir.
Yazılan komutların uygulanabilir olması gereklidir.
Her algoritmanın sonlanması, çalıştırılan komut sayısının sonsuz olmaması gereklidir.
Algoritma Süreci Tasarım (design) Doğruluğunu ispat etme (validation) Analiz (analysis) Uygulama (implementation) Test
Algoritma Analizi Neden algoritmayı analiz ederiz?
Algoritmanın performansını ölçmek için Farklı algoritmalarla karşılaştırmak için Daha iyisi mümkün mü? Olabileceklerin en iyisi
mi? Özelliklerinin analizi
Algoritmanın çalışma zamanı Hafızada kapladığı alan
Çalışma Zamanı Analizi
N giriş verisi
Algoritma 1
Çalışma zamanı T1(n)
N giriş verisi
Algoritma 2
Çalışma zamanıT2(n)10001010101000111110001100011101010101010101010010001010101000100000000000011110101000111010
Algoritma 1 T1(N)=1000N
Algoritma 2 T2(N)=N2
Çalışma Zamanı Analizi
Giriş verisi N
Çal
ışm
a za
man
ı T(N
)
Algoritma 2
Algoritma 1
1000
N T1 T2
10 10-2 sec 10-4 sec
100 10-1 sec 10-2 sec
1000 1 sec 1 sec
10000 10 sec 100 sec
100000 100 sec 10000 sec
N değerinin 1000’den küçük olduğu durumlarda iki algoritma arasındaki çalışma zamanı ihmal edilebilir büyüklüktedir.
Sıralama Algoritmaları
Arama Algoritmaları
Niçin Veri Yapısı Kullanılır?
İşlemci-Bellek
İnsanların zekalarını etkin bir biçimde kullanabilmeleri hafızalarınında güçlü olması gerekir. Hafızasını etkin kullanamayan yada hafızası zayıf olan insanlar bu yüksek zekalarından yeterince faydalanamayabilirler.
Aynen bunun gibi bilgisayarın problemin çözümünde göstereceği performans bellek ile çok yakından ilgilidir. Bilgisayarın gücü ne kadar yüksek olursa olsun bellek kapasitesi düşük ise bilgisayar bu gücünü etkin olarak gösteremeyecektir. Belleğin kapasitesine göre çalışacaktır. Bu bakımdan bilgisayar belleğinin en iyi biçimde kullanılması ve gereksiz bellek harcaması yapılmaması çok önemlidir.
Bilgisayar biliminde belleğin en iyi kullanımı ve organizasyonu için veri yapıları tasarlanmaktadır. Bu veri yapıları sayesinde bilgilerin bellekteki organizasyonu ve bilgilere erişim için mekanizmalar geliştirilmektedir.
Niçin Veri Yapısı Kullanılır?
Yazılım-Donanım
PROBLEM
Anabellek sıra sıra dizilmiş hücreler biçiminde düzenlenmiştir.
Herbir hücre belli hacimde bilgiyi saklar ve Gerektikçe buradaki bilgilere ulaşılmak için
kullanılır. Karmaşık bir problemin çözümü için gerekli
verileri bellek hücrelerine yüklerken donanımdaki sıraya bağımlı kalınmaktadır
Bu tasarım aşamasını zorlaştırmaktadır.
PROBLEM (devam)
Kullanıcı donanımla alakalı birçok detayı bilmek zorundadır.
Kullanıcı bu detay içerisinde boğulacak Sonuca yakınsamak karmaşık bir hal
alacaktır
ÇÖZÜM
Problemin yapısına uygun soyut veri yapılarını düzenlemek ve
Bu soyut yapıları bilgisayar donanımında somut olarak gerçekleştirmenin yollarını araştırmak
Gri tonlardan oluşan bir görüntüyü bilgisayar ortamında işlemek ve saklamak için herbir gri tonu tamsayılarla gösterdikten sonra, iki boyutlu bir matris oluştururuz. Bu matristeki herbir eleman görüntüdeki bir noktaya ait rengin sayısal değerini gösterir.
Bu iki boyutlu veriyi bilgisayar belleğine kaydetmek ve işlemek için veri yapısı oluşturmak gerekir.
Örnek(devam)
Bu veri yapıları programlamayı verimli ve kolay hale getirir ve
Bilgisayar belleğini amaca uygun kullanmayı sağlar
Önemli olan bilgisayarın iç işleyişinden çok, problemin nasıl çözüleceğidir.
HEDEF
Program tasarlanırken makinenin iç organizasyonuna göre değil, probleme cevap veren soyut yapıya göre düşünülmelidir ve
Bu soyut yapı bilgisayar belleği içerisinde gerçeklenmelidir.
Bu soyut düzenlemeleri gerçekleyen araçlar veri yapılarıdır.
Bilginin anlamlı sırada bir saklama biriminde tutulma biçimine VERİ YAPISI denir.
Bazı Veri Yapıları
Bağlantılı Liste, Ağaç, Kuyruk Yığıt, Graflar
DERSİN AMACI Bu dersin amacı, program geliştirmenin temel araçları olan veri
yapıları ve algoritmaların etkin kullanımını sağlamak üzere bu konularda genel bilgileri sunmaktır.
Dersin algoritmalar kısmının içeriği özetle şu konuları içermektedir: Algoritma süreci, genel program geliştirme araçları, Özyineleme kavramı, Altprogramlama, Sırlama algoritmaları ve arama algoritmaları, algortimaların etkinlikleri ve karmaşıklıkları. Yapısal özellikleri ve güçlü olanakları ile her programcının mutlaka bilmesi gereken bir dil olan C/C++ programlama dilinin temel özellikleri algoritma kavramı ile ilişkili olarak ortaya konulacaktır. Ayrıca çeşitli konularda algoritma örnekleri verilecektir. Veri yapıları kısmında ise: Diziler, Yığıt ve uygulamaları, Kuyruk veri yapısı ve uygulamaları, bağlı liste veri yapısı ve uygulamaları, ağaçlar ve ikili ağaç uygulamaları, graf ve uygulamaları konuları incelenecektir
FAYDALANILABİLECEK KAYNAK KİTAPLAR Rifat Çölkesen, Veri Yapıları ve Algoritmalar ,
Papatya Yayıncılık, 2004, İstanbul Sefer Kurnaz, Veri Yapıları ve Algoritma
Temelleri, Papatya Yayıncılık, 2004, İstanbul. İbrahim Akman, C ile veri Yapıları, SAS, 2006,
Ankara.
FAYDALANILABİLECEK KAYNAK KİTAPLAR Fatoş Tünay Yarman, Yusuf Murat Erten,
Bilgisayar Sistemleriı, Akademi Kitabevi TBV ortak yayını.Seçkin Yayıncılık, 2006, Ankara.
Ömer Akgöbek, C programlama ve programcılık sanatı, Beta yayınları, 2001.
Fahri Vatansever, Algoritma Geliştirme ve Programlamaya Giriş, Seçkin Yayıncılık, 2002, Ankara.
FAYDALANILABİLECEK KAYNAK KİTAPLARM.Ümit Karakaş, Bilgisayar
yazılımında veri yapıları ve Algoritmalar, Beta yayınları, 2000.
Vasif V. Nabiyev, Teoriden Uygulamalara Algoritmalar, Seçkin Yayıncılık, 2007, Ankara.