Arrays(Diziler)

Eger karsimizdaki kisi array diyorsa hangi manada kullandigini anlamamiz gerekir. Dille beraber gelen bir varlik mi yoksa veri yapisiyla ilgili bir kavram mi olarak kullaniyor diye.

Bunun icin Data Structures and Algorithm kavramlarini iyi anlamamiz gerekir. Data Sttucture verinin bellekte nasil tutulacagi ile ilgilidir

![[Pasted image 20231119161141.png]]![[Pasted image 20231119164717.png]] ![[Pasted image 20231119165330.png]] Big-O notasyonu algoritmanin kompleksligini ifade etmek icin programcilar arasinda kullanilan bir terimdir. Big-O notasyon grafiginde c sabiti onemli degildir, onemli olan constant time mi degil mi sorulacak soru budur. ![[Pasted image 20231119165624.png]]

Peki algoritmanin karmasikligini nasil analiz edebiliriz?

Kafamizda o algoritmanin kodunu hayal edebiliyorsak karmasikligini anlamamiz kolaydir, ortada bir dongu yoksa yapilacak islem n tane statementin yurutulmesi ise algoritmanin karmasikligi O(1)’dir. Cunku bu islemler yalniz bir kez yapilacak. Eger ortada dongu varsa ve bu dongu veri yapisi icindeki oge sayisiyla orantili sekilde donuyorsa o zaman karmasiklik O(n)’dir. Eger ic ice iki tane dongu ve her iki dongu de veri yapisinin eleman sayisina bagli olarak donuyorsa o zaman karmasiklik O(n2)’dir.

Peki logaritmik karmasiklik nedir? Bunun icin ==binary search== algoritmasina goz atalim;

elimizde kucukten buyuge siralanmis bir dizi olsun; dizide istedigimiz bir degerin var olup olmadigini kontrol etmek isteyelim bunu birkac farkli yolla yapabiliriz bunlardan en efektifi binary search algoritmasidir.

Eger dizinin her elemanini tek tek kontrol ediyorsak(==linear search==) bu hic efektif degildir.

==Binary search algoritmasinda ise surekli dizinin ortanca degerine bakilir eger o eleman istedigimiz elemandan buyukse o elamandan sonraki tum sayilar gormezden gelinir, kucukse ondan onceki tum elemanlar gormezden gelinir. Ve surekli dizinin ortanca degerine bakilmaya devam edilir.==

Eger dizideki eleman sayisi iki katina ciksa ben sadece 1 sorgulama fazla yapacagimdir iste bu ==logaritmik karmasikligi== ifade eder.

Karmasiklik seviyeleri; ![[Pasted image 20231119192226.png]]

[!note] ![[Pasted image 20231119192720.png]] Programcilarin en cok karistirdigi noktalardan biridir, veri yapisinda birden fazla dongu var ama ic ice degil oyleyse algoritmanin karmasikligi, karmasikligi en yuksek olan basamagin karmasikligidir. Ornegin bu kodda algoritmanin karmasikligi O(n)’dir.

!!! Algoritmanin karmasikligi dendiginde aklimiza ==computational karmasiklik== gelmelidir ama algoritmanin karmasikligi yalnizca bundan ibaret degildir kullandigi bellek alanina gore de karmasiklik ifade edilebilir.

!!! Dikkat: Mulakatlarda sorulan bazi algoritma sorularinda kisitlamalari iyi anlamamiz gerekir eger ilave bellek alani kullandigimizda algoritmanin karmasiklik seviyesi dusuyor ise ilave bellek alani hakkimiz var mi yok mu bunu sormamiz gerekir.