Veri Yapıları ve Algoritmalar Günay TEMÜR DERS_2
SAYILAR SAYILAR Fixed point (Sabit Noktalı) 2 Floating Point (Kayan Noktalı) 3,14 Günay TEMÜR
32 ve 64-bitlik IEEE 754 kayan noktalı sayı özellikleri Parametre 32-bitlik kayan noktalı 64-bitlik kayan noktalı İşaret bit’i 0, artı; 1, eksi sayı Çarpan uzunluğu (bit) 23 52 Üs uzunluğu (bit) 8 11 Üs tabanı (bit) 2 tabanı Üssün en büyük değeri 127 1023 Üssün en küçük değeri -126 -1022 10 tabanında en küçük üs değeri 10-38 10-308 10 tabanında en büyük üs değeri 1038 10308 Kesir sayısı/genişliği 223= 8 Mega 252= 2048 Tera Sıfır sayısı için Ü=0, Ç=0 Sonsuz gösterilim için Ü=255, Ç=0 Ü=2047, Ç=0 Günay TEMÜR
32 ve 64-bitlik IEEE 754 kayan noktalı sayı için bit haritası İşaret biti (i) Üs Çarpan 32 bit 0/1 8 bit 23 bit 64 bit 11 bit 52 bit Günay TEMÜR İ (işaret) Üs K (çarpan) Sayı= (-1)i*(1+k)*2n=üs-bias
Pointer / İşaretçiler int *p; /* bir tam sayının bellekte adresini tutmak için */ float *q /* bir gerçel sayının bellekte adresini tutmak için*/ Char *r /* karakter verinin bellekte adresini tutmak için*/ Günay TEMÜR
Algoritma ve Program Örnekleri Günay TEMÜR
En Küçük veya En Büyük elemanı bulma float enKucuk (float A[], int N) { int k; float ek; ek=A[0]; for (k=1; k<N; k++) if (A[k]<ek) ek=A[k]; return enkucuk; } A[N] ek=A[k] ek=A[0] Günay TEMÜR A[k]<ek ? k=1, k<N, k++ ek
Aritmatik Ortalama A[N] float aritmatikort(int A[], int N) { Toplam=0 int k, toplam=0; float ort; for(k=0; k<N; k++) toplam+=A[k]; ort=(float)toplam/N; return ort; } Toplam=0 Toplam=toplam+A[k] k=0; k<N; k++ Günay TEMÜR Ort=toplam/n ort
Faktöryel Günay TEMÜR
Matris Toplam Günay TEMÜR
Program Çalışma Hızları ve Bellek Gereksinimleri Temel Kavramlar; Yürütme zamanı (Running Time) Zaman karmaşıklığı (Time Complexity) Alan maliyeti (Space Cost) Alan karmaşıklığı (Space Complexity) Temel Hesap Birimi En iyi, Ortalama, En kötü Durumlar (Best, Avarage, Worst Case) Günay TEMÜR
Yürütme zamanı (Running Time) Bir programın veya algoritmanın işlevini yerine getirebilmesi için, temel kabul edilen işlemlerden kaç adet yürütülmesi gerektiğini veren bir bağıntıdır. Temel işlemler= karşılaştırma, aritmatik, döngü işlemleri diyebiliriz. T(n) ile gösterilir. T(n)~Cop*C(n) Cop=Temel işlem zamanı C(n)=Temel işlemlerin sayısı Günay TEMÜR
Örnek: T(n)=1+1+n+1+n+n+1 T(n)=4+3n Verilen algoritmaya ait yürütme zamanı hesaplayınız. 1 1, n+1, n n Günay TEMÜR T(n)=1+1+n+1+n+n+1 T(n)=4+3n
Örnek: Bir algortima için C(n)=1/2*n(n-1) olsun. Bu algoritmanın giriş boyutu 2 katına çıkartıldığında çalışma zamanı hakkında ne söylenebilir Günay TEMÜR
Cevap C(n)= 1 2 𝑛 2 − 1 2 𝑛≅ 1 2 𝑛 2 dir. Üssel arzdaki matematiksel ifadeler var ise, hesaplamalarda sabit terimli ifadeler göz ardı edilir. 𝑇(2𝑛) 𝑇(𝑛) = 𝐶𝑜𝑝∗𝐶(𝑛) 𝐶𝑜𝑝∗𝐶(𝑛) = 1 2 ( 2𝑛) 2 1 2 𝑛 2 =4 Yani algoritma çalışma süresi 4 katına çıkar. Günay TEMÜR
Örnek: En küçük T(n)= 1+2n+n-1+n-1+1 T(n)=4n float enKucuk (float A[], int N) { int k; float ek; ek=A[0]; 1 for (k=1; k<N; k++) 2 if (A[k]<ek) 3 ek=A[k]; 4 return enkucuk; 5 } 1. satır = 1 2. satır for= 1 + n + n-1 = 2n 3. satır if = n-1 4. satır = n-1 5. satır =1 T(n)= 1+2n+n-1+n-1+1 T(n)=4n Günay TEMÜR
Örnek: Matris Toplam 1. satır = 2n+2 2. satır = n*(2m+2) Void matristoplam(A, B, C) { int A[n][m], B[n][m], C[n][m]; int i, j; for(i=0; i<n; i++) 1 for(j=0; j<m; j++) 2 C[i][j] = A[i][j]+B[i][j]; 3 } 1. satır = 2n+2 2. satır = n*(2m+2) 3. satır = n*m T(n,m)=3mn+4n+2 Matris kare ise? Günay TEMÜR
En iyi, Ortalama, En kötü Durumlar (Best, Avarage, Worst Case) Bir algoritma için, yürütme zamanı, maliyet veya karmaşıklık hesaplarında en iyi, ortalama veya en kötü durumların oluşmasıdır. Örneğin; bir dizi üzerinde bir eleman aramak için en iyi durum; aranan dizinin ilk elemanı olması en iyi durumdur. En kötü durum ise aradığınız elemanın dizide olmamasıdır. Budurumda bütün elemanlara bakılmak zorundadır. Günay TEMÜR
En iyi, Ortalama, En kötü Durumlar (Best, Avarage, Worst Case) DİZİDEKİ BİR ELEMANIN ARANMASI Günay TEMÜR
Program Çalışma Hızı ve Karmaşıklık Çalışma Hızını belirlemek için ; 1- Kıyaslama / banchmarking Önceden belirlenmiş veriler ile farklı algoritmaların değerlendirilebilmesi 2- Algoritma analizi / algorithm analysis Yürütme zamanı T(n) ve bellek gereksinimi S(n) bağıntılarının hesaplanabilmesi Günay TEMÜR
Karmaşıklık Bir algoritmanın çok sayıda parametre karşısında maliyet davranışındaki değişimı/artışı gösteren kavramsal bir ifadedir. !!!Az sayıda elemanlar için ilgilenilmez. N=∞ ise karmaşıklık kullanılır. Karmaşıklı ifadeleri için asimtotik ifadeler kullanlır. Big-O, Ω, Θ notasyonları Günay TEMÜR
Büyük O ifadeleri ve anlamları Değişim Şekli O(1) Sabit O(logn) Logaritmik artış O(n) Doğrusal artış O(nlogn) Doğrusal çarpanlı logaritmik O(n2) Karesel artış O(n3) Kübik artış O(2n) İki tabanında üssel artış O(10n) On tabanında üssel artış O(n!) Faktöryel artış Günay TEMÜR
Karmaşıklık grafiği Günay TEMÜR
Örnek: T(n)= 3n2+4n+2 Big-O (n2) olarak söylenir. T(n,m)=3mn+4n+2 Matris kare ise? n=m olur ve T(n,m)=3n*n+4n+2 T(n)= 3n2+4n+2 Burada küçük terimler göz ardı edilir ve Bu prorgamın karmaşıklığı Big-O (n2) olarak söylenir. Günay TEMÜR
Program Bellek Gereksinimi Kod için; Programın tasarımına bağlıdır. Veri için; değişken, sabit sayısı ve türüne bağlıdır. Yığın için; (LIFO) bilgilerin geçici olarak saklandığı bellek alanıdır. Günay TEMÜR
Örnek:Bellek Miktarı Hesabı float aritmatikort(int A[], int N) { int A[20]={7,65,3,23,64,58,69,35,34,79,62,12,38,62,52,46,47,95,24,27}; int k, toplam=0; float ort; for(k=0; k<20; k++) toplam+=A[k]; ort=(float)toplam/20.0; Printf(«Ortalama değer=%f\n», ort); } Günay TEMÜR
Örnek:Bellek Miktarı Hesabı Öncelikle bellekte yer işgal edecek değişken bilgileri edinilir. A, k, toplam, ort İnt ve Float değişkenlerinin bellekte 4 byte yer tuttuğunu bildiğimizden 4*20+4*1+4*1+4*1= 92 Byte bellek ihtiyacımız vardır. Günay TEMÜR