From ef19617187324e8bf8b065fe544505a72874eb72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 01:25:17 +0300 Subject: [PATCH 01/32] =?UTF-8?q?algoritma=20nedir=20olu=C5=9Fturuldu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../figures/lamba_algoritma.jpg | Bin 0 -> 27942 bytes .../algoritma-nedir/readme.md | 66 +++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 veri-yapilari-algoritmalar/algoritma-nedir/figures/lamba_algoritma.jpg diff --git a/veri-yapilari-algoritmalar/algoritma-nedir/figures/lamba_algoritma.jpg b/veri-yapilari-algoritmalar/algoritma-nedir/figures/lamba_algoritma.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d48392d80e7d69f43112f463d0483809e07a5bd6 GIT binary patch literal 27942 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 q=Fk|R(Zp!xi*65E?nzuOAwLS0*q~`?rH|Nh7?< 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 literal 0 HcmV?d00001 diff --git a/veri-yapilari-algoritmalar/algoritma-nedir/readme.md b/veri-yapilari-algoritmalar/algoritma-nedir/readme.md index 0f6876e76..544a10a5f 100644 --- a/veri-yapilari-algoritmalar/algoritma-nedir/readme.md +++ b/veri-yapilari-algoritmalar/algoritma-nedir/readme.md @@ -1 +1,65 @@ -# +# Konu Metni + +## Algoritma Nedir + +Algoritma, bir problemin çözümü için yapılması gereken işlemler bütünüdür. + + + +Çok basit bir örnek olarak "**kahvaltı yapmak**" probleminin çözümü şöyledir: + +1. Başla +2. Masayı ve yemekleri hazırla +3. Yemeğini ye +4. Masayı topla +5. Bitir + +Örnekte görüldüğü gibi, bir algoritmada her adımda bir işlem yapılır ve bu işlemlerin sırası bellidir. Ayrıca, her algoritmanın bir başlangıcı ve bir bitişi vardır. + + + +### Akış Şeması + +Bir algoritmayı görselleştirmek için kullanılan bloklar bütününe **akış şeması** denir. + +Akış şemasında bloklar yapılacak işlemleri ve sorulacak soruları, oklar ise bir işlemden hangi işleme geçileceğini gösterir. Örnek bir akış şeması olarak "**bir lambanın çalışmaması**" probleminin çözüm algoritması aşağıda gösterilmiştir: + +![](C:\CE\Career\Patika_dev\staj\veri_yapilari_algoritmalar\taskforce\veri-yapilari-algoritmalar\algoritma-nedir\figures\lamba_algoritma.jpg) + +Görüldüğü gibi sorun çözülene kadar farklı işlemler yapılıyor ve sorun çözüldüğünde işlemler bitiriliyor. + + + +# Sorular + +1. Kullanıcıdan iki adet sayı isteyen, bu iki sayıyı toplayan ve toplamı gösteren programın algoritmasını yazınız. + + Cevap: + + 1. Başla + 2. A sayısını iste + 3. B sayısını iste + 4. A ve B sayısının toplamını C sayısına yaz + 5. C sayısını göster + 6. Bitir + +2. Algoritma ismi nereden gelmektedir, araştırıp yazınız. + + Cevap: El Harezmi + +3. Bir kağıda ya da Paint gibi bir program kullanarak aşağıda verilen "**bir kullanıcının sisteme girişi**" algoritmasını çiziniz. + + 1. Başla + 2. Kullanıcı adını iste + 3. Kullanıcı adı kayıtlı değil ise 2. adıma dön, kayıtlı ise 4. adıma geç + 4. Şifreyi iste + 5. Kullanıcının şifresi yanlış girildiyse 4. adıma dön, doğru girildiyse 6. adıma geç + 6. Sisteme girişe izin ver + 7. Bitir + + + +# Ücretsiz Kaynak + +Algoritma hakkında daha çok bilgi edinmek için https://tr.wikipedia.org/wiki/Algoritma sayfasına göz atabilirsiniz. + From 1601f5a54c8793a8bd4e08edef32c42bcff2cfe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 02:00:17 +0300 Subject: [PATCH 02/32] =?UTF-8?q?bilgi=20ifade=20olu=C5=9Fturuldu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bilgi-ifade/readme.md | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/bilgi-ifade/readme.md b/veri-yapilari-algoritmalar/bilgi-ifade/readme.md index 16e385321..84a611340 100644 --- a/veri-yapilari-algoritmalar/bilgi-ifade/readme.md +++ b/veri-yapilari-algoritmalar/bilgi-ifade/readme.md @@ -1 +1,32 @@ -# +# Konu Metni + +## Bilginin bilgisayarda ifade edilmesi + +Bilgisayarda tüm bilgiler sadece **0** ve **1** sembollerini kullanılarak ifade edilir. Bu 0 ve 1 sembolleri ise aslında bilgisayardaki "transistör" adındaki parçaların elektrikle yüklü olup olmadıklarıdır. Bir transistörde elektrik varsa 1, elektrik yoksa 0 anlamına gelir. + + + +### Bilgisayarın ve insanların bilgiyi ifade etmesi + +Biz insanlar bilgiyi ifade etmek için birçok sembol kullanırız. Örneğin; "araba" gibi bir yazıyı ifade etmek için harfleri, "42" gibi bir sayıyı ifade etmek için sayıları, bir resmi ifade etmek için ise renkleri kullanırız. Bilgisayarlar ise aklınıza gelebilecek her bilgiyi 0 ve 1 sembollerini kullanarak ifade eder. Örneğin; bir resim bilgisayar için bir pikseller bütünüdür ve her piksel de kırmızı, yeşil ve mavi renklerinin belli oranlarda karışımından oluşur. Bilgisayar, pikselleri resimdeki sırasıyla tutar ve her pikseli de 3 tane sayı olarak tutar. + + + +# Sorular + +1. Bilgisayarda bilgi kaç farklı sembolle ifade edilir. + + Cevap: 2 + +2. Bilgisayarda 0 ve 1 bilgisinin tutulduğu elektronik parçanın adı nedir? + + Cevap: Transistör + +3. + + + +# Ücretsiz Kaynak + + + From 485a79b69e503e3424501b6ee6498e0ce1f2571c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 02:25:07 +0300 Subject: [PATCH 03/32] =?UTF-8?q?say=C4=B1=20sistemleri=20olu=C5=9Fturuldu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sayi-sistem/readme.md | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/sayi-sistem/readme.md b/veri-yapilari-algoritmalar/sayi-sistem/readme.md index 16e385321..6bc0806f1 100644 --- a/veri-yapilari-algoritmalar/sayi-sistem/readme.md +++ b/veri-yapilari-algoritmalar/sayi-sistem/readme.md @@ -1 +1,22 @@ -# +# Konu Metni + +## Sayı Sistemleri + +Biz insanlar, sayı sistemi olarak **ondalık sistemi** kullanırız. Bu sistemde 10 tane farklı sembol vardır. Bilgisayarlar ise insanlardan farklı olarak **ikili sayı sistemi** kullanır ve bu sistemde sadece 2 sembol vardır. Bu iki sembol ise **0** ve **1**'dir. Biz her sayıyı 10 tane rakam kullanarak nasıl ifade ediyorsak, bilgisayarlar da sadece 2 tane rakam kullanarak ifade eder. + + + +Bir sayı yazdığımızda, her rakam bir **basamağa** aittir. Örneğin; "240" sayısını yazdığımızda 0 rakamı birler basamağına, 4 rakamı onlar basamağına, 2 rakamı ise yüzler basamağına aittir. Aslında bir sayıyı anlarken yaptığımız şey her rakamı basamağıyla çarpıp hepsini toplamaktır. Yani "240" sayısı "2x100 + 4x10 + 0x1" şeklinde de anlaşılabilir. Bu işlemin sonucu ise elbette "240" olacaktır. + + + +# Sorular + + + + + +# Ücretsiz Kaynak + + + From 5d63f334c257b047f079b0c5db86f738a1f17915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 11:53:54 +0300 Subject: [PATCH 04/32] =?UTF-8?q?say=C4=B1=20sistemi=20edit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sayi-sistem/readme.md | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/veri-yapilari-algoritmalar/sayi-sistem/readme.md b/veri-yapilari-algoritmalar/sayi-sistem/readme.md index 6bc0806f1..dd7527772 100644 --- a/veri-yapilari-algoritmalar/sayi-sistem/readme.md +++ b/veri-yapilari-algoritmalar/sayi-sistem/readme.md @@ -6,17 +6,43 @@ Biz insanlar, sayı sistemi olarak **ondalık sistemi** kullanırız. Bu sistemd -Bir sayı yazdığımızda, her rakam bir **basamağa** aittir. Örneğin; "240" sayısını yazdığımızda 0 rakamı birler basamağına, 4 rakamı onlar basamağına, 2 rakamı ise yüzler basamağına aittir. Aslında bir sayıyı anlarken yaptığımız şey her rakamı basamağıyla çarpıp hepsini toplamaktır. Yani "240" sayısı "2x100 + 4x10 + 0x1" şeklinde de anlaşılabilir. Bu işlemin sonucu ise elbette "240" olacaktır. +Bir sayı yazdığımızda, her rakam bir **basamağa** aittir. Örneğin; "**240**" sayısını yazdığımızda 0 rakamı birler basamağına, 4 rakamı onlar basamağına, 2 rakamı ise yüzler basamağına aittir. Aslında bir sayıyı anlarken yaptığımız şey her rakamı basamağıyla çarpıp hepsini toplamaktır. Yani "240" sayısı "**2x100 + 4x10 + 0x1**" şeklinde de anlaşılabilir. Bu işlemin sonucu ise elbette "240" olacaktır. + + + +Ondalık sistemde, basamaklar 1'den başlar ve toplamda 10 tane kullanılabilecek rakam olduğundan dolayı 10 ile çarpılarak (birler, onlar, yüzler, binler basamağı şeklinde) devam eder. İkili sistemde ise 0 ve 1 olmak üzere 2 tane rakam vardır. Bu yüzden de basamaklar yine 1'den başlar ancak 2 ile çarpılarak (birler, ikiler, dörtler, sekizler basamağı şeklinde) devam eder. + +Örnek olarak "**1101**" sayısını ikili sayı sisteminde ele alalım. Basamaklarına göre açılım yapacak olursak "**1x8 + 1x4 + 0x2 + 1x1**" şeklinde açarak bu sayının ondalık sistemde hangi sayıya denk geldiğini bulabiliriz. İşlem yapıldığında sayı ondalık sistemde "**13**" oluyor. Gördüğümüz gibi ikili sistemdeki "1101" sayısı ondalık sistemde "13" sayısına denk geliyor. Bu sayıların içerdikleri bilgi aynı fakat farklı sayı sistemlerinde yazıldıkları için farklı görünüyorlar. + + + +### Ondalık sistem ve ikili sistem arasında dönüşümler + +Peki "13" sayısını ondalık sistemden ikili sisteme nasıl dönüştürebiliriz? Ondalık sayı sisteminde basamakları bulmak için sayıyı 10'a böleriz ve bölümlerden kalanlar bize basamakları verir. + +"13" sayısında bu işlemi yapalım. 13'ü 10'a bölünce bölüm 1 ve kalan 3 çıkar. Demek ki 3 birler basamağında. Bölüm olan 1'i 10'a bölünce bölüm 0 ve kalan 1 çıkar. Demek ki onlar basamağında 1 var. Bölüm 0 olduğu için işlemi bitirir ve sayıları basamaklarına yazarız. Sonuç olarak "13" sayısını elde ederiz. + +"13" sayısını ikili sisteme çevirmek için aynı işlemleri yapmalıyız ancak 10 sayısına değil de 2 sayısına bölmeliyiz. İşlemleri yapalım. 13'ü 2'ye bölünce bölüm 6 ve kalan 1 çıkar. Birler basamağında 1 var. 6'yı 2'ye bölünce bölüm 3 ve kalan 0 çıkar. İkiler basamağında 0 var. 3'ü 2'ye bölünce bölüm 1 ve kalan da 1 çıkar. Dörtler basamağında 1 var. 1'i 2'ye bölünce bölüm 0 ve kalan 1 çıkar. Sekizler basamağında da 1 var. Bölüm 0 olduğundan işlemleri bitiririz ve sonuç ise "1101" çıkar. # Sorular +1. Ondalık sistemde yazılmış "58" sayısı, ikili sistemde hangi sayıya denktir? + Cevap: 111010 +2. İkili sistemde yazılmış "1001101" sayısı, ondalık sistemde hangi sayıya denktir? + Cevap: 77 -# Ücretsiz Kaynak +3. Bize "1011" sayısının verildiğini düşünelim. Bu sayının ondalık sistemde mi yoksa ikili sayı sisteminde mi yazıldığını kesin olarak söyleyebilir miyiz? + + Cevap: Sayı 0 ve 1 rakamlarından oluşmaktadır. Ancak, bu iki rakam hem ondalık sistemde hem de ikili sistemde bulunmaktadır. Bu yüzden kesin olarak hangi sistemde yazıldığını söyleyemeyiz. +# Ücretsiz Kaynak + +* [Hackerrank problemi](https://www.hackerrank.com/challenges/30-binary-numbers/tutorial) linkine tıklayarak sayfadaki problemi istediğiniz programlama dilini kullanarak çözebilirsiniz. + From 14a7421b8b0a22ac2923f1fb10aaaead876c0a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 12:42:46 +0300 Subject: [PATCH 05/32] =?UTF-8?q?say=C4=B1sal=20olmayan=20eklendi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sayisal-olmayan/readme.md | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/sayisal-olmayan/readme.md b/veri-yapilari-algoritmalar/sayisal-olmayan/readme.md index 16e385321..981a58a51 100644 --- a/veri-yapilari-algoritmalar/sayisal-olmayan/readme.md +++ b/veri-yapilari-algoritmalar/sayisal-olmayan/readme.md @@ -1 +1,31 @@ -# +# Konu Metni + +## Sayısal Olmayan Bilgilerin İfadesi + +Sayısal olmayan bilgileri, bir yazı gibi, biz insanlar harfleri kullanarak belirtiriz. Ancak bilgisayarlar, her bilgi gibi yazı bilgisini de 0 ve 1 rakamlarını kullanarak ifade eder. Peki bu nasıl mümkün olabiliyor? + +Bilgisayar, her harfi ya da karakteri farklı bir sayı olarak ifade eder. Örneğin; "1000001" sayısı aslında ondalık sistemde "65" sayısını ifade eder. Ancak, biz bu sayının bir yazı karakterini ifade ettiğini biliyorsak "1000001" sayısının "A" harfini ifade ettiğini söyleyebiliriz. Aynı şekilde ondalık sistemde "66" sayısına denk gelen "1000010" sayısı da "B" harfini ifade eder. + +Bir yazı ise bu karakterlerin art arda sıralanmasından oluşur. Örneğin; "BABA" kelimesini yazmak için "B" ve "A" anlamına gelen ikili sayılar sıralanmalıdır. "1000010 1000001 1000010 1000001" sayı dizisi bir yazı olarak "BABA" kelimesine denktir. + + + +# Sorular + +1. ASCII karakter setini araştırınız. Karakterleri inceleyiniz ve bu setin kaç karakterden oluştuğunu yazınız. + + Cevap: ASCII karakter seti 128 karakterden oluşmaktadır. Genişletilmiş ASCII karakter seti ise 256 karakterden oluşur. + +2. ASCII karakter kodları ile "patika" kelimesini yazınız. + + Cevap: 1110000 1100001 1110100 1101001 1101011 1100001 + +3. Dünyada çok sayıda yazı karakteri vardır ve bu karakterlerin hepsini ASCII karakter setine sığdırmak imkansızdır. Örneğin, bir Türkçe karakter olan "ş" harfi ASCII karakter setinde bulunmaz. Peki bu probleme nasıl bir çözüm bulunmuştur? Araştırınız. + + + +# Ücretsiz Kaynak + +* [Hackerrank problemi](https://www.hackerrank.com/contests/codejam2/challenges/super-easy-ascii) linkine tıklayarak sayfadaki problemi istediğiniz programlama dilini kullanarak çözebilirsiniz. +* [Karakter kodlamaları](https://python-istihza.yazbel.com/karakter_kodlama.html) linkinde karakter kodlamalarının detaylı anlatımına ulaşabilirsiniz. + From b671907060bfa25489af89803e8830eb56851e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 13:14:31 +0300 Subject: [PATCH 06/32] veri tutulma eklendi --- .../veri-tutulma/readme.md | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/veri-tutulma/readme.md b/veri-yapilari-algoritmalar/veri-tutulma/readme.md index 16e385321..e3fbba7a9 100644 --- a/veri-yapilari-algoritmalar/veri-tutulma/readme.md +++ b/veri-yapilari-algoritmalar/veri-tutulma/readme.md @@ -1 +1,40 @@ -# +# Konu Metni + +## Bilgisayarda Verinin Tutulması + +Bilgisayarlar, her türlü veriyi 0 ve 1 sembollerini kullanarak saklar. 0 veya 1 sembolünü tutan bir yapıya "**bit**" adı verilir. Bir "bit", 0 veya 1 rakamını saklayabildiğinden dolayı 2 farklı değeri ifade edebilir. Bu "bit" adı verilen yapılar art arda sıralanarak daha büyük bilgileri ifade edebilir. Örneğin; "1000001" sayısının bilgisayarda "A" harfini ifade edebildiğini görmüştük. Bu sayıdaki her rakam birer "bit"tir ve bu sayı toplamda 7 adet "bit"ten oluşmaktadır. + +ASCII karakterleri gördüğümüz gibi 7 adet bit kullanılarak oluşturulmuştur. Her bir bit 2 farklı değeri ifade edebildiğinden dolayı 7 bit de "2 üzeri 7" yani "128" farklı değer ifade edebilir. O zaman ASCII karakter setinin 128 karakterden oluştuğunu söyleyebiliriz. + +8 adet bit, bir "**bayt**" anlamına gelir. Bilgisayarda herhangi bir dosyanın ne kadar yer kapladığına baktığımızda hep sonu "bayt" ile biten ifadeler (Kilobayt, megabayt gibi) görürüz. Bu ifadelerin ne olduklarını şöyle ifade edebiliriz: + +* 1 kilobayt = 1024 bayt +* 1 megabayt = 1024 kilobayt +* 1 gigabayt = 1024 megabayt + +### Verinin bilgisayarda fiziksel olarak saklanması + +Peki bu 0 ve 1 bilgileri bilgisayarın içinde nasıl saklanıyor? + +Veriler kalıcı veya geçici olarak bilgisayarda saklanabilir. Kalıcı olarak saklanan bilgiler, sabit disklerde saklanır. Bir Hard Disk depolama biriminde veriler manyetik alan kullanılarak diskin üzerine yazılır. İki farklı manyetik kutup, ikili sistemdeki 0 ve 1 sembollerini temsil eder. Geçici olarak saklanan bilgiler ise RAM adı verilen hafıza biriminde, elektrik kullanılarak saklanır. Bilgisayar kapandığında ise elektrik kesildiğinden dolayı RAM biriminin içindeki bilgiler kaybolur. + + + +# Sorular + +1. Bir adet bayt kaç farklı değer ifade edebilir? + + Cevap: Bir bayt 8 adet bitten oluşur ve "2 üzeri 8" yani 256 farklı değer ifade edebilir. + +2. 1 gigabayt kaç kilobayttır? + + Cevap: 1024x1024 = 2^20 = 1.048.576 + +3. Hard Disk dışında depolama birimleri var mıdır? Araştırınız. + + + +# Ücretsiz Kaynak + +* [Verilerin disklerde depolanması](https://www.goldverikurtarma.com/veriler-disklerde-nasil-depolaniyor) linkinden verilerin sabit disklerde nasıl depolandığını daha detaylı bir şekilde öğrenebilirsiniz. + From efafdc5bbf096de4242e6a0bc6cf756effd99eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 13:37:23 +0300 Subject: [PATCH 07/32] recursion eklendi --- .../recursion/readme.md | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/recursion/readme.md b/veri-yapilari-algoritmalar/recursion/readme.md index 16e385321..d4777ba15 100644 --- a/veri-yapilari-algoritmalar/recursion/readme.md +++ b/veri-yapilari-algoritmalar/recursion/readme.md @@ -1 +1,35 @@ -# +# Konu Metni + +## Recursion + +Bir problem kendi içinde tekrar ediyorsa bu problem "**recursive**" yani "**özyinelemeli**" bir problemdir. Örneğin, bir **üs alma problemini** ele alalım. 2 sayısının 3. üssünü alacağımızı düşünelim. Bu üs alma problemini, 2^3 = 2 x 2^2 şeklinde açabiliriz. Ve bu problemi de, 2 x 2^2 = 2 x 2 x 2^1 şeklinde açabiliriz. 2^1 = 2 olduğundan dolayı sonuç "2 x 2 x 2" işleminin sonucu yani 8 olur. Üs alma işleminde, gördüğümüz gibi çarpma işlemi yineleniyor. Böylece bu problem bir "özyinelemeli" yani "**kendi içinde tekrar eden**" bir problem oluyor. + +Örneğin, 2 aynayı karşı karşıya tutup bir aynaya baktığımız zaman yansıma görüntüsünün sonsuza kadar gittiğini görürüz. İşte burada da bir aynadan diğer aynaya görüntü tekrar tekrar yansıdığından dolayı sonsuza kadar tekrar eden bir yansıma döngüsü oluşmaktadır. + +# Sorular + +1. 2 sayısının istenilen üssünü alan "recursive" bir programı, Python ya da istediğiniz başka bir programlama dilinde yazınız. + + Cevap: + + ````python + def ussunu_al(x): + # base case + if x == 0: + return 1 + + return ussunu_al(x-1) * 2 + ```` + + + +2. Özyinelemeli fonksiyonlarda "base case" nedir ve neden gereklidir? Araştırınız. + +3. [Fibonacci problemi](https://www.hackerrank.com/challenges/ctci-fibonacci-numbers/problem) linkine giderek istenilen Fibonacci sayısını veren fonksiyonu recursion kullanarak yazınız. + + + +# Ücretsiz Kaynak + + + From 780564b8b3fee69cef81f8c63cd5a10fb44d8672 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 14:03:32 +0300 Subject: [PATCH 08/32] array eklendi --- veri-yapilari-algoritmalar/array/readme.md | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/array/readme.md b/veri-yapilari-algoritmalar/array/readme.md index 16e385321..f8f3b973a 100644 --- a/veri-yapilari-algoritmalar/array/readme.md +++ b/veri-yapilari-algoritmalar/array/readme.md @@ -1 +1,28 @@ -# +# Konu Metni + +## Array + +Array, birden çok verinin art arda olacak şekilde tutulduğu bir veri yapısıdır. + +Örneğin; bir öğrencinin sınav notları, notların sırayla tutulduğu bir array'dir. Birden fazla ve aynı tipteki veriler tutulur. Örneğin, bir bowling maçındaki skorlar da bir skor array'idir. + +Array'ler için bilgisayarda ilk başta bir büyüklük belirlenir. Örneğin, bir öğrenci 3 sınav olacaksa 3 veri alabilecek kapasitede bir array oluşturulur. Sonra da bu boşluklara notlar yerleştirilir. Peki öğrenci bir de mazeret sınavına girmek isterse ne olur? + +Array, başta 3 kapasitesinde olduğundan dolayı 4 kapasitesine çıkarılması gerekir. Bu işlem bir kapasite artırmak olarak düşünülüp hızlı olması gerektiği söylenebilir. Ancak, 3 kapasiteli array'e eklenecek olan 4. boşluk da o array'in bitişiğinde olmalıdır. Bu kural, array'lerde hızlı bir şekilde istenilen elemana ulaşılması için gereklidir. 3 kapasiteli array'in yanında önemli bir bilgi olabileceğinden dolayı bir tane boşluk eklenmek yerine, array 4 kapasiteli ve boş olduğu bilinen bir noktaya kopyalanır ve orijinal array de silinir. Böylece, 4 kapasitesinde bir array elde edilir. + +Görüldüğü gibi bir array'e, tüm boşlukları dolu iken yeni bir veri eklemek masraflıdır. Bir avantaj olarak ise, array içindeki tüm veriler bitişik bir halde tutulduğundan dolayı istenilen sıradaki veriye çok hızlı bir şekilde ulaşılabilir. + + + +# Sorular + +1. Kapasitesi dolmuş bir array'e yeni bir veri eklerken neden array başka bir alana kopyalanır? +2. Bir array'de sırası bilinen bir elemana ulaşmak neden çok hızlıdır? +3. Gerçek hayattan bir array örneği veriniz. + + + +# Ücretsiz Kaynak + +* [Hackerrank problemi](https://www.hackerrank.com/challenges/arrays-ds/problem) linkine giderek verilen array'i ters çevirmeniz gereken problemi çözebilirsiniz. + From 4c664536b0f97ab4ce29449c60a3f30027a853b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 14:52:40 +0300 Subject: [PATCH 09/32] linked list eklendi --- .../linked-list/readme.md | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/linked-list/readme.md b/veri-yapilari-algoritmalar/linked-list/readme.md index 16e385321..4920b2496 100644 --- a/veri-yapilari-algoritmalar/linked-list/readme.md +++ b/veri-yapilari-algoritmalar/linked-list/readme.md @@ -1 +1,30 @@ -# +# Konu Metni + +## Linked List + +Linked list yani **bağlı liste**, ilk elemanı belli olan ve her elemanın, ondan sonraki elemanın yerini bildiği bir veri yapısıdır. Yani 1. eleman 2. elemanın, 2. eleman da 3. elemanın nerede olduğunu bilir. Böylece veri elemanları arasında bir bağ kurulmuş olup bir liste oluşturulabilir. Örneğin, okul sırasında kollarımızı öndeki kişinin omuzlarına koyardık. Herkes bir öndeki kişinin omuzlarına kollarını koyarsa bir linked list oluşmuş olur. Linked list'te sondaki elemanın bir yere işaret etmesi gerekmediği gibi en öndeki öğrencinin de kolunu uzatması gerekmez. + +Linked list'in avantajlarından biri, array gibi hafızada bitişik bir şekilde tutulması gerekmemesidir. Her eleman farklı farklı yerlerde olabilir çünkü her eleman bir sonraki elemanın yerini bilir. + + + +# Sorular + +1. Toplamda 3 elemanı olan bir linked list'in kaç elemanı bir sonraki elemanın yerini bilir? + + Cevap: 2 eleman çünkü sonuncu elemanın bir yeri bilmesi gerekmez. + +2. Bir linked list'te 5. elemana direkt ulaşabilir miyiz? + + Cevap: Hayır. 5. elemana ulaşmak için 4. elemana, 4. elemana ulaşmak için 3. elemana ulaşmak gerekir. Yani 1. elemandan sırayla ilerleyerek 5. elemana 4 hamlede ulaşılabilir. + +3. Linked list'in başka çeşitleri var mıdır? Araştırınız. + + + +# Ücretsiz Kaynak + +* [Hackerrank problemi](https://www.hackerrank.com/challenges/print-the-elements-of-a-linked-list/problem) linkine tıklayarak sayfadaki problemi istediğiniz programlama dilini kullanarak çözebilirsiniz. + + + From 43d26d9f1eec75b04f08f21b4f33513502bf2e44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 15:25:14 +0300 Subject: [PATCH 10/32] linked list vs array eklendi --- .../linked-list-array/readme.md | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/linked-list-array/readme.md b/veri-yapilari-algoritmalar/linked-list-array/readme.md index 16e385321..c80187284 100644 --- a/veri-yapilari-algoritmalar/linked-list-array/readme.md +++ b/veri-yapilari-algoritmalar/linked-list-array/readme.md @@ -1 +1,33 @@ -# +# Konu Metni + +## Linked List vs Array + +| | Linked List | Array | +| :----------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | +| Sırası bilinen elemana ulaşma süresi | Bir elemana ulaşmak için o elemandan önceki her elemandan geçmek gerekir | Anında ulaşılır | +| Hafızada kapladığı yer | Her eleman içerdiği bilgiye ek olarak bir sonraki elemanın yer bilgisini tuttuğu için daha fazla yer kaplar | Her eleman sadece içerdiği bilgiyi sakladığından daha az yer kaplar | +| Hafızada saklanış biçimi | Her eleman farklı farklı yerlerde saklanabilir | Tüm elemanlar bitişik bir şekilde aynı blokta saklanır | +| Eleman ekleme ve çıkarma | Hızlı bir şekilde eleman eklenip çıkartılır | Eğer kapasite doluysa eleman eklemek için tüm array kopyalanır, eleman çıkarılıp boşluk doldurulacaksa tüm array bir boşluk kaydırılır | + + + +# Sorular + +1. Bir sayı listesi oluşturulacaksa ve bu listenin eleman sayısı sabit ise linked list mi yoksa array mi kullanmak daha mantıklı olur? + + Cevap: Array çünkü ekstra bir eleman eklenilmeyecek ve çıkarılmayacak. + +2. Genel olarak hangi veri yapısı daha fazla yer kaplar? + + Cevap: Linked list. + +3. Neden bir array'de sırası bilinen bir elemana linked list'ten daha hızlı ulaşılır? + + Cevap: Array'in elemanları bitişiktir ve her elemanın hafızadaki yeri ilk elemandan bulunabilir. Ancak, linked list'in elemanları hafızada farklı yerlere dağılır ve her elemanın yerini sadece ondan bir önceki eleman bilir. + + + +# Ücretsiz Kaynak + +* [Linked list vs array](https://www.youtube.com/watch?v=DyG9S9nAlUM) linkinden linked list ve array'in hız bakımından karşılaştırıldığı videoyu izleyebilirsiniz. + From d5e1f3822b41e186a376ccd614cdba6c1e3d8d6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 16:09:50 +0300 Subject: [PATCH 11/32] linked list add delete eklendi --- .../linked-list-add-delete/readme.md | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/linked-list-add-delete/readme.md b/veri-yapilari-algoritmalar/linked-list-add-delete/readme.md index 16e385321..cdb8ac449 100644 --- a/veri-yapilari-algoritmalar/linked-list-add-delete/readme.md +++ b/veri-yapilari-algoritmalar/linked-list-add-delete/readme.md @@ -1 +1,54 @@ -# +# Konu Metni + +## Linked List'te Eleman Ekleme/Çıkarma + +Linked list'te, sadece elemanların birbirini işaret ettiği yerlerde değişiklik yaparak bir eleman eklenebilir ve çıkartılabilir. + +Örneğin, "a -> b -> c" şeklinde 3 elemanlı bir linked list olsun. + +* Bu linked list'in sonuna bir eleman eklemek istersek şöyle yapabiliriz: + + Rastgele bir yere "d" bilgisini yazarız ve "c" elemanının "d" bilgisinin olduğu noktayı göstermesini sağlarız. Bu işlemden sonra linked list "a -> b -> c -> d" haline gelecektir. + +* "b" ve "c" elemanlarının arasına "e" bilgisini yerleştirmek için ise: + + Rastgele bir yere "e" bilgisini yazarız. "b" elemanının "e" elemanını, "e" elemanının ise "c" elemanını göstermesini sağlarız. Bu işlemlerden sonra linked list "a -> b -> e -> c" haline gelecektir. + +* "b" elemanını silmek için ise: + + "a" elemanının "c" elemanını göstermesi sağlanır ve "b" bilgisi hafızadan silinir. Böylece linked list + + "a -> c" haline gelecektir. + + + +# Sorular + +1. Bir linked list'te ilk eleman nasıl silinir? + + Cevap: Linked list'in başlangıç noktası 2. eleman yapılır ve 1. eleman hafızadan silinir. + +2. Normalde bir linked list'in sonuna eleman eklemek için tüm elemanların dolaşılması gerekir. Peki hızlı bir şekilde linked list'in sonuna eleman eklemek istiyorsak ne yapmamız gerekir? + + Cevap: Linked list'in 1. elemanının yerini tuttuğumuz gibi son elemanının yerini de tutabiliriz. Böylece son elemana da hızlı bir şekilde ulaşıp eleman ekleyebiliriz. + +3. "a -> b -> c" şeklinde bir linked list olduğunu düşünelim. a.next = b, b.next = c, c.next = None olsun. Elemanlara ".data" eklenerek de elemanın tuttuğu veriye ulaşılsın. Örneğin, "a.data" ifadesi "a" elemanının tuttuğu veriyi ifade ediyor. Bu linked list'i tersten, "c b a" şeklinde, yazdıracak bir kod yazın. + + Cevap: + + ````py + def ters_yazdir(eleman): + if eleman.next is None: + print(eleman.data) + return + + ters_yazdir(eleman.next) + print(eleman.data) + ```` + + + +# Ücretsiz Kaynak + +* [Medium paylaşımı](https://medium.com/@tolgahan.cepel/do%C4%9Frusal-veri-yap%C4%B1lar%C4%B1-2-ba%C4%9Fl%C4%B1-liste-linked-list-8e5d3d84c41f) linkinde ayrıntılı ve resimli bir linked list anlatımı bulabilirsiniz. + From ee118dd1608a22ecf0cf6080f0428a94c772408b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 16:26:10 +0300 Subject: [PATCH 12/32] stack eklendi --- veri-yapilari-algoritmalar/stack/readme.md | 23 +++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/stack/readme.md b/veri-yapilari-algoritmalar/stack/readme.md index 16e385321..6fea4ba77 100644 --- a/veri-yapilari-algoritmalar/stack/readme.md +++ b/veri-yapilari-algoritmalar/stack/readme.md @@ -1 +1,22 @@ -# +# Konu Metni + +## Stack + +Stack (**yığın**), tek taraftan ekleme ve çıkarma yapılabilen bir veri yapısıdır. + +Örneğin, tabakların üst üste dizildiğini düşünelim. Bu yapıda tabaklar sadece en üstten alındığından ve en üste yeni bir tabak koyulabildiğinden dolayı bu yapı bir stack'tir. Stack'te yeni bir eleman eklemeye **push**, bir eleman çıkarmaya **pop** adı verilir. Son giren tabak, her zaman ilk çıkacağı için stack, son giren ilk çıkar anlamına gelen "**Last in first out**", kısaca **LIFO** bir yapıdır. + +Bu veri yapısının kullanışlı olduğu yerlerden biri, işlemlerin önceliklerinin farklı olduğu bir işlem listesidir. Önceliği yüksek olan işlemler en üst sıralarda yer alır ve en önce bitirilir. Çok önemli olmayan işlemler ise en alt sıralarda kalır ve en son bitirilir. + +# Sorular + +1. Gerçek hayattan bir stack veri yapısı örneği veriniz. +2. [Hackerrank problemi](https://www.hackerrank.com/challenges/maximum-element/problem) linkine giderek stack problemini çözünüz. +3. + + + +# Ücretsiz Kaynak + +* [Medium paylaşımı](https://medium.com/@tolgahan.cepel/do%C4%9Frusal-veri-yap%C4%B1lar%C4%B1-3-y%C4%B1%C4%9F%C4%B1t-stack-6c5db18ee934) linkinde ayrıntılı ve resimli bir stack anlatımı bulabilirsiniz. + From c65cf363676a4bc21fe0d79e26a209bdf817cb36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 17:20:47 +0300 Subject: [PATCH 13/32] queue eklendi --- veri-yapilari-algoritmalar/queue/readme.md | 23 +++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/queue/readme.md b/veri-yapilari-algoritmalar/queue/readme.md index 16e385321..42a12d238 100644 --- a/veri-yapilari-algoritmalar/queue/readme.md +++ b/veri-yapilari-algoritmalar/queue/readme.md @@ -1 +1,22 @@ -# +# Konu Metni + +## Queue + +Queue (**sıra**), bir tarafından sadece eleman eklenebilen ve diğer tarafından sadece eleman çıkartılabilen bir veri yapısıdır. + +Örneğin, market sırası bir queue yapısıdır. Market sırasına ilk giren kişi ilk ödemesini yapar ve sıradan çıkar, son giren kişi ise önündeki kişileri beklemek durumundadır. Queue yapısında bir elemanın sıraya eklenmesine **enqueue**, bir elemanın sıradan çıkarılmasına **dequeue** denir. İlk sıraya giren kişi ilk önce sıradan çıkacağından dolayı queue, ilk giren ilk çıkar anlamına gelen "**First in first out**", kısaca "**FIFO**" bir yapıdır. + +Queue veri yapısının kullanışlı olduğu yerler, bir sıranın olduğu yerlerdir. Örneğin, internetten bir dosya indirirken aynı anda birçok kişi o siteden dosya indiriyorsa kullanıcı bir dosya indirme sırasına sokulabilir. + +# Sorular + +1. Gerçek hayattan bir queue veri yapısı örneği veriniz. +2. [Hackerrank problemi](https://www.hackerrank.com/challenges/30-queues-stacks/problem) linkine tıklayarak girilen kelimenin bir [palindrom](https://tr.wikipedia.org/wiki/Palindrom) olup olmadığını queue ve stack kullanarak bulmanız gereken problemi çözebilirsiniz. +3. Double-ended queue (çift taraflı queue) nedir? Araştırınız. + + + +# Ücretsiz Kaynak + +* [Medium paylaşımı](https://medium.com/@tolgahan.cepel/do%C4%9Frusal-veri-yap%C4%B1lar%C4%B1-4-kuyruk-queue-dcbd07e8ba77) linkinde ayrıntılı ve resimli bir queue anlatımı bulabilirsiniz. + From 968dad8c9abc1d889d155dd788f8193c97438d87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 17:47:41 +0300 Subject: [PATCH 14/32] hash table eklendi --- .../hash-table/readme.md | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/hash-table/readme.md b/veri-yapilari-algoritmalar/hash-table/readme.md index 16e385321..fa9124d96 100644 --- a/veri-yapilari-algoritmalar/hash-table/readme.md +++ b/veri-yapilari-algoritmalar/hash-table/readme.md @@ -1 +1,31 @@ -# +# Konu Metni + +## Hash Table + +Hash table, verilerin **anahtar-değer** ikilisi olarak tutulduğu ve değerlere anahtarlar üzerinden hızlıca erişilebilen bir veri yapısıdır. + +Örneğin, bir **Türkçe sözlük**, kelime-anlam ikililerinden oluşur. Burada kelimeler anahtarlardır ve anlamlar ise değerlerdir. Bir kelimenin anlamını öğrenmek için o kelimeyi bulur ve karşısında yazılmış olan anlama bakarız. Anahtar-değer ikililerinden oluştuğu için sözlükler, hash table veri yapısına örnektir. + +Peki bu anahtarlardan değerlere nasıl ulaşılıyor? + +Array'i hatırlayacak olursak her elemanın bir indeksi yani sırası vardı. Örneğin, "elma, armut, çilek" array'inde elma 1. eleman, armut 2. eleman ve çilek de 3. elemandır. Hash table denilen veri yapısını oluşturabilmek için ise anahtarları indekslere dönüştüren bir fonksiyon gerekmektedir. Bu fonksiyona **hash function** denir. Örneğin bu fonksiyon, anahtar verisinin harflerinin ASCII karakter değerlerini toplayan bir fonksiyon olabilir. Yani sözlükte "baba" kelimesinin anlamını bulurken bu harflerin ASCII değerleri toplanınca çıkan indeks sayısına gidilip kelimenin anlamı bulunabilir. Kısacası, hash table da bir array'dir ama indeksleri sadece sayı değil yazı gibi başka veri tipleri de olabilir. + +# Sorular + +1. Gerçek hayattan bir hash table veri yapısı örneği veriniz. + +2. Hash table yapısında anahtarları indekslere çeviren fonksiyona ne ad verilir? + + Cevap: Hash function. + +3. Hash table yapısında iki farklı anahtar aynı indekse denk gelebilir mi? + + Cevap: Evet, denk gelebilir. Örneğin, hash function harflerin ASCII değerlerini topluyorsa "kara" ve "akar" sözcüklerinin indeks değerleri aynı olacaktır. + + + +# Ücretsiz Kaynak + +* [Hackerrank problemi](https://www.hackerrank.com/challenges/ctci-ransom-note/problem) linkine tıklayarak sayfadaki problemi istediğiniz programlama dilini kullanarak çözebilirsiniz. +* Hash table hakkında daha fazla bilgi için [hash table](https://yazilimdnyasi.wordpress.com/2020/02/14/hashing-nedir-veri-yapilari/) linkine göz atabilirsiniz. + From 977b4176fd6259f9455a42a1a7094b132d2d273c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 18:02:25 +0300 Subject: [PATCH 15/32] hash function eklendi --- .../hash-collision/readme.md | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/hash-collision/readme.md b/veri-yapilari-algoritmalar/hash-collision/readme.md index 16e385321..c288f3db5 100644 --- a/veri-yapilari-algoritmalar/hash-collision/readme.md +++ b/veri-yapilari-algoritmalar/hash-collision/readme.md @@ -1 +1,37 @@ -# +# Konu Metni + +## Hash Function + +Hash function, bir hash table'da anahtarları indekslere dönüştüren fonksiyondur. + +Hash table yapısında şu 3 özelliğin olması beklenir: + +1. Hash function **aynı girdiye** her zaman **aynı indeksi** vermelidir. + + Örneğin, "patika" girdisine 5 indeksi veriyorsa her "patika" anahtarı girildiğinde 5 indeksini vermelidir. + +2. Hash function **farklı girdilere** **farklı indeks** vermelidir. + + Örneğin, "patika" girdisine 5 indeksi veriyorsa başka herhangi bir girdiye 5 indeksi vermemelidir. + +3. Hash function'ın verdiği indeksler, hash table'ın değerlerinin tutulduğu **array'in sınırları içinde** olmalıdır. + + Array'in kapasitesi 10 ise, hash function en az 0 çıktısı, en fazla da 9 çıktısı vermelidir. + + + +# Sorular + +1. Kullanılabilecek bir hash function örneği veriniz. + +2. Bir hash table'ın anahtarlarının veri tipi array olabilir mi? + + Cevap: Evet, olabilir. Hash function olarak da array'in içindeki değerleri toplayan bir fonksiyon seçilebilir. + +3. Bir hash function, iki anahtar için aynı indeks değerini üretebilir. Bu duruma nasıl bir çözüm bulunabilir? + + + +# Ücretsiz Kaynak + +* [Hash function vikipedi](https://tr.wikipedia.org/wiki/Hash_fonksiyonu) linkine giderek hash function hakkında bilgi edinebilirsiniz. From 91a2674014028e67d42ef6fa9f5f3dc054735d44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 18:04:22 +0300 Subject: [PATCH 16/32] hash function eklendi --- .../hash-collision/readme.md | 23 ----------- .../hash-function/readme.md | 38 ++++++++++++++++++- 2 files changed, 37 insertions(+), 24 deletions(-) diff --git a/veri-yapilari-algoritmalar/hash-collision/readme.md b/veri-yapilari-algoritmalar/hash-collision/readme.md index c288f3db5..dabee64e7 100644 --- a/veri-yapilari-algoritmalar/hash-collision/readme.md +++ b/veri-yapilari-algoritmalar/hash-collision/readme.md @@ -1,37 +1,14 @@ # Konu Metni -## Hash Function -Hash function, bir hash table'da anahtarları indekslere dönüştüren fonksiyondur. - -Hash table yapısında şu 3 özelliğin olması beklenir: - -1. Hash function **aynı girdiye** her zaman **aynı indeksi** vermelidir. - - Örneğin, "patika" girdisine 5 indeksi veriyorsa her "patika" anahtarı girildiğinde 5 indeksini vermelidir. - -2. Hash function **farklı girdilere** **farklı indeks** vermelidir. - - Örneğin, "patika" girdisine 5 indeksi veriyorsa başka herhangi bir girdiye 5 indeksi vermemelidir. - -3. Hash function'ın verdiği indeksler, hash table'ın değerlerinin tutulduğu **array'in sınırları içinde** olmalıdır. - - Array'in kapasitesi 10 ise, hash function en az 0 çıktısı, en fazla da 9 çıktısı vermelidir. # Sorular -1. Kullanılabilecek bir hash function örneği veriniz. - -2. Bir hash table'ın anahtarlarının veri tipi array olabilir mi? - - Cevap: Evet, olabilir. Hash function olarak da array'in içindeki değerleri toplayan bir fonksiyon seçilebilir. -3. Bir hash function, iki anahtar için aynı indeks değerini üretebilir. Bu duruma nasıl bir çözüm bulunabilir? # Ücretsiz Kaynak -* [Hash function vikipedi](https://tr.wikipedia.org/wiki/Hash_fonksiyonu) linkine giderek hash function hakkında bilgi edinebilirsiniz. diff --git a/veri-yapilari-algoritmalar/hash-function/readme.md b/veri-yapilari-algoritmalar/hash-function/readme.md index 16e385321..c288f3db5 100644 --- a/veri-yapilari-algoritmalar/hash-function/readme.md +++ b/veri-yapilari-algoritmalar/hash-function/readme.md @@ -1 +1,37 @@ -# +# Konu Metni + +## Hash Function + +Hash function, bir hash table'da anahtarları indekslere dönüştüren fonksiyondur. + +Hash table yapısında şu 3 özelliğin olması beklenir: + +1. Hash function **aynı girdiye** her zaman **aynı indeksi** vermelidir. + + Örneğin, "patika" girdisine 5 indeksi veriyorsa her "patika" anahtarı girildiğinde 5 indeksini vermelidir. + +2. Hash function **farklı girdilere** **farklı indeks** vermelidir. + + Örneğin, "patika" girdisine 5 indeksi veriyorsa başka herhangi bir girdiye 5 indeksi vermemelidir. + +3. Hash function'ın verdiği indeksler, hash table'ın değerlerinin tutulduğu **array'in sınırları içinde** olmalıdır. + + Array'in kapasitesi 10 ise, hash function en az 0 çıktısı, en fazla da 9 çıktısı vermelidir. + + + +# Sorular + +1. Kullanılabilecek bir hash function örneği veriniz. + +2. Bir hash table'ın anahtarlarının veri tipi array olabilir mi? + + Cevap: Evet, olabilir. Hash function olarak da array'in içindeki değerleri toplayan bir fonksiyon seçilebilir. + +3. Bir hash function, iki anahtar için aynı indeks değerini üretebilir. Bu duruma nasıl bir çözüm bulunabilir? + + + +# Ücretsiz Kaynak + +* [Hash function vikipedi](https://tr.wikipedia.org/wiki/Hash_fonksiyonu) linkine giderek hash function hakkında bilgi edinebilirsiniz. From f76e1732ffb8c9e7f881f51ca3c2547a0f7c3496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 18:15:26 +0300 Subject: [PATCH 17/32] hash table edit --- .../hash-table/readme.md | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/veri-yapilari-algoritmalar/hash-table/readme.md b/veri-yapilari-algoritmalar/hash-table/readme.md index fa9124d96..e1bb48255 100644 --- a/veri-yapilari-algoritmalar/hash-table/readme.md +++ b/veri-yapilari-algoritmalar/hash-table/readme.md @@ -14,13 +14,34 @@ Array'i hatırlayacak olursak her elemanın bir indeksi yani sırası vardı. Ö 1. Gerçek hayattan bir hash table veri yapısı örneği veriniz. -2. Hash table yapısında anahtarları indekslere çeviren fonksiyona ne ad verilir? - - Cevap: Hash function. - 3. Hash table yapısında iki farklı anahtar aynı indekse denk gelebilir mi? Cevap: Evet, denk gelebilir. Örneğin, hash function harflerin ASCII değerlerini topluyorsa "kara" ve "akar" sözcüklerinin indeks değerleri aynı olacaktır. + +3. ````python + cumle = "iki kere iki dört eder" + ```` + + Yukarıdaki "cumle" adlı değişkendeki kelimeleri ve o kelimelerin sayısını bulan bir program yazınız. + + Cevap: + + ````py + hash_table = {} + kelime_listesi = cumle.split() + + for kelime in kelime_listesi: + # kelime hash table'da varsa sayısını bir artır + if hash_table[kelime]: + hash_table[kelime] += 1 + # kelime hash table'da yoksa kelimeyi sayısı 1 olacak şekilde ekle + else: + hash_table[kelime] = 1 + + print(hash_table) + ```` + + From 607d4bacdcce451f411f1ac1ba54b297a1e88778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 18:48:24 +0300 Subject: [PATCH 18/32] hash collision eklendi --- .../hash-collision/readme.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/veri-yapilari-algoritmalar/hash-collision/readme.md b/veri-yapilari-algoritmalar/hash-collision/readme.md index dabee64e7..184cddec1 100644 --- a/veri-yapilari-algoritmalar/hash-collision/readme.md +++ b/veri-yapilari-algoritmalar/hash-collision/readme.md @@ -1,14 +1,42 @@ # Konu Metni +## Hash Collision +Hash collision (hash çarpışması), hash function'ın farklı anahtarlar için aynı indeks değerini oluşturması durumudur. + +Örneğin, bir hash table'da "tak" sözcüğü ve anlamı bulunmakta. Bu hash table'a "kat" sözcüğünü eklemek istiyorum ancak aynı indeks değerini veriyor. O indekste bir veri olup olmadığına bakmadan, "kat" sözcüğünün anlamını oraya yazarsak sözlükteki "tak" sözcüğünün anlamını kaybetmiş oluruz. + +Peki bu hash collision probleminin çözümü nedir? + +**Separate chaining** (ayrı zincirleme) adlı bir yöntem kullanılabilir. Bu yöntemde, hash table'daki her kısım birer linked list olarak kullanılır. Aynı indekslere sahip olan anahtarlar, o indeksteki linked list'te tutulur. Örneğin, hash function "tak" ve "kat" sözcükleri için aynı indeksi veriyor ve şu anda hash table'da "tak" sözcüğü bulunmakta. "kat" sözcüğü hash table'a eklenirken o indeksteki linked list'in en son kısmına eklenir. Böylece bir indekste birden fazla bilgi art arda olacak şekilde tutulabilir. + +Hash collision arttıkça hash table'da ekleme, silme, arama işlemleri linked list'lerde dolaşılacağından dolayı daha uzun sürer ve hash table'ın performansı düşer. Bu yüzden bir hash function ne kadar az hash collision üretiyorsa o kadar iyidir. # Sorular +1. Girilen anahtar değerin harflerinin ASCII değerlerini toplayıp bu toplamın 10'a bölümünden kalanı indeks olarak veren bir fonksiyon yazınız. + + Cevap: + + ````py + def hash_func(anahtar): + toplam = 0 + for harf in anahtar: + # bir karakterin ASCII değeri "ord" fonksiyonu yardımıyla bulunabilir. + toplam += ord(harf) + return toplam % 10 + ```` + +2. İlk soruda yazdığınız fonksiyonda, aynı indeks çıktısını veren iki kelime bulup yazınız. + + Örnek: "patika" ve "ak" sözcükleri "4" çıktısını veriyor. +3. Başka yöntemlerle de hash collision sorunu çözülebilir mi? Araştırınız. # Ücretsiz Kaynak +* [Hashing](https://yazilimdnyasi.wordpress.com/2020/02/14/hashing-nedir-veri-yapilari/) linkinde hash table ve hash collision hakkında bilgi edinebilirsiniz. From 47435a887353347362b8302b86c3b8a343f1cd74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 19:26:46 +0300 Subject: [PATCH 19/32] algoritma analizi eklendi --- .../algoritma-analiz/readme.md | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/algoritma-analiz/readme.md b/veri-yapilari-algoritmalar/algoritma-analiz/readme.md index 16e385321..cc2f87ffd 100644 --- a/veri-yapilari-algoritmalar/algoritma-analiz/readme.md +++ b/veri-yapilari-algoritmalar/algoritma-analiz/readme.md @@ -1 +1,40 @@ -# +# Konu Metni + +## Algoritma Analizi + +Bir problem, farklı algoritmalar kullanılarak çözülebilir. Peki bu farklı algoritmalardan hangisini kullanmalıyız nasıl karar vereceğiz? + +Algoritma analizi yaparak algoritmaları bazı kriterler kullanarak karşılaştırabiliriz. Genel olarak 3 karşılaştırma kriteri vardır: + +* Programın çalışma zamanı +* Programın çalışırken kullandığı hafıza miktarı +* Programcının, programı yazarken ne kadar süre harcadığı süre + +Duruma göre bu kriterlerden bazıları daha önem kazanabilir. Örneğin, bir programın yazılması gereken süre çok geniş ise programın çalışma zamanı ve kullandığı hafıza daha önemli hale gelebilir. + +### Programın çalışma zamanı + +Programın çalışma zamanı denilince akla ilk başta programın kaç saniyede çalıştığı gelebilir. Ancak bu göreceli bir ifadedir ve yerine göre çok farklı değerler alabilir. Bir programın kaç saniyede çalıştığı; programlama dilinden programlama diline, bilgisayardan bilgisayara hatta aynı bilgisayarda farklı zamanlarda çalıştırıldığında bile değişiklik gösterebilir. Bu sebeple çalışma zamanı girdi sayısı ile çalışma süresinin ilişkisi incelenerek bulunur. Bu şekilde evrensel bir çalışma zamanı ifadesi elde edilir. + + + +# Sorular + +1. Her programın çalışma süresi girdi sayısı arttıkça artar mı? + + Cevap: Hayır. Örneğin, bir array'de istenilen eleman anında bulunabildiği için array'in eleman sayısı artsa da istenilen elemanın bulunma süresi değişmez. + +2. Bir linked list'te istenilen bir elemanın ortalama bulunma süresi, linked list'in eleman sayısı arttıkça artar mı? + + Cevap: Evet, artar. 10 elemanlı bir linked list'te ortalama 5 elemanın dolaşılması gerekiyorsa 20 elemanlı bir linked list'te ortalama 10 elemanın dolaşılması gerekir. + +3. Bir linked list'in başına eleman eklenme süresi, eleman sayısı arttıkça artar mı? + + Cevap: Hayır, artmaz. Bir linked list'te ilk elemanın yeri bilindiğinden dolayı anında eleman eklenebilir. + + + +# Ücretsiz Kaynak + +* [Medium paylaşımı](https://medium.com/@sgoksel/algoritma-analizi-ve-big-o-notasyonu-3b7aefa8a051) linkinde bir algoritma analizi anlatımı bulabilirsiniz. + From 83e21fd9152c57f341cd4a29f4c6923f607c883c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 23:05:04 +0300 Subject: [PATCH 20/32] =?UTF-8?q?=C3=B6dev=201=20ve=20d=C3=BCzeltmeler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hash-collision/readme.md | 2 +- .../hash-table/readme.md | 2 +- .../linked-list-add-delete/readme.md | 2 +- .../recursion/readme.md | 35 +++++++++++++++++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/veri-yapilari-algoritmalar/hash-collision/readme.md b/veri-yapilari-algoritmalar/hash-collision/readme.md index 184cddec1..5074ed389 100644 --- a/veri-yapilari-algoritmalar/hash-collision/readme.md +++ b/veri-yapilari-algoritmalar/hash-collision/readme.md @@ -20,7 +20,7 @@ Hash collision arttıkça hash table'da ekleme, silme, arama işlemleri linked l Cevap: - ````py + ````python def hash_func(anahtar): toplam = 0 for harf in anahtar: diff --git a/veri-yapilari-algoritmalar/hash-table/readme.md b/veri-yapilari-algoritmalar/hash-table/readme.md index e1bb48255..bc1c6c337 100644 --- a/veri-yapilari-algoritmalar/hash-table/readme.md +++ b/veri-yapilari-algoritmalar/hash-table/readme.md @@ -26,7 +26,7 @@ Array'i hatırlayacak olursak her elemanın bir indeksi yani sırası vardı. Ö Cevap: - ````py + ````python hash_table = {} kelime_listesi = cumle.split() diff --git a/veri-yapilari-algoritmalar/linked-list-add-delete/readme.md b/veri-yapilari-algoritmalar/linked-list-add-delete/readme.md index cdb8ac449..fa75bd76f 100644 --- a/veri-yapilari-algoritmalar/linked-list-add-delete/readme.md +++ b/veri-yapilari-algoritmalar/linked-list-add-delete/readme.md @@ -36,7 +36,7 @@ Linked list'te, sadece elemanların birbirini işaret ettiği yerlerde değişik Cevap: - ````py + ````python def ters_yazdir(eleman): if eleman.next is None: print(eleman.data) diff --git a/veri-yapilari-algoritmalar/recursion/readme.md b/veri-yapilari-algoritmalar/recursion/readme.md index d4777ba15..9016352e7 100644 --- a/veri-yapilari-algoritmalar/recursion/readme.md +++ b/veri-yapilari-algoritmalar/recursion/readme.md @@ -33,3 +33,38 @@ Bir problem kendi içinde tekrar ediyorsa bu problem "**recursive**" yani "**öz +# Ödev 1 + +Bu ödevde, girilen yazının harflerinin ASCII değerlerini ikili sistemde yazacak bir program yazmanız istenmekte. Örneğin; "BABA" yazısı girildiyse çıktı "1000010 1000001 1000010 1000001" olmalıdır. + +Not: Öncelikle verilen ondalık sayıyı ikili sistem sayısına dönüştüren ve bu sayıyı string olarak dönen bir fonksiyon yazın. Bundan sonra ise verilen yazının harflerinin ASCII değerlerini ikili sistemde yazacak fonksiyonu yazın. + +Cevap: + +````python +def decimal_to_binary(x): + """girilen ondalık sayıyı ikili sisteme dönüştürür""" + if x == 0: + return "0" + + sonuc = "" + # bölüm 0 olduğunda dur + while x > 0: + kalan = x % 2 + x = x // 2 + # kalanı sonuca ekle + sonuc = str(kalan) + sonuc + + return sonuc + +def text_to_binary(yazi): + """girilen yazının harflerini ikili sistemde yazdırır""" + for harf in yazi: + ascii_deger = ord(harf) + ikili_deger = decimal_to_binary(ascii_deger) + print(ikili_deger, end=" ") + +# örnek kullanım +text_to_binary("BABA") +```` + From ac18dd5f72ced407d1c4128b3271c9cad4a71d03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sat, 11 Sep 2021 23:21:48 +0300 Subject: [PATCH 21/32] ram model eklendi --- .../ram-model/readme.md | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/ram-model/readme.md b/veri-yapilari-algoritmalar/ram-model/readme.md index 16e385321..111f4160f 100644 --- a/veri-yapilari-algoritmalar/ram-model/readme.md +++ b/veri-yapilari-algoritmalar/ram-model/readme.md @@ -1 +1,36 @@ -# +# Konu Metni + +## RAM Modeli + +Hayali bir bilgisayar oluşturalım ve her algoritmayı bu bilgisayarla analiz edebilelim. Bu bilgisayarın analizleri ise evrensel ve genelleştirilebilir analizler olsun. Bu makineye de RAM (Random Access Machine) adını verelim. + +RAM'in özellikleri şunlardır: + +1. Basit işlemler (toplama, çıkarma gibi) **1 birim zaman alır**. +2. Döngüler **iterasyon sayısı x işlem sayısı** kadar zaman alır. Burada işlem sayısı, bir döngüdeki işlem sayısıdır. +3. Hafızadan okuma işlemi de **1 birim zaman alır**. + +RAM'i kullanarak algoritmaları analiz edebileceğiz. + + + +# Sorular + +1. RAM'de bir çarpma işlemi kaç birim zaman alır? + + Cevap: 1 birim zaman alır. + +2. Bir programın 5 iterasyona sahip bir döngü içerdiğini ve her iterasyonda 3 işlem yaptığını düşünelim. Bu programın çalışması kaç birim zaman alır? + + Cevap: 5 x 3 = 15 birim zaman alır. + +3. Bir sayının 3. üssünün alınması işlemi kaç birim zaman alır? + + Cevap: 2 üzeri 3'ün hesaplanmasını düşünelim. Önce 2 ile 2 çarpılır ve 4 bulunur. Bir çarpma işlemi gerçekleşti. Sonra ise 4 ile 2 çarpılır ve 8 bulunur. 2. çarpma işlemi gerçekleşti. İşlem tamamlandı ve 2 çarpma işlemi gerçekleşti. O zaman bu işlem 2 birim zaman alır. + + + +# Ücretsiz Kaynak + + + From 493a965620beb6ec8582f883ca088a39cbcc09b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sun, 12 Sep 2021 00:14:47 +0300 Subject: [PATCH 22/32] time complexity eklendi --- .../time-complexity/readme.md | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/time-complexity/readme.md b/veri-yapilari-algoritmalar/time-complexity/readme.md index 16e385321..db2e0d6b4 100644 --- a/veri-yapilari-algoritmalar/time-complexity/readme.md +++ b/veri-yapilari-algoritmalar/time-complexity/readme.md @@ -1 +1,34 @@ -# +# Konu Metni + +## Time Complexity + +Time complexity (zaman karmaşıklığı), bir algoritmanın girdi sayısına bağlı olarak kaç tane işlem yapması gerektiğinin ifadesidir. + +Time complexity, farklı girdiler için farklı olabilir. Örneğin, isimlerden oluşan bir array'de belirli isimleri array'in başından sonuna kadar dolaşarak aradığımızı düşünelim. Ahmet ismi array'in başında, Mehmet ismi ortasında ve Ali ismi ise sonunda olsun. Ahmet ismini ararken çok hızlı bir şekilde buluruz ancak Ali ismini ararken array'in sonuna kadar gitmemiz gerekmektedir. Bu farklı durumlara "case" adı verilir ve genel olarak 3 case vardır: + +1. **Best case**: En iyi durumdur. Yukarıdaki örnekte Ahmet ismini arama durumudur ve bu örnekte 1 birim zaman alır. Algoritmanın genel performansını yansıtmaz. +2. **Average case**: Ortalama durumdur. Yukarıdaki örnekte Mehmet ismini arama durumudur ve bu örnekte array'in yarısı dolaşıldığından dolayı array uzunluğunun yarısı kadar zaman alır. Ortalama performansı yansıtsa da en çok kullanılan case değildir. +3. **Worst case**: En kötü durumdur. Yukarıdaki örnekte Ali ismini arama durumudur ve bu örnekte tüm array dolaşıldığından dolayı array'in uzunluğu kadar zaman alır. En kötü performansı yansıtsa da algoritma için bir alt performans sınırı belirler. Bu yüzden en çok kullanılan case'dir. + + + +# Sorular + +1. Best case'i worst case'i ile aynı zamanı alan bir işlem söyleyin. + + Cevap: Bir array'de belli bir indeksteki elemana ulaşmak. + +2. Neden average case değil de worst case daha çok kullanılan bir case'tir? + + Cevap: Genelde worst case hesaplaması average case'e göre daha kolaydır ve average case girdilerin dağılımına göre değişiklik gösterebilir. Ayrıca, worst case algoritmanın en alt performans sınırını belirler. + +3. "n" adet elemanı olan ve hash collision'ları önlemek için separate chaining kullanılan bir hash table'ın bir elemanının aranması durumunda worst case kaç birim zaman alır? + + Cevap: Worst case, tüm verilerin bir hash table indeksinde çakıştığı durumdur. Eğer aranan eleman o indeksteki linked list'in sonunda ise arama işlemi "n" birim zaman alır. + + + +# Ücretsiz Kaynak + + + From 86c524b6b4265c6e9e037558ae54ee24db1aa5d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sun, 12 Sep 2021 01:00:37 +0300 Subject: [PATCH 23/32] big o eklendi --- veri-yapilari-algoritmalar/big-o/readme.md | 58 +++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/big-o/readme.md b/veri-yapilari-algoritmalar/big-o/readme.md index 16e385321..eeebba09f 100644 --- a/veri-yapilari-algoritmalar/big-o/readme.md +++ b/veri-yapilari-algoritmalar/big-o/readme.md @@ -1 +1,57 @@ -# +# Konu Metni + +## Big-O Notasyonu + +Big-O notasyonu, bir algoritmanın çalışma zamanının standartlaştırılmış bir şekilde gösterilmesidir. Örneğin, bir isim array'i içinde bir ismi bulmaya çalışıyorsak ve ilk elemandan başlayıp son elemana kadar teker teker dolaşıyorsak bu işlemimizin worst case'i array uzunluğu kadar birim zaman alır. Array uzunluğuna da "n" dersek bu işlem aldığı birim zaman "n" olur. Bu sonucu Big-O notasyonu ile göstericek olursak bu işlemin zamanı "**O(n)**" olur. Bu işlem zamanına, girdi sayısı ne kadar artarsa işlem zamanı o oranda arttığı için, "**doğrusal zaman**" denir. + +Örneğin, bir array'de indeksi belirli bir elemana ulaşmaya çalışıyorsak bu işlem anında yapılır. Bu işlemin zamanı da "**O(1)**" şeklinde gösterilir ve "**sabit zaman**" denir. + +Bir isim array'inde isimler a'dan z'ye sıralı ise isimleri baştan sona aramamıza gerek yoktur. İlk önce array'in ortasına bakarız ve oradaki isim aradığımız isimden önce geliyorsa array'in sağ tarafında aramaya devam ederiz. Her seferinde bu şekilde ikiye bölerek array'in çoğu kısmını aramamış ve arama işlemini çok daha hızlandırmış oluruz. Her seferinde ikiye böldüğümüz için buradaki worst case, "2^x = n" işleminde x'in bulunmasıyla elde edilir. Bu işlemde "x" sayısı ise "log(n)" sayısına eşittir. Böylece bu işlemin zamanını "**O(log(n))**" olarak bulmuş oluruz. Bu işlem zamanına "**logaritmik zaman**" denir. + +Bir programda bir döngü ve o döngünün içinde de bir döngü varsa ve her döngü "n" iterasyon yapıyorsa bu programın zamanı "**O(nxn) = O(n^2)**" olur. + +* Big-O notasyonunda katsayılar ihmal edilir. + + Örneğin, "O(2n)" ile "O(n)" aynı zaman anlamına yani "O(n)" anlamına gelmektedir. + +* Big-O notasyonunda en yüksek zamanlar seçilir, diğer zamanlar ihmal edilir. + + Örneğin, "O(n^2 + 2n + 1)" zamanı "O(n^2)" zamanına eşittir. "2n" ve "1" değerleri "n^2" değerinin yanında önemsiz kalır. Bu ihmalin sebebi de "n" sayısı büyüdükçe "n^2" sayısı çok daha büyük olacağından, bu sayının yanında "2n" ve "1" sayılarının değerinin kalmamasıdır. + + + +# Sorular + +1. Aşağıdaki fonksiyonun Big-O notasyonundaki zamanı nedir? + + ````python + def faktoriyel(x): + if x == 0: + return 1 + return x * faktoriyel(x-1) + ```` + + Cevap: Yukarıdaki faktöriyel fonksiyonunda girdi "n" ise yapılan çarpma işlemi sayısı da "n" olur. Sonuç olarak bu fonksiyonun Big-O notasyonu "O(n)" olur. + +2. Big-O notasyonu "O(n^2)" olan bir fonksiyon yazınız. + + Cevap: + + ````python + def carp(liste): + """listenin her elemanını birbiriyle çarparak tüm çarpımları toplar""" + sonuc = 0 + for i in range(len(liste)): + for j in liste[i:]: + sonuc += liste[i] * j + return sonuc + ```` + +3. En yavaş çalışacak olan Big-O notasyonu zamanı nedir? + + Cevap: O(n^n). + +# Ücretsiz Kaynak + +* [Medium paylaşımı 1](https://medium.com/kodcular/nedir-bu-big-o-notation-b8b9f1416d30) ve [Medium paylaşımı 2](https://medium.com/@sgoksel/algoritma-analizi-ve-big-o-notasyonu-3b7aefa8a051) linklerinden Big-O notasyonu hakkında bilgi edinebilirsiniz. + From 3628c273210057920780a86ff044ccf9e7078f27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sun, 12 Sep 2021 01:35:52 +0300 Subject: [PATCH 24/32] sorting eklendi --- veri-yapilari-algoritmalar/sorting/readme.md | 47 +++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/sorting/readme.md b/veri-yapilari-algoritmalar/sorting/readme.md index 16e385321..7adef65c7 100644 --- a/veri-yapilari-algoritmalar/sorting/readme.md +++ b/veri-yapilari-algoritmalar/sorting/readme.md @@ -1 +1,46 @@ -# +# Konu Metni + +## Sorting + +Sorting (sıralama), bir eleman dizisini belirli bir sıralama ölçütüne göre sıralamaktır. Bu sıralama ölçütleri; artan, azalan, alfabetik, kelimenin uzunluğuna göre artan gibi farklı ölçütler olabilir. Örneğin; Bir Türkçe sözlükte kelimeler, insanların kelimeleri kolay bulabilmesi için alfabetik olarak sıralanmıştır. + +### Sorting neden kullanılır? + +* Bir array'i sıralarsak eleman arama işlemi hızlanır. Hatırladığımız gibi array'i ikiye böle böle bir elemanı daha hızlı bir şekilde arayabiliriz. +* Mode ve kartiller gibi bazı istatistik terimleri sıralama yapmadan bulunamaz. +* Sorting yaptığımızda, array'deki en yakın değerleri taşıyan veriler yan yana gelir. Böylece, herhangi bir veriye en yakın olan veriler bulunabilir. + + + +# Sorular + +1. Gerçek hayattan bir sorting örneği veriniz. + +2. Bubble sort algoritmasını araştırınız ve algoritmayı kod olarak olarak yazınız. + + Cevap: + + ````python + def bubble_sort(array): + siralandi = False + # bir sayı değişim işlemi yapılmazsa array sıralanmış demektir + # o zaman sıralama işlemi bitirilir + while not siralandi: + siralandi = True + for i in range(len(array) - 1): + if array[i] > array[i+1]: + array[i], array[i+1] = array[i+1], array[i] + siralandi = False + + return array + ```` + +3. Bubble sort'un worst case Big-O notasyonunu hesaplayınız. + + Cevap: En kötü senaryoda n elemanlı bir array'i "n" defa dolaşır. Her dolaşmada da "n" tane eleman geçiliyorsa Big-O notasyonu "O(n^2)" olur. + +# Ücretsiz Kaynak + +* [Sorting algoritmaları](https://www.halildurmus.com/2021/02/22/siralama-algoritmalari-sorting-algorithms/) linkinden farklı sorting algoritmalarına bakabilirsiniz. +* [Bubble sort](https://tsafaelmali.medium.com/bubble-sort-algoritmas%C4%B1-nedir-9811bd921b8d) linkinden basit bir sorting algoritması olan "bubble sort" algoritmasına bakabilirsiniz. + From ca70b07f18682923bdbe9071affaf73e83468842 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sun, 12 Sep 2021 12:38:39 +0300 Subject: [PATCH 25/32] selection sort eklendi --- .../insertion-sort/readme.md | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/insertion-sort/readme.md b/veri-yapilari-algoritmalar/insertion-sort/readme.md index 16e385321..af815b4d6 100644 --- a/veri-yapilari-algoritmalar/insertion-sort/readme.md +++ b/veri-yapilari-algoritmalar/insertion-sort/readme.md @@ -1 +1,54 @@ -# +# Konu Metni + +## Selection Sort + +Bir sayı dizisinin tamamının dolaşılıp en küçük elemanın başa yazıldığı, sonra da geri kalan sayıların en küçüğünün 2. eleman yerine yazıldığı ve bu şekilde dizinin sonuna kadar giden sorting algoritmasıdır. + +Örneğin, şöyle bir dizimiz olsun: dizi = [3, 1, 2] + +İlk önce tüm dizide en küçük elemanı bulup ilk eleman olan "3" sayısının yerine yazarız. Burada "1" sayısı ile "3" sayısını yer değiştiririz ve yeni dizi şöyle olur: dizi = [1, 3, 2] + +Sonra, 2. eleman ve ondan sonraki sayıların en küçüğü bulunur ve 2. elemanla yer değiştirilir. Burada "2" ile "3" sayısını yer değiştiririz. Yeni dizi şöyle olur: dizi = [1, 2, 3] + +Dizinin sonuna ulaştığımız için işlemler biter ve dizi sıralanmış olur. + +### Time complexity + +Bu sorting algoritmasında, tüm array "n" kez dolaşılır ve ilk dolaşmada "n" eleman, 2. dolaşmada ise "n-1" eleman dolaşılır. Toplam işlem sayısı "n + (n-1) + (n-2) + ... + 1" şeklinde ifade edilir ve bu ifade "(n x (n+1))/2" yani "(n^2)/2 + n/2" ifadesine eşit olur. Big-O notasyonunda katsayılardan ve küçük ifadelerden kurtuluruz ve son ifade "**O(n^2)**" şeklinde olur. + +### Space complexity + +Bildiğimiz gibi algoritmalarda ne kadar ekstra hafızanın kullanıldığı yani "space complexity" de önemlidir. Space complexity'de kullanılan ekstra hafıza yazılır. Selection sort işleminde verilen array üzerinde yani "in-place" işlemler yapıldığı için ekstra hafıza kullanılmaz. Bu yüzden, bu algoritmanın space complexity'si "**O(1)**" yani "**constant space**" olarak bulunur. + +# Sorular + +1. Selection sort'un best case ve worst case'leri farklı mıdır? + + Cevap: Hayır, aynıdır. Sorting işlemini durdurma mekanizması olmadığı için her seferinde "O(n^2)" olur. + +2. Sizce "O(n^2)" bir sorting algoritması için iyi bir time complexity midir? + +3. Selection sort algoritmasını kod olarak yazınız. + + Cevap: + + ````python + def selection_sort(array): + for i in range(0, len(array) - 1): + # en küçük elemanı bul + en_kucuk = i + for j in range(i+1, len(array)): + if array[j] < array[en_kucuk]: + en_kucuk = j + # elemanları değiştir + array[en_kucuk], array[i] = array[i], array[en_kucuk] + return array + ```` + + + +# Ücretsiz Kaynak + +* [Video](https://www.youtube.com/watch?v=xWBP4lzkoyM) linkine giderek görüntülü bir şekilde algoritmayı görebilirsiniz. +* [Medium paylaşımı](https://medium.com/kodcular/selection-sort-algoritmas%C4%B1-nedir-484c40c9473c) linkine tıklayarak bir selection sort anlatımını bulabilirsiniz. + From 36e50351012b357bbeaf90398500ed5999597256 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sun, 12 Sep 2021 13:25:30 +0300 Subject: [PATCH 26/32] merge sort eklendi --- .../merge-sort/figures/merge_sort.PNG | Bin 0 -> 20869 bytes .../merge-sort/readme.md | 66 +++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 veri-yapilari-algoritmalar/merge-sort/figures/merge_sort.PNG diff --git a/veri-yapilari-algoritmalar/merge-sort/figures/merge_sort.PNG b/veri-yapilari-algoritmalar/merge-sort/figures/merge_sort.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f9d95e85e790a977794314248d234333f2f6d604 GIT binary patch literal 20869 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 literal 0 HcmV?d00001 diff --git a/veri-yapilari-algoritmalar/merge-sort/readme.md b/veri-yapilari-algoritmalar/merge-sort/readme.md index 16e385321..0fd8c4415 100644 --- a/veri-yapilari-algoritmalar/merge-sort/readme.md +++ b/veri-yapilari-algoritmalar/merge-sort/readme.md @@ -1 +1,65 @@ -# +# Konu Metni + +## Merge Sort + +Merge sort, hız kazandırmak için "parçala-birleştir" yöntemi kullanan bir sorting algoritmasıdır. İlk önce array 2'ye bölünerek küçük array'lere ayrılır. Sonra da bu array'ler sıralanarak birleştirilir. + + + + + +Yukarıda görüldüğü gibi array 2'ye bölünerek 1 elemanlı array'lere ayrılmıştır. Ondan sonra ise sıralanarak birleştirme işlemi yapılmıştır. Örneğin, sol orta kısımda 38 ve 27 sayısı birleştirilmiş, [27, 38] şeklinde bir array elde edilmiştir. Sonra bu 2 elemanlı array'ler de sıralanarak birleştirilir. Buradaki avantaj, sıralanmış küçük array'lerin sıralanarak birleştirilmesidir. Zaten sıralı olduğu bilinen array'lerin karşılaştırılması daha kolaydır. + +### Time complexity + +İlk önce küçük array'ler birleştirilirken yapılan karşılaştırma sayılarını hesaplayalım. Bu sayı; 1 elemanlı array'ler için 4, 2 elemanlı array'ler için 6 ve 4 elemanlı array'ler için 7'dir. Yukarıdaki array'in eleman sayısına "n" diyelim. Worst case'i hesapladığımızdan dolayı karşılaştırma sayısı olarak "7 = n-1" yani "n" diyebiliriz. Peki kaç array sırasını karşılaştırıyoruz. Her seferinde array'i 2'ye böldüğümüz için bu sayı "2^x = n" yani "log(n)" şeklinde çıkacaktır. Yukarıdaki örnekte görüldüğü gibi 7 elemanlı bir array'de bu sayı "log(7)" yani yukarı yuvarlandığında "3" olacaktır. "log(n)" array serisi karşılaştırılmakta ve her karşılaştırma "n" birim zaman almaktadır. Sonuç olarak, merge sort algoritmasının worst case time complexity'si "**O(n x log(n))**" şeklinde bulunur. + + + +# Sorular + +1. "O(n x log(n))" time complexity'si, "O(n^2)" ile karşılaştırıldığında yeterince iyi midir? + + Cevap: Evet. Özellikle n sayısı büyüdüğünde çok büyük farklar olduğu görülecektir. Log(n) fonksiyonu çok yavaş bir şekilde arttığından ve sayı büyüdükçe artma şiddeti azaldığından dolayı "O(n x log(n))" performansı "O(n)" performansına yakındır. + +2. Merge sort algoritmasının space complexity'si nedir? Araştırınız. + +3. Merge sort algoritmasını kod olarak yazınız. + + Cevap: + + ````python + def merge_sort(array): + """merge sort""" + if len(array) > 1: + orta = len(array) // 2 + sol = merge_sort(array[:orta]) + sag = merge_sort(array[orta:]) + return merge(sol, sag) + else: + return array + + def merge(sol, sag): + """iki array'i sıralayarak birleştirir""" + sirali_array = [] + + while len(sol) > 0 and len(sag) > 0: + if sol[0] <= sag[0]: + sirali_array.append(sol.pop(0)) + else: + sirali_array.append(sag.pop(0)) + + while len(sol) > 0: + sirali_array.append(sol.pop(0)) + while len(sag) > 0: + sirali_array.append(sag.pop(0)) + + return sirali_array + ```` + + + +# Ücretsiz Kaynak + +* [Video](https://www.youtube.com/watch?v=JSceec-wEyw) linkine tıklayarak merge sort algoritmasını görüntülü bir şekilde görebilirsiniz. + From 590d81e510b608660fc42cbff1c064bcb37621e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sun, 12 Sep 2021 14:10:20 +0300 Subject: [PATCH 27/32] quick sort eklendi --- .../quick-sort/figures/quick_sort.jpg | Bin 0 -> 57544 bytes .../quick-sort/readme.md | 64 +++++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 veri-yapilari-algoritmalar/quick-sort/figures/quick_sort.jpg diff --git a/veri-yapilari-algoritmalar/quick-sort/figures/quick_sort.jpg b/veri-yapilari-algoritmalar/quick-sort/figures/quick_sort.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50eeec0eb79af0844c769303e26289d57f1b9b35 GIT binary patch literal 57544 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 + +Yukarıda görüldüğü gibi bir pivot eleman seçilir ve bu elemana göre array 2'ye bölünür. + + + +### Time complexity + +Quick sort algoritması da "parçala-birleştir" yöntemini kullanır. Array'in eleman sayısına "n" diyelim. Her array 2'ye bölündüğünde yaklaşık "n" tane karşılaştırma yapılır. Array'lerin her seferinde tam olarak 2'ye bölündüğünü varsayarsak toplam bölünme sayısı "log(n)" olacaktır ve bu da "average case" olacaktır. Sonuç olarak, quick sort algoritmasının **average case** time complexity'si "**O(n x log(n))**" olur. + +Peki worst case'i nedir? Her seferinde array'in tüm elemanlarının sağ tarafa bölündüğünü düşünelim. Her seferinde pivot elemana göre sıralama yapıldığı için pivot ortada ve geri kalan array sağda kalacaktır. Bu durumda toplam "n" tane array bölünmesi yapılacak ve her bölünmede "n" karşılaştırma olacağından **worst case** time complexity'si "**O(n^2)**" olacaktır. Ancak genelde bu durum gözlenmediğinden dolayı bu algoritmanın genel performansı "O(n x log(n))" olacaktır. + + + +# Sorular + +1. Quick sort algoritmasında neden worst case yerine average case'i tercih ederiz? + + Cevap: Worst case durumunun görülme olasılığı çok düşük olduğundan ve genelde average case performansı görüldüğünden dolayı quick sort için average case tercih edilir. + +2. Neden quick sort genelde merge sort'tan daha hızlıdır? + + Cevap: Average case time complexity'leri aynıdır ancak quick sort algoritmasının katsayısı daha düşüktür. Biz katsayıları Big-O notasyonunda ihmal etsek de pratikte katsayılar da fark yaratabilir. + +3. Quick sort algoritmasını kod olarak yazınız. + + Cevap: + + ````python + def quick_sort(array): + """quick sort algoritması""" + if len(array) < 2: + return array + # pivot seçimi + pivot = array.pop() + sol = [] + sag = [] + + # pivot elemana göre sol ve sağ array'leri oluştur + for i in array: + if i < pivot: + sol.append(i) + else: + sag.append(i) + # recursive quick sort işlemi + return quick_sort(sol) + [pivot] + quick_sort(sag) + ```` + + + +# Ücretsiz Kaynak + +* [Video](https://www.youtube.com/watch?v=XE4VP_8Y0BU) linkinden quick sort algoritmasının anlatımını izleyebilirsiniz. +* [Video](https://www.youtube.com/watch?v=es2T6KY45cA) linkinden quick sort ve merge sort'un karşılaştırıldığı bir animasyonu izleyebilirsiniz. + From bacfd80d19452f605b471377da1cfffe3ed58baa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sun, 12 Sep 2021 14:30:42 +0300 Subject: [PATCH 28/32] linear search eklendi --- .../linear-search/readme.md | 52 ++++++++++++++++++- .../searching/readme.md | 19 ++++++- 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/veri-yapilari-algoritmalar/linear-search/readme.md b/veri-yapilari-algoritmalar/linear-search/readme.md index 16e385321..5f74d0e5c 100644 --- a/veri-yapilari-algoritmalar/linear-search/readme.md +++ b/veri-yapilari-algoritmalar/linear-search/readme.md @@ -1 +1,51 @@ -# +# Konu Metni + +## Linear Search + +Linear search (doğrusal arama), bir dizide istenilen elemanın her elemanı tek tek dolaşarak aramak demektir. + +Örneğin, şöyle bir sayı listesi olsun: liste = [1, 5, 2, 8, 4] + +Bu listede "8" sayısının olup olmadığını öğrenmek için tüm elemanları tek tek dolaşırız. "1" sayısından başlarız ve 5, 2 sayılarını geçtikten sonra 8 sayısına ulaşırız. + +### Time complexity + +"n" elemanlı bir dizide arama yapıyorsak worst case'de, aradığımız elemanın dizinin sonunda olduğunda, tüm elemanları dolaşmak zorunda olduğumuzdan dolayı time complexity'si "**O(n)**" olur. Best case'de, aranılan eleman dizinin ilk elemanı olduğunda, eleman direkt olarak bulunur ve 1 birim zaman alır. Ancak bu durum nadiren görülür. + + + +# Sorular + +1. Gerçek hayattan bir linear search örneği veriniz. + +2. Sıralı bir array'de arama yapmak için linear search'ten daha iyi bir algoritma var mıdır? + + Cevap: Evet, vardır. Binary search algoritması ile array'i sürekli 2'ye bölerek çok daha hızlı bir şekilde arama yapılabilir. + +3. Linear search algoritmasını kod olarak yazınız. + + Cevap: + + Direkt olarak Python dilinin "in" keyword'ünü kullanabiliriz: + + ````python + liste = [1, 5, 2, 8, 4] + print(8 in liste) + ```` + + Veya bir "for" döngüsü ile bir fonksiyon olarak yazabiliriz: + + ````python + def ara(eleman, liste): + for i in liste: + if eleman == i: + return True + return False + ```` + + + +# Ücretsiz Kaynak + +* [Hackerrank problemi](https://www.hackerrank.com/contests/17cs1102/challenges/1-a-linear-search) linkindeki linear search problemini çözebilirsiniz. + diff --git a/veri-yapilari-algoritmalar/searching/readme.md b/veri-yapilari-algoritmalar/searching/readme.md index 16e385321..3b0e02fb8 100644 --- a/veri-yapilari-algoritmalar/searching/readme.md +++ b/veri-yapilari-algoritmalar/searching/readme.md @@ -1 +1,18 @@ -# +# Konu Metni + +## Searching + +Searching (arama), bir dizide belirli bir elemanın aranması işlemidir. Bu işlemin hızı algoritma kullanımına göre çok fark edebilir. + + + +# Sorular + + + + + +# Ücretsiz Kaynak + + + From eea5feb3c0502af4de1fbf2e7f7f6c9987b4cb6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sun, 12 Sep 2021 15:14:27 +0300 Subject: [PATCH 29/32] binary search eklendi --- .../binary-search/readme.md | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/veri-yapilari-algoritmalar/binary-search/readme.md b/veri-yapilari-algoritmalar/binary-search/readme.md index 16e385321..ffb21f331 100644 --- a/veri-yapilari-algoritmalar/binary-search/readme.md +++ b/veri-yapilari-algoritmalar/binary-search/readme.md @@ -1 +1,49 @@ -# +# Konu Metni + +## Binary Search + +Sıralı bir array'de eleman ararken her karşılaştırmamızda baktığımız array'in yarısını eleyebiliriz. Her defasında elimizdeki array'in ortasına bakarsak aradığımız eleman ortadaki sayıdan küçükse sağ tarafı, büyükse sol tarafı direkt eleyebiliriz. Böylece çok hızlı bir şekilde arama yapabiliriz. + +Bir sözlükte kelime aradığımızı düşünelim. Sözlüğün her sayfasına teker teker bakar mıyız? Hayır, elbette bakmayız. Sözlüğün ortasını açıp ona göre hangi tarafa gideceğimize karar verebiliriz. Hatta "patika" kelimesini arıyorsak "p" harfi orta ile son kısım arasında olacağı için orta kısmın daha sağ tarafını açabiliriz. Böylece arama işlemini daha da hızlandırmış oluruz. + +### Time complexity + +Her defasında array 2'ye bölündüğü için "n" elemanlı bir dizide aramak "log(n)" birim zaman alır. Binary search algoritmasının worst case time complexity'si "**O(log(n))**" olur. + + + +# Sorular + +1. Gerçek hayattan bir binary search örneği verin. + +2. Binary search algoritmasını kod olarak yazın. + + Cevap: + + ````python + def binary_search(eleman, liste): + """binary search + aranan eleman bulunursa indeksi dönülür + bulunamazsa -1 döndürür""" + sol = -1 + sag = len(liste) + + while sag - sol > 1: + orta = (sol + sag) // 2 + if liste[orta] == eleman: + return orta + elif liste[orta] < eleman: + sol = orta + else: + sag = orta + + return -1 + ```` + +3. İnterpolation search algoritmasını araştırınız. + +# Ücretsiz Kaynak + +* [CS50x videosu](https://www.youtube.com/watch?v=jjqgP9dpD1k) linkindeki videonun 22.00 dakikasındaki kısmından searching algoritmalarının eğlenceli bir anlatımını izleyebilirsiniz. +* [Youtube videosu](https://www.youtube.com/watch?v=E6IOrZUpvSE) linkinden binary search algoritmasının animasyonunu izleyebilirsiniz. + From 414b9da622a0fcc9f185445c62ad2610b37ae68c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sun, 12 Sep 2021 15:52:34 +0300 Subject: [PATCH 30/32] binary search tree eklendi --- .../figures/binary_search_tree.jpg | Bin 0 -> 254012 bytes .../figures/unbalanced_binary_search_tree.jpg | Bin 0 -> 22483 bytes .../binary-search-tree/readme.md | 118 +++++++++++++++++- 3 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 veri-yapilari-algoritmalar/binary-search-tree/figures/binary_search_tree.jpg create mode 100644 veri-yapilari-algoritmalar/binary-search-tree/figures/unbalanced_binary_search_tree.jpg diff --git a/veri-yapilari-algoritmalar/binary-search-tree/figures/binary_search_tree.jpg b/veri-yapilari-algoritmalar/binary-search-tree/figures/binary_search_tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e98048a17f09c9a9cd86a54d9a013c27109362ba GIT binary patch literal 254012 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

tVsjdUo|U*GE}Gd}CkG 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%0Doi-W_&n>;*LsNWDQnrSy5sg3cuEr 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 literal 0 HcmV?d00001 diff --git a/veri-yapilari-algoritmalar/binary-search-tree/figures/unbalanced_binary_search_tree.jpg b/veri-yapilari-algoritmalar/binary-search-tree/figures/unbalanced_binary_search_tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab8714caa5e14165d481ec213b9dee819b3483be GIT binary patch literal 22483 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 N*l*g(x@^OZ`xoPZqR;>U literal 0 HcmV?d00001 diff --git a/veri-yapilari-algoritmalar/binary-search-tree/readme.md b/veri-yapilari-algoritmalar/binary-search-tree/readme.md index 16e385321..4a9114f35 100644 --- a/veri-yapilari-algoritmalar/binary-search-tree/readme.md +++ b/veri-yapilari-algoritmalar/binary-search-tree/readme.md @@ -1 +1,117 @@ -# +# Konu Metni + +## Binary Search Tree + +Binary search tree, her noktanın en fazla iki alt noktası olan, soldaki noktanın ana noktadan küçük, sağdaki noktanın ana noktadan büyük olduğu bir ağaç yapısıdır. Eğer ağaç dengeli bir yapıya sahipse binary search algoritmasındaki gibi arama işlemleri "**log(n)**" birim zaman alır. + + + + + +Dengeli bir ağacın derinliği "log(n)" olacağından dolayı yeni bir eleman ekleme işleminin time complexity'si de "**O(log(n))**" olur. + +Eğer ağaç dengeli değilse worst case durumu ortaya çıkar. Ağaca ekleme yapma, eleman arama gibi işlemlerin time complexity'si de "**O(n)**" olur. Aşağıda dengesiz bir ağaç gösterilmektedir: + + + +Yukarıdaki ağaç yapısının bir array'den farkı yoktur ve performansı iyi değildir. Ancak ağaçları dengeli yapıda tutmak için birçok performanslı algoritma vardır ve bu problem çözülmüştür. + + + +# Sorular + +1. Binary search tree gerçek hayatta kullanılır mı? Kullanılıyorsa nerelerde kullanılmaktadır? + +2. Binary search tree'de arama yapmanın average case time complexity'si nedir? + + Cevap: O(log(n)). + +3. Binary search tree yapısını kod olarak yazınız. + + Not: "class" yapısını kullanmanız size yardımcı olabilir. + + Cevap: + + ````python + # Class tanımlamaları + class Node: + """Ağaçtaki noktayı temsil eder""" + def __init__(self, data=None): + self.data = data + self.right = None + self.left = None + + def add_left(self, data=None): + new = Node(data) + self.left = new + return new + + def add_right(self, data=None): + new = Node(data) + self.right = new + return new + + def __str__(self): + return str(self.data) + + class BinarySearchTree: + """Ağacı temsil eder""" + def __init__(self, root=None): + self.root = root + + def add_node(self, new_data): + """Ağaca yeni bir eleman ekler""" + # root yoksa yeni veri ağaca root olarak eklenir + if not self.root: + self.root = Node(new_data) + return + + current = self.root + while True: + # eklenecek veri zaten mevcut + if new_data == current.data: + return + # eklenecek veri sol tarafa eklenecek + elif new_data < current.data: + if not current.left: + current.add_left(new_data) + return + else: + current = current.left + # eklenecek veri sağ tarafa eklenecek + else: + if not current.right: + current.add_right(new_data) + return + else: + current = current.right + + def print_tree(self): + """Ağacı yazdırır""" + def preorder_depths(root): + preorder_depth(root, 0) + + def preorder_depth(root, depth): + if root: + print(" "*2*depth + str(root.data)) + preorder_depth(root.left, depth+1) + preorder_depth(root.right, depth+1) + + preorder_depths(self.root) + + # Örnek kullanım + tree = BinarySearchTree() + + sayilar = [3, 15, 5, 7, 8, 20, 25] + for sayi in sayilar: + tree.add_node(sayi) + + tree.print_tree() + ```` + + + +# Ücretsiz Kaynak + +* [Medium paylaşımı](https://tsafaelmali.medium.com/binary-search-tree-nedir-2e6fb0621d9) linkine giderek binary search tree anlatımına bakabilirsiniz. + From 3af702adbbf1d5b90265ae466aac0c5438cb0428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sun, 12 Sep 2021 18:05:18 +0300 Subject: [PATCH 31/32] =?UTF-8?q?genel=20d=C3=BCzenleme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../algoritma-analiz/readme.md | 2 +- .../algoritma-nedir/readme.md | 4 +-- veri-yapilari-algoritmalar/array/readme.md | 6 ++++ veri-yapilari-algoritmalar/big-o/readme.md | 4 ++- .../bilgi-ifade/readme.md | 6 ++-- .../binary-search-tree/readme.md | 12 +++++--- .../binary-search/readme.md | 2 +- .../hash-table/readme.md | 8 ++++-- .../insertion-sort/readme.md | 4 +++ .../linear-search/readme.md | 6 +++- .../linked-list-array/readme.md | 2 +- .../merge-sort/readme.md | 6 ++-- .../quick-sort/readme.md | 8 +++--- .../ram-model/readme.md | 2 +- .../recursion/readme.md | 28 +++++++++++++++++++ .../searching/readme.md | 8 ++++-- veri-yapilari-algoritmalar/stack/readme.md | 19 ++++++++++++- .../time-complexity/readme.md | 2 +- 18 files changed, 102 insertions(+), 27 deletions(-) diff --git a/veri-yapilari-algoritmalar/algoritma-analiz/readme.md b/veri-yapilari-algoritmalar/algoritma-analiz/readme.md index cc2f87ffd..5de0a24d2 100644 --- a/veri-yapilari-algoritmalar/algoritma-analiz/readme.md +++ b/veri-yapilari-algoritmalar/algoritma-analiz/readme.md @@ -14,7 +14,7 @@ Duruma göre bu kriterlerden bazıları daha önem kazanabilir. Örneğin, bir p ### Programın çalışma zamanı -Programın çalışma zamanı denilince akla ilk başta programın kaç saniyede çalıştığı gelebilir. Ancak bu göreceli bir ifadedir ve yerine göre çok farklı değerler alabilir. Bir programın kaç saniyede çalıştığı; programlama dilinden programlama diline, bilgisayardan bilgisayara hatta aynı bilgisayarda farklı zamanlarda çalıştırıldığında bile değişiklik gösterebilir. Bu sebeple çalışma zamanı girdi sayısı ile çalışma süresinin ilişkisi incelenerek bulunur. Bu şekilde evrensel bir çalışma zamanı ifadesi elde edilir. +Programın çalışma zamanı denilince akla ilk başta programın kaç saniyede çalıştığı gelebilir. Ancak bu göreceli bir ifadedir ve yerine göre çok farklı değerler alabilir. Bir programın kaç saniyede çalıştığı; programlama dilinden programlama diline, bilgisayardan bilgisayara hatta aynı bilgisayarda farklı zamanlarda çalıştırıldığında bile değişiklik gösterebilir. Bu sebeple çalışma zamanı **girdi sayısı ile çalışma süresinin ilişkisi** incelenerek bulunur. Bu şekilde **evrensel** bir çalışma zamanı ifadesi elde edilir. diff --git a/veri-yapilari-algoritmalar/algoritma-nedir/readme.md b/veri-yapilari-algoritmalar/algoritma-nedir/readme.md index 544a10a5f..2d4ba9eab 100644 --- a/veri-yapilari-algoritmalar/algoritma-nedir/readme.md +++ b/veri-yapilari-algoritmalar/algoritma-nedir/readme.md @@ -24,7 +24,7 @@ Bir algoritmayı görselleştirmek için kullanılan bloklar bütününe **akı Akış şemasında bloklar yapılacak işlemleri ve sorulacak soruları, oklar ise bir işlemden hangi işleme geçileceğini gösterir. Örnek bir akış şeması olarak "**bir lambanın çalışmaması**" probleminin çözüm algoritması aşağıda gösterilmiştir: -![](C:\CE\Career\Patika_dev\staj\veri_yapilari_algoritmalar\taskforce\veri-yapilari-algoritmalar\algoritma-nedir\figures\lamba_algoritma.jpg) +![](https://raw.githubusercontent.com/yigitatesh/Kodluyoruz/main/figures/veri-yapilari-algoritmalar/lamba_algoritma.jpg) Görüldüğü gibi sorun çözülene kadar farklı işlemler yapılıyor ve sorun çözüldüğünde işlemler bitiriliyor. @@ -61,5 +61,5 @@ Görüldüğü gibi sorun çözülene kadar farklı işlemler yapılıyor ve sor # Ücretsiz Kaynak -Algoritma hakkında daha çok bilgi edinmek için https://tr.wikipedia.org/wiki/Algoritma sayfasına göz atabilirsiniz. +* Algoritma hakkında daha çok bilgi edinmek için https://tr.wikipedia.org/wiki/Algoritma sayfasına göz atabilirsiniz. diff --git a/veri-yapilari-algoritmalar/array/readme.md b/veri-yapilari-algoritmalar/array/readme.md index f8f3b973a..c9a94bfea 100644 --- a/veri-yapilari-algoritmalar/array/readme.md +++ b/veri-yapilari-algoritmalar/array/readme.md @@ -17,7 +17,13 @@ Görüldüğü gibi bir array'e, tüm boşlukları dolu iken yeni bir veri eklem # Sorular 1. Kapasitesi dolmuş bir array'e yeni bir veri eklerken neden array başka bir alana kopyalanır? + + Cevap: Array yapısı hafızada bitişik bir şekilde saklandığından dolayı array'in boyutu büyütülmek istendiğinde, hafızada başka bir yerde boş bir blok bulunmalı ve array elemanları oraya kopyalanmalıdır. + 2. Bir array'de sırası bilinen bir elemana ulaşmak neden çok hızlıdır? + + Cevap: Çünkü array yapısı hafızada bitişik olarak tutulur ve her elemanın nerede olduğu ilk elemanın yerine bakılarak bulunabilir. + 3. Gerçek hayattan bir array örneği veriniz. diff --git a/veri-yapilari-algoritmalar/big-o/readme.md b/veri-yapilari-algoritmalar/big-o/readme.md index eeebba09f..5646c454e 100644 --- a/veri-yapilari-algoritmalar/big-o/readme.md +++ b/veri-yapilari-algoritmalar/big-o/readme.md @@ -8,7 +8,9 @@ Big-O notasyonu, bir algoritmanın çalışma zamanının standartlaştırılmı Bir isim array'inde isimler a'dan z'ye sıralı ise isimleri baştan sona aramamıza gerek yoktur. İlk önce array'in ortasına bakarız ve oradaki isim aradığımız isimden önce geliyorsa array'in sağ tarafında aramaya devam ederiz. Her seferinde bu şekilde ikiye bölerek array'in çoğu kısmını aramamış ve arama işlemini çok daha hızlandırmış oluruz. Her seferinde ikiye böldüğümüz için buradaki worst case, "2^x = n" işleminde x'in bulunmasıyla elde edilir. Bu işlemde "x" sayısı ise "log(n)" sayısına eşittir. Böylece bu işlemin zamanını "**O(log(n))**" olarak bulmuş oluruz. Bu işlem zamanına "**logaritmik zaman**" denir. -Bir programda bir döngü ve o döngünün içinde de bir döngü varsa ve her döngü "n" iterasyon yapıyorsa bu programın zamanı "**O(nxn) = O(n^2)**" olur. +Bir programda bir döngü ve o döngünün içinde de bir döngü varsa ve her döngü "n" iterasyon yapıyorsa bu programın zamanı "**O(nxn) = O(n^2)**" olur. Bu duruma ise "**karesiyle ilişkili zaman**" denir. + +Aşağıda bazı Big-O notasyonu kuralları verilmiştir: * Big-O notasyonunda katsayılar ihmal edilir. diff --git a/veri-yapilari-algoritmalar/bilgi-ifade/readme.md b/veri-yapilari-algoritmalar/bilgi-ifade/readme.md index 84a611340..d210c0df0 100644 --- a/veri-yapilari-algoritmalar/bilgi-ifade/readme.md +++ b/veri-yapilari-algoritmalar/bilgi-ifade/readme.md @@ -10,6 +10,8 @@ Bilgisayarda tüm bilgiler sadece **0** ve **1** sembollerini kullanılarak ifad Biz insanlar bilgiyi ifade etmek için birçok sembol kullanırız. Örneğin; "araba" gibi bir yazıyı ifade etmek için harfleri, "42" gibi bir sayıyı ifade etmek için sayıları, bir resmi ifade etmek için ise renkleri kullanırız. Bilgisayarlar ise aklınıza gelebilecek her bilgiyi 0 ve 1 sembollerini kullanarak ifade eder. Örneğin; bir resim bilgisayar için bir pikseller bütünüdür ve her piksel de kırmızı, yeşil ve mavi renklerinin belli oranlarda karışımından oluşur. Bilgisayar, pikselleri resimdeki sırasıyla tutar ve her pikseli de 3 tane sayı olarak tutar. +Sonuç olarak, biz insanlar farklı türden bilgileri ifade etmek için birçok sembol ve yöntem kullanırız. Bilgisayarlar ise her türlü bilgiyi 0 ve 1 sembollerini kullanarak ifade eder. + # Sorular @@ -22,11 +24,11 @@ Biz insanlar bilgiyi ifade etmek için birçok sembol kullanırız. Örneğin; " Cevap: Transistör -3. +3. Bilgisayarlar bir harfi nasıl ifade edebilir? Araştırınız. # Ücretsiz Kaynak - +* [Bilginin ifadesi slaytı](https://slideplayer.biz.tr/slide/2798593/) linkindeki slayta göz atabilirsiniz. diff --git a/veri-yapilari-algoritmalar/binary-search-tree/readme.md b/veri-yapilari-algoritmalar/binary-search-tree/readme.md index 4a9114f35..85751a175 100644 --- a/veri-yapilari-algoritmalar/binary-search-tree/readme.md +++ b/veri-yapilari-algoritmalar/binary-search-tree/readme.md @@ -6,22 +6,26 @@ Binary search tree, her noktanın en fazla iki alt noktası olan, soldaki noktan - +![](https://raw.githubusercontent.com/yigitatesh/Kodluyoruz/main/figures/veri-yapilari-algoritmalar/binary_search_tree.jpg) -Dengeli bir ağacın derinliği "log(n)" olacağından dolayı yeni bir eleman ekleme işleminin time complexity'si de "**O(log(n))**" olur. +Yukarıdaki ağaç dengeli bir ağaçtır. Dallanmalar neredeyse eşit olarak dağılmıştır. Dengeli bir ağacın derinliği "log(n)" olacağından dolayı yeni bir eleman ekleme işleminin time complexity'si de "**O(log(n))**" olur. -Eğer ağaç dengeli değilse worst case durumu ortaya çıkar. Ağaca ekleme yapma, eleman arama gibi işlemlerin time complexity'si de "**O(n)**" olur. Aşağıda dengesiz bir ağaç gösterilmektedir: +Eğer ağaç dengeli değilse worst case durumu ortaya çıkar. Ağaca ekleme yapma, eleman arama gibi işlemlerin time complexity'si de "**O(n)**" olur. Aşağıda dengesiz bir ağaç vardır: - +![](https://raw.githubusercontent.com/yigitatesh/Kodluyoruz/main/figures/veri-yapilari-algoritmalar/unbalanced_binary_search_tree.jpg) Yukarıdaki ağaç yapısının bir array'den farkı yoktur ve performansı iyi değildir. Ancak ağaçları dengeli yapıda tutmak için birçok performanslı algoritma vardır ve bu problem çözülmüştür. +**Ekstra bilgi**: Mors alfabesinin de aslında bir binary search tree yapısında olduğunu biliyor muydunuz. + # Sorular 1. Binary search tree gerçek hayatta kullanılır mı? Kullanılıyorsa nerelerde kullanılmaktadır? + Cevap: Binary search tree performansından dolayı birçok alanda kullanılmaktadır. Programlama dillerinde derleyiciler, "map" ve "set" veri yapıları, veri tabanları bu alanlara örnek olarak verilebilir. + 2. Binary search tree'de arama yapmanın average case time complexity'si nedir? Cevap: O(log(n)). diff --git a/veri-yapilari-algoritmalar/binary-search/readme.md b/veri-yapilari-algoritmalar/binary-search/readme.md index ffb21f331..142150c8d 100644 --- a/veri-yapilari-algoritmalar/binary-search/readme.md +++ b/veri-yapilari-algoritmalar/binary-search/readme.md @@ -44,6 +44,6 @@ Her defasında array 2'ye bölündüğü için "n" elemanlı bir dizide aramak " # Ücretsiz Kaynak -* [CS50x videosu](https://www.youtube.com/watch?v=jjqgP9dpD1k) linkindeki videonun 22.00 dakikasındaki kısmından searching algoritmalarının eğlenceli bir anlatımını izleyebilirsiniz. +* [CS50 Kodluyoruz videosu](https://www.youtube.com/watch?v=jjqgP9dpD1k) linkindeki videonun 22.00 dakikasındaki kısmından searching algoritmalarının eğlenceli bir anlatımını izleyebilirsiniz. * [Youtube videosu](https://www.youtube.com/watch?v=E6IOrZUpvSE) linkinden binary search algoritmasının animasyonunu izleyebilirsiniz. diff --git a/veri-yapilari-algoritmalar/hash-table/readme.md b/veri-yapilari-algoritmalar/hash-table/readme.md index bc1c6c337..0f6165e7d 100644 --- a/veri-yapilari-algoritmalar/hash-table/readme.md +++ b/veri-yapilari-algoritmalar/hash-table/readme.md @@ -14,10 +14,12 @@ Array'i hatırlayacak olursak her elemanın bir indeksi yani sırası vardı. Ö 1. Gerçek hayattan bir hash table veri yapısı örneği veriniz. -3. Hash table yapısında iki farklı anahtar aynı indekse denk gelebilir mi? + Cevap: Telefon rehberi bir örnektir. İsimler anahtar, telefon numaraları da değerlerdir. + +2. Hash table yapısında iki farklı anahtar aynı indekse denk gelebilir mi? Cevap: Evet, denk gelebilir. Örneğin, hash function harflerin ASCII değerlerini topluyorsa "kara" ve "akar" sözcüklerinin indeks değerleri aynı olacaktır. - + 3. ````python cumle = "iki kere iki dört eder" ```` @@ -32,7 +34,7 @@ Array'i hatırlayacak olursak her elemanın bir indeksi yani sırası vardı. Ö for kelime in kelime_listesi: # kelime hash table'da varsa sayısını bir artır - if hash_table[kelime]: + if kelime in hash_table: hash_table[kelime] += 1 # kelime hash table'da yoksa kelimeyi sayısı 1 olacak şekilde ekle else: diff --git a/veri-yapilari-algoritmalar/insertion-sort/readme.md b/veri-yapilari-algoritmalar/insertion-sort/readme.md index af815b4d6..040cad3cd 100644 --- a/veri-yapilari-algoritmalar/insertion-sort/readme.md +++ b/veri-yapilari-algoritmalar/insertion-sort/readme.md @@ -20,6 +20,8 @@ Bu sorting algoritmasında, tüm array "n" kez dolaşılır ve ilk dolaşmada "n Bildiğimiz gibi algoritmalarda ne kadar ekstra hafızanın kullanıldığı yani "space complexity" de önemlidir. Space complexity'de kullanılan ekstra hafıza yazılır. Selection sort işleminde verilen array üzerinde yani "in-place" işlemler yapıldığı için ekstra hafıza kullanılmaz. Bu yüzden, bu algoritmanın space complexity'si "**O(1)**" yani "**constant space**" olarak bulunur. + + # Sorular 1. Selection sort'un best case ve worst case'leri farklı mıdır? @@ -28,6 +30,8 @@ Bildiğimiz gibi algoritmalarda ne kadar ekstra hafızanın kullanıldığı yan 2. Sizce "O(n^2)" bir sorting algoritması için iyi bir time complexity midir? + Cevap: O(n^2) complexity'si n sayısı arttıkça fazlaca büyür. Bu yüzden yeterince iyi değildir ve daha iyi algoritmalar vardır. + 3. Selection sort algoritmasını kod olarak yazınız. Cevap: diff --git a/veri-yapilari-algoritmalar/linear-search/readme.md b/veri-yapilari-algoritmalar/linear-search/readme.md index 5f74d0e5c..2cabd8086 100644 --- a/veri-yapilari-algoritmalar/linear-search/readme.md +++ b/veri-yapilari-algoritmalar/linear-search/readme.md @@ -41,8 +41,12 @@ Bu listede "8" sayısının olup olmadığını öğrenmek için tüm elemanlar if eleman == i: return True return False + + # örnek kullanım + liste = [1, 5, 2, 8, 4] + print(ara(8, liste)) ```` - + # Ücretsiz Kaynak diff --git a/veri-yapilari-algoritmalar/linked-list-array/readme.md b/veri-yapilari-algoritmalar/linked-list-array/readme.md index c80187284..fbc010be5 100644 --- a/veri-yapilari-algoritmalar/linked-list-array/readme.md +++ b/veri-yapilari-algoritmalar/linked-list-array/readme.md @@ -15,7 +15,7 @@ 1. Bir sayı listesi oluşturulacaksa ve bu listenin eleman sayısı sabit ise linked list mi yoksa array mi kullanmak daha mantıklı olur? - Cevap: Array çünkü ekstra bir eleman eklenilmeyecek ve çıkarılmayacak. + Cevap: Array kullanmak daha mantıklı olur çünkü ekstra bir eleman eklenilmeyecek ve çıkarılmayacak. 2. Genel olarak hangi veri yapısı daha fazla yer kaplar? diff --git a/veri-yapilari-algoritmalar/merge-sort/readme.md b/veri-yapilari-algoritmalar/merge-sort/readme.md index 0fd8c4415..16ab80fc1 100644 --- a/veri-yapilari-algoritmalar/merge-sort/readme.md +++ b/veri-yapilari-algoritmalar/merge-sort/readme.md @@ -2,11 +2,11 @@ ## Merge Sort -Merge sort, hız kazandırmak için "parçala-birleştir" yöntemi kullanan bir sorting algoritmasıdır. İlk önce array 2'ye bölünerek küçük array'lere ayrılır. Sonra da bu array'ler sıralanarak birleştirilir. +Merge sort, hız kazandırmak için "**parçala-fethet**" (divide and conquer) yöntemi kullanan bir sorting algoritmasıdır. İlk önce array 2'ye bölünerek küçük array'lere ayrılır. Sonra da bu array'ler sıralanarak birleştirilir. - +![](https://raw.githubusercontent.com/yigitatesh/Kodluyoruz/main/figures/veri-yapilari-algoritmalar/merge_sort.PNG) Yukarıda görüldüğü gibi array 2'ye bölünerek 1 elemanlı array'lere ayrılmıştır. Ondan sonra ise sıralanarak birleştirme işlemi yapılmıştır. Örneğin, sol orta kısımda 38 ve 27 sayısı birleştirilmiş, [27, 38] şeklinde bir array elde edilmiştir. Sonra bu 2 elemanlı array'ler de sıralanarak birleştirilir. Buradaki avantaj, sıralanmış küçük array'lerin sıralanarak birleştirilmesidir. Zaten sıralı olduğu bilinen array'lerin karşılaştırılması daha kolaydır. @@ -24,6 +24,8 @@ Yukarıda görüldüğü gibi array 2'ye bölünerek 1 elemanlı array'lere ayr 2. Merge sort algoritmasının space complexity'si nedir? Araştırınız. + Cevap: O(n). + 3. Merge sort algoritmasını kod olarak yazınız. Cevap: diff --git a/veri-yapilari-algoritmalar/quick-sort/readme.md b/veri-yapilari-algoritmalar/quick-sort/readme.md index 7625482b9..3abef22f5 100644 --- a/veri-yapilari-algoritmalar/quick-sort/readme.md +++ b/veri-yapilari-algoritmalar/quick-sort/readme.md @@ -2,11 +2,11 @@ ## Quick Sort -Quick sort, array'den her seferinde bir pivot eleman seçilip pivot elemandan küçük olan sayıları sol array'e, pivot elemandan büyük olan sayıları sağ array'e koyduğumuz ve bu işlemin devam ettiği bir sorting algoritmasıdır. +Quick sort, array'den her seferinde bir pivot eleman seçilip, pivot elemandan küçük olan sayıları sol array'e, pivot elemandan büyük olan sayıları sağ array'e konulduğu ve bu işlemin sağ ve sol array için tekrarlandığı sorting algoritmasıdır. - +![](https://raw.githubusercontent.com/yigitatesh/Kodluyoruz/main/figures/veri-yapilari-algoritmalar/quick_sort.jpg) Yukarıda görüldüğü gibi bir pivot eleman seçilir ve bu elemana göre array 2'ye bölünür. @@ -14,9 +14,9 @@ Yukarıda görüldüğü gibi bir pivot eleman seçilir ve bu elemana göre arra ### Time complexity -Quick sort algoritması da "parçala-birleştir" yöntemini kullanır. Array'in eleman sayısına "n" diyelim. Her array 2'ye bölündüğünde yaklaşık "n" tane karşılaştırma yapılır. Array'lerin her seferinde tam olarak 2'ye bölündüğünü varsayarsak toplam bölünme sayısı "log(n)" olacaktır ve bu da "average case" olacaktır. Sonuç olarak, quick sort algoritmasının **average case** time complexity'si "**O(n x log(n))**" olur. +Quick sort algoritması da "**parçala-fethet**" yöntemini kullanır. Array'in eleman sayısına "n" diyelim. Her array 2'ye bölündüğünde yaklaşık "n" tane karşılaştırma yapılır. Array'lerin her seferinde tam olarak 2'ye bölündüğünü varsayarsak toplam bölünme sayısı "log(n)" olacaktır ve bu da "average case" olacaktır. Sonuç olarak, quick sort algoritmasının **average case** time complexity'si "**O(n x log(n))**" olur. -Peki worst case'i nedir? Her seferinde array'in tüm elemanlarının sağ tarafa bölündüğünü düşünelim. Her seferinde pivot elemana göre sıralama yapıldığı için pivot ortada ve geri kalan array sağda kalacaktır. Bu durumda toplam "n" tane array bölünmesi yapılacak ve her bölünmede "n" karşılaştırma olacağından **worst case** time complexity'si "**O(n^2)**" olacaktır. Ancak genelde bu durum gözlenmediğinden dolayı bu algoritmanın genel performansı "O(n x log(n))" olacaktır. +Peki worst case'i nedir? Her seferinde array'in tüm elemanlarının sağ tarafa bölündüğünü düşünelim. Her seferinde pivot elemana göre sıralama yapıldığı için pivot ortada ve geri kalan array sağda kalacaktır. Bu durumda toplam "n" tane array bölünmesi yapılacak ve her bölünmede "n" karşılaştırma olacağından **worst case** time complexity'si "**O(n^2)**" olacaktır. Ancak genelde bu durum gözlenmediğinden dolayı bu algoritmanın genel performansı "**O(n x log(n))**" olacaktır. diff --git a/veri-yapilari-algoritmalar/ram-model/readme.md b/veri-yapilari-algoritmalar/ram-model/readme.md index 111f4160f..7b4edb63c 100644 --- a/veri-yapilari-algoritmalar/ram-model/readme.md +++ b/veri-yapilari-algoritmalar/ram-model/readme.md @@ -32,5 +32,5 @@ RAM'i kullanarak algoritmaları analiz edebileceğiz. # Ücretsiz Kaynak - +* [Algoritma analizleri](http://cagataykiziltan.net/programin-calisma-hizi-ve-algoritma-verimliligi/zaman-karmasikligi-ve-buyuk-o-notasyonu-time-complexity-and-big-o-notation/) linkine giderek algoritma analizini inceleyebilirsiniz. diff --git a/veri-yapilari-algoritmalar/recursion/readme.md b/veri-yapilari-algoritmalar/recursion/readme.md index 9016352e7..5af954db5 100644 --- a/veri-yapilari-algoritmalar/recursion/readme.md +++ b/veri-yapilari-algoritmalar/recursion/readme.md @@ -25,18 +25,46 @@ Bir problem kendi içinde tekrar ediyorsa bu problem "**recursive**" yani "**öz 2. Özyinelemeli fonksiyonlarda "base case" nedir ve neden gereklidir? Araştırınız. + Cevap: Bir özyinelemeli fonksiyonda Base case yoksa o fonksiyon çalıştırıldığında bilgisayarın hafızası dolana kadar ya da programlama dilinin sınırı aşılana kadar çalışır. Sonra da program kapanır. Base case bir özyinelemeli fonksiyonun belli bir duruma durdurulması için gereklidir. + 3. [Fibonacci problemi](https://www.hackerrank.com/challenges/ctci-fibonacci-numbers/problem) linkine giderek istenilen Fibonacci sayısını veren fonksiyonu recursion kullanarak yazınız. # Ücretsiz Kaynak +* [Youtube videosu](https://www.youtube.com/watch?v=Mv9NEXX1VHc) linkine giderek recursion anlatımını izleyebilirsiniz. + # Ödev 1 Bu ödevde, girilen yazının harflerinin ASCII değerlerini ikili sistemde yazacak bir program yazmanız istenmekte. Örneğin; "BABA" yazısı girildiyse çıktı "1000010 1000001 1000010 1000001" olmalıdır. +Örneğin; + +````python +print(decimal_to_binary("B")) +```` + +Kodu çalıştırıldığında şu çıktı verilmeli: + +````python +1000010 +```` + +Alttaki kod çalıştırıldığında ise: + +````python +text_to_binary("BABA") +```` + +Şu çıktı verilmeli: + +````python +1000010 1000001 1000010 1000001 +```` + Not: Öncelikle verilen ondalık sayıyı ikili sistem sayısına dönüştüren ve bu sayıyı string olarak dönen bir fonksiyon yazın. Bundan sonra ise verilen yazının harflerinin ASCII değerlerini ikili sistemde yazacak fonksiyonu yazın. Cevap: diff --git a/veri-yapilari-algoritmalar/searching/readme.md b/veri-yapilari-algoritmalar/searching/readme.md index 3b0e02fb8..d928aaca7 100644 --- a/veri-yapilari-algoritmalar/searching/readme.md +++ b/veri-yapilari-algoritmalar/searching/readme.md @@ -4,15 +4,19 @@ Searching (arama), bir dizide belirli bir elemanın aranması işlemidir. Bu işlemin hızı algoritma kullanımına göre çok fark edebilir. +Searching işlemi çok sık kullanılan bir işlemdir. Bir veri tabanında istediğimiz veriyi bulma, bilgisayarımızda bir dosya arama, Google'da arama yapma gibi birçok örnek verilebilir. -# Sorular +# Sorular +1. Gerçek hayattan bir searching örneği veriniz. +2. Alfabetik olarak sıralanmış bir sözlükte mi yoksa tüm kelimelerin yerlerinin rastgele olduğu bir sözlükte mi arama yapmak daha kolaydır? Açıklayınız. +3. Searching algoritmalarını araştırınız. # Ücretsiz Kaynak - +* [Searching algoritmaları](https://medium.com/@enesates03/arama-algoritmalar%C4%B1-search-algorithms-nedir-7c8be09d541a) linkine giderek searching nedir ve hangi algoritmalar vardır inceleyebilirsiniz. diff --git a/veri-yapilari-algoritmalar/stack/readme.md b/veri-yapilari-algoritmalar/stack/readme.md index 6fea4ba77..67dfc5e41 100644 --- a/veri-yapilari-algoritmalar/stack/readme.md +++ b/veri-yapilari-algoritmalar/stack/readme.md @@ -8,13 +8,30 @@ Stack (**yığın**), tek taraftan ekleme ve çıkarma yapılabilen bir veri yap Bu veri yapısının kullanışlı olduğu yerlerden biri, işlemlerin önceliklerinin farklı olduğu bir işlem listesidir. Önceliği yüksek olan işlemler en üst sıralarda yer alır ve en önce bitirilir. Çok önemli olmayan işlemler ise en alt sıralarda kalır ve en son bitirilir. + + # Sorular 1. Gerçek hayattan bir stack veri yapısı örneği veriniz. + 2. [Hackerrank problemi](https://www.hackerrank.com/challenges/maximum-element/problem) linkine giderek stack problemini çözünüz. -3. +3. Bir Python liste veri yapısını stack olarak kullanmak istersek push ve pop işlemlerini nasıl yapabiliriz, kod yazarak gösteriniz. + + Cevap: + + ````python + # stack adında bir liste oluşturalım + stack = [1, 3, 5] + + # push işlemi için "append" metodunu kullanabiliriz + stack.append(7) # stack = [1, 3, 5, 7] + + # pop işlemi için yine "pop" metodunu kullanabiliriz + stack.pop() # stack = [1, 3, 5] + ```` + # Ücretsiz Kaynak diff --git a/veri-yapilari-algoritmalar/time-complexity/readme.md b/veri-yapilari-algoritmalar/time-complexity/readme.md index db2e0d6b4..e1442d44e 100644 --- a/veri-yapilari-algoritmalar/time-complexity/readme.md +++ b/veri-yapilari-algoritmalar/time-complexity/readme.md @@ -30,5 +30,5 @@ Time complexity, farklı girdiler için farklı olabilir. Örneğin, isimlerden # Ücretsiz Kaynak - +* [Time complexity](https://tr.ilusionity.com/216-what-is-big-o-notation-explained-space-and-time-complexity) linkine giderek time complexity ve algoritma analizi hakkında bilgi edinebilirsiniz. From 88a8760b1852ddf6758a1236a41d1dea884af520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Yi=C4=9Fit=20Ate=C5=9F?= Date: Sun, 12 Sep 2021 19:09:04 +0300 Subject: [PATCH 32/32] =?UTF-8?q?=C3=B6devler=20eklendi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- veri-yapilari-algoritmalar/big-o/readme.md | 6 + .../binary-search-tree/readme.md | 202 +++++++++++------- .../hash-collision/readme.md | 52 +++++ .../quick-sort/readme.md | 33 +++ .../recursion/readme.md | 43 ++++ 5 files changed, 254 insertions(+), 82 deletions(-) diff --git a/veri-yapilari-algoritmalar/big-o/readme.md b/veri-yapilari-algoritmalar/big-o/readme.md index 5646c454e..c244877cb 100644 --- a/veri-yapilari-algoritmalar/big-o/readme.md +++ b/veri-yapilari-algoritmalar/big-o/readme.md @@ -57,3 +57,9 @@ Aşağıda bazı Big-O notasyonu kuralları verilmiştir: * [Medium paylaşımı 1](https://medium.com/kodcular/nedir-bu-big-o-notation-b8b9f1416d30) ve [Medium paylaşımı 2](https://medium.com/@sgoksel/algoritma-analizi-ve-big-o-notasyonu-3b7aefa8a051) linklerinden Big-O notasyonu hakkında bilgi edinebilirsiniz. + + +# Ödev 4 + +O(1), O(log(n)), O(n), O(n x log(n), O(n^2), O(n^2 x log(n)), O(n^3) time complexity değerleri için birer örnek bulunuz. + diff --git a/veri-yapilari-algoritmalar/binary-search-tree/readme.md b/veri-yapilari-algoritmalar/binary-search-tree/readme.md index 85751a175..6678e89a5 100644 --- a/veri-yapilari-algoritmalar/binary-search-tree/readme.md +++ b/veri-yapilari-algoritmalar/binary-search-tree/readme.md @@ -30,88 +30,7 @@ Yukarıdaki ağaç yapısının bir array'den farkı yoktur ve performansı iyi Cevap: O(log(n)). -3. Binary search tree yapısını kod olarak yazınız. - - Not: "class" yapısını kullanmanız size yardımcı olabilir. - - Cevap: - - ````python - # Class tanımlamaları - class Node: - """Ağaçtaki noktayı temsil eder""" - def __init__(self, data=None): - self.data = data - self.right = None - self.left = None - - def add_left(self, data=None): - new = Node(data) - self.left = new - return new - - def add_right(self, data=None): - new = Node(data) - self.right = new - return new - - def __str__(self): - return str(self.data) - - class BinarySearchTree: - """Ağacı temsil eder""" - def __init__(self, root=None): - self.root = root - - def add_node(self, new_data): - """Ağaca yeni bir eleman ekler""" - # root yoksa yeni veri ağaca root olarak eklenir - if not self.root: - self.root = Node(new_data) - return - - current = self.root - while True: - # eklenecek veri zaten mevcut - if new_data == current.data: - return - # eklenecek veri sol tarafa eklenecek - elif new_data < current.data: - if not current.left: - current.add_left(new_data) - return - else: - current = current.left - # eklenecek veri sağ tarafa eklenecek - else: - if not current.right: - current.add_right(new_data) - return - else: - current = current.right - - def print_tree(self): - """Ağacı yazdırır""" - def preorder_depths(root): - preorder_depth(root, 0) - - def preorder_depth(root, depth): - if root: - print(" "*2*depth + str(root.data)) - preorder_depth(root.left, depth+1) - preorder_depth(root.right, depth+1) - - preorder_depths(self.root) - - # Örnek kullanım - tree = BinarySearchTree() - - sayilar = [3, 15, 5, 7, 8, 20, 25] - for sayi in sayilar: - tree.add_node(sayi) - - tree.print_tree() - ```` +3. Binary search tree yapısının mantığını kullanan "heap sort" algoritmasını araştırınız. @@ -119,3 +38,122 @@ Yukarıdaki ağaç yapısının bir array'den farkı yoktur ve performansı iyi * [Medium paylaşımı](https://tsafaelmali.medium.com/binary-search-tree-nedir-2e6fb0621d9) linkine giderek binary search tree anlatımına bakabilirsiniz. + + +# Ödev 6 + +Binary search tree yapısını kod olarak yazınız. + +Not: Ağacın noktaları için "Node" adında bir "class" yapısı kullanabilirsiniz. + +Örnek kullanımlar aşağıdaki kod üzerinde gösterilmiştir: + +````python +# ağacın sınıf üzerinden oluşturulması +tree = BinarySearchTree() + +# sayıların ağaca eklenmesi +sayilar = [6, 15, 5, 2, 7, 8, 1, 25] +for sayi in sayilar: + tree.add_node(sayi) + +# ağacın "preorder" şeklinde yazdırılması +tree.print_tree() +```` + +Yukarıdaki ağaç yazdırıldığında şöyle bir çıktı alınmalıdır: + +```` +6 + 5 + 2 + 1 + 15 + 7 + 8 + 25 +```` + + + +Cevap: + +````python +# Class tanımlamaları +class Node: + """Ağaçtaki noktayı temsil eder""" + def __init__(self, data=None): + self.data = data + self.right = None + self.left = None + + def add_left(self, data=None): + """noktanın soluna yeni veri ekler""" + new = Node(data) + self.left = new + return new + + def add_right(self, data=None): + """noktanın sağına yeni veri ekler""" + new = Node(data) + self.right = new + return new + + +class BinarySearchTree: + """Ağacı temsil eder""" + def __init__(self, root=None): + self.root = root + + def add_node(self, new_data): + """Ağaca yeni bir eleman ekler""" + # root yoksa yeni veri ağaca root olarak eklenir + if not self.root: + self.root = Node(new_data) + return + + # ağacı dolaşmaya kökten (root) başlanır + current = self.root + while True: + # eklenecek veri zaten mevcut + if new_data == current.data: + return + # eklenecek veri sol tarafa eklenecek + elif new_data < current.data: + if not current.left: + current.add_left(new_data) + return + else: + current = current.left + # eklenecek veri sağ tarafa eklenecek + else: + if not current.right: + current.add_right(new_data) + return + else: + current = current.right + + def print_tree(self): + """Ağacı yazdırır""" + def preorder_depths(root): + # derinlik 0'dan başlar + preorder_depth(root, 0) + + def preorder_depth(root, depth): + if root: + print(" "*2*depth + str(root.data)) + preorder_depth(root.left, depth+1) + preorder_depth(root.right, depth+1) + + preorder_depths(self.root) + +# Örnek kullanım +tree = BinarySearchTree() + +sayilar = [6, 15, 5, 2, 7, 8, 1, 25] +for sayi in sayilar: + tree.add_node(sayi) + +tree.print_tree() +```` + diff --git a/veri-yapilari-algoritmalar/hash-collision/readme.md b/veri-yapilari-algoritmalar/hash-collision/readme.md index 5074ed389..fa3a3fc0a 100644 --- a/veri-yapilari-algoritmalar/hash-collision/readme.md +++ b/veri-yapilari-algoritmalar/hash-collision/readme.md @@ -40,3 +40,55 @@ Hash collision arttıkça hash table'da ekleme, silme, arama işlemleri linked l # Ücretsiz Kaynak * [Hashing](https://yazilimdnyasi.wordpress.com/2020/02/14/hashing-nedir-veri-yapilari/) linkinde hash table ve hash collision hakkında bilgi edinebilirsiniz. + + + +# Ödev 3 + +Liste veri yapısını kullanarak "stack" ve "queue" veri yapılarını birer "class" olacak şekilde kod yazınız. + +Cevap: + +````python +class Stack: + """stack veri yapısı""" + def __init__(self, ilk_elemanlar=None): + self.veriler = [] + if ilk_elemanlar: + for i in ilk_elemanlar: + self.push(i) + + def push(self, veri): + self.veriler.append(veri) + + def pop(self): + if self.veriler: + return self.veriler.pop() + else: + return None + + def is_empty(self): + return self.veriler == [] + + +class Queue: + """queue veri yapısı""" + def __init(self, ilk_elemanlar=None): + self.veriler = [] + if ilk_elemanlar: + for i in ilk_elemanlar: + self.enqueue(i) + + def enqueue(self, veri): + self.veriler.append(veri) + + def dequeue(self): + if self.veriler: + return self.veriler.pop(0) + else: + return None + + def is_empty(self): + return self.veriler == [] +```` + diff --git a/veri-yapilari-algoritmalar/quick-sort/readme.md b/veri-yapilari-algoritmalar/quick-sort/readme.md index 3abef22f5..980c59da9 100644 --- a/veri-yapilari-algoritmalar/quick-sort/readme.md +++ b/veri-yapilari-algoritmalar/quick-sort/readme.md @@ -61,3 +61,36 @@ Peki worst case'i nedir? Her seferinde array'in tüm elemanlarının sağ tarafa * [Video](https://www.youtube.com/watch?v=XE4VP_8Y0BU) linkinden quick sort algoritmasının anlatımını izleyebilirsiniz. * [Video](https://www.youtube.com/watch?v=es2T6KY45cA) linkinden quick sort ve merge sort'un karşılaştırıldığı bir animasyonu izleyebilirsiniz. + + +# Ödev 5 + +Elimizde tam sayılardan oluşan ve sayı çeşidinin ve aralığının çok fazla olmadığı, aynı sayıların da bulunduğu ve en küçük sayı ile en büyük sayı arasında çok büyük bir farkın olmadığı, bir array olduğunu düşünelim. Bu array'i en hızlı şekilde nasıl sıralayabiliriz? + +Bu tip senaryolarda kullanılabilen "count sort" algoritmasını araştırınız ve kod olarak yazınız. + +Cevap: + +````python +def count_sort(array): + """count sort""" + # array'deki en küçük ve en büyük elemanları bulalım + kucuk = min(array) + buyuk = max(array) + + # elemanları ve sayılarını tutacak olan hash table'ı oluşturalım + hash_table = {i: 0 for i in range(kucuk, buyuk + 1)} + for i in array: + hash_table[i] += 1 + + # hash table'daki elemanları sayıları kadar olacak şekilde + # sırasıyla array'e "in-place" olarak yerleştirelim + i = 0 + for j in range(kucuk, buyuk + 1): + for _ in range(hash_table[j]): + array[i] = j + i += 1 + + return array +```` + diff --git a/veri-yapilari-algoritmalar/recursion/readme.md b/veri-yapilari-algoritmalar/recursion/readme.md index 5af954db5..1e0095112 100644 --- a/veri-yapilari-algoritmalar/recursion/readme.md +++ b/veri-yapilari-algoritmalar/recursion/readme.md @@ -96,3 +96,46 @@ def text_to_binary(yazi): text_to_binary("BABA") ```` + + +# Ödev 2 + +Verilen listeler listesini tamamen düz bir listeye çevirecek bir program yazınız. + +Örneğin, verilen listenin bir elemanı sayı diğer bir elemanı ise bir listeler listesi olabilir. + +Örnek olarak alttaki kod çalıştırıldığında: + +````python +liste = [[1, [4, 5]], [[[12, 13], 14]], 4, [3, 2], "a"] + +print(duzlestir(liste)) +```` + +Verilen çıktı şöyle olmalıdır: + +````python +[1, 4, 5, 12, 13, 14, 4, 3, 2, 'a'] +```` + +Cevap: + +````python +def duzlestir(liste): + """verilen bir iç içe listeyi tamamen düz bir listeye dönüştürür""" + duz_liste = [] + + for i in liste: + if type(i) == list: + # extend metodu sayesinde liste, bir liste ile genişletilebilir + duz_liste.extend(duzlestir(i)) + else: + duz_liste.append(i) + + return duz_liste + +# Örnek kullanım +lst = [[1, [4, 5]], [[[12, 13], 14]], 4, [3, 2], "a"] +print(duzlestir(lst)) +```` +

UF;~IJkFfhu})kA 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†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