Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
Veri Yapıları ve Algoritmalar
Günay TEMÜR DERS_2
2
SAYILAR SAYILAR Fixed point (Sabit Noktalı) 2
Floating Point (Kayan Noktalı) 3,14 Günay TEMÜR
3
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
4
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
5
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
6
Algoritma ve Program Örnekleri
Günay TEMÜR
7
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
8
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
9
Faktöryel Günay TEMÜR
10
Matris Toplam Günay TEMÜR
11
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
12
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
13
Ö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
14
Ö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
15
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 =4 Yani algoritma çalışma süresi 4 katına çıkar. Günay TEMÜR
16
Ö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
17
Ö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
18
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
19
En iyi, Ortalama, En kötü Durumlar (Best, Avarage, Worst Case)
DİZİDEKİ BİR ELEMANIN ARANMASI Günay TEMÜR
20
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
21
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
22
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
23
Karmaşıklık grafiği Günay TEMÜR
24
Ö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
25
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
26
Ö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
27
Ö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
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.