Veri Yapıları ve Algoritmalar

8uVB...SiY3
6 Jan 2024
57

Veri yapısı, verilerin bilgisayar hafızasında düzenlenme şeklidir. Veri yapısı, verilerin nasıl depolandığını, düzenlendiğini ve erişildiğini belirler. Bazı yaygın veri yapıları arasında Diziler, Bağlı Listeler, Yığınlar, Kuyruklar, Hash Tabloları, Ağaçlar ve Grafikler bulunur.

Algoritma ise, belirli bir problemi çözmek veya belirli bir işlemi gerçekleştirmek için tasarlanmış bir dizi adımdır. Algoritmalar, veri yapılarındaki veriler üzerinde işlem yapar ve çeşitli görevleri gerçekleştirir. Örneğin, sıralama ve arama algoritmaları gibi.

Veri yapıları ve algoritmalar, birlikte kullanıldığında, verimli ve etkili programlama çözümleri oluşturur.


Veri Yapıları


Diziler

Dizi, aynı türden bir dizi öğedir. Dizinin boyutu sabittir ve bir kez oluşturulduktan sonra değiştirilemez.

# Python'da bir dizi oluşturma
arr = [1, 2, 3, 4, 5]


Bağlı Listeler

Bağlı liste, bir dizi düğümden oluşur. Her düğüm, bir veri öğesi ve bir sonraki düğüme işaret eden bir bağlantı içerir.

# Python'da bir bağlı liste düğümü
class Node:
    def __init__(self, data=None):
        self.data = data
        self.next = None


Algoritmalar


Sıralama Algoritmaları

Sıralama algoritmaları, bir veri kümesini belirli bir düzende sıralamak için kullanılır. Örneğin, hızlı sıralama, birleştirme sıralaması, kabarcık sıralaması gibi.

# Python'da kabarcık sıralaması
def bubbleSort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]


Arama Algoritmaları

Arama algoritmaları, bir veri kümesinde belirli bir öğeyi bulmak için kullanılır. Örneğin, ikili arama, doğrusal arama gibi.

# Python'da ikili arama
def binarySearch(arr, low, high, x):
    if high >= low:
        mid = (high + low) // 2if arr[mid] == x:
            return mid
        elif arr[mid] > x:
            return binarySearch(arr, low, mid - 1, x)
        else:
            return binarySearch(arr, mid + 1, high, x)
    else:
        return -1

Veri yapıları ve algoritmalar, programlamanın temel taşlarıdır ve herhangi bir programlama dilinde etkili kod yazmak için gereklidir. Bunları anlamak ve uygulamak, kodunuzun performansını ve verimliliğini büyük ölçüde artırabilir.

Zaman Karmaşıklığı ve Big O Gösterimi

Zaman karmaşıklığı, bir algoritmanın performansını ölçen bir kavramdır. Genellikle, bir algoritmanın çalışma süresi, girdi boyutu ile ilişkilendirilir. Big O gösterimi, algoritmanın zaman karmaşıklığını ifade etmek için kullanılır.
Big O gösterimi, algoritmanın en kötü durum çalışma süresini temsil eder. Örnek olarak, O(n) zaman karmaşıklığına sahip bir algoritma, girdi boyutu ile doğru orantılı olarak çalışma süresinin artacağı anlamına gelir.

Örnek Big O Gösterimi

  • O(1): Sabit zaman karmaşıklığı (ör. Hash tablolarında arama)
  • O(log n): Logaritmik zaman karmaşıklığı (ör. İkili arama)
  • O(n): Doğrusal zaman karmaşıklığı (ör. Doğrusal arama)
  • O(n log n): Log-lineer zaman karmaşıklığı (ör. Hızlı sıralama, Birleştirme sıralaması)
  • O(n^2): Karesel zaman karmaşıklığı (ör. Kabarcık sıralaması, Seçim sıralaması)
  • O(2^n): Üstel zaman karmaşıklığı (ör. Seyrek matris çarpımı)


Özyinelemeli (Recursive) Algoritmalar

Özyinelemeli algoritmalar, problemin daha küçük alt problemlere bölündüğü ve bu alt problemlerin çözümleri kullanılarak orijinal problem için çözüm üretildiği algoritmalardır. Özyinelemeli algoritmalar, fonksiyonlarının kendilerini tekrar çağırmalarıyla karakterize edilir.
Özyinelemeli algoritmaların tipik örnekleri arasında Fibonacci sayıları ve faktöriyel hesaplama bulunur.

Örnek: Fibonacci Sayıları

def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)


Özyinelemeli algoritmalar, bazı durumlarda daha temiz ve anlaşılır kod sağlar, ancak dikkatli kullanılmalıdır, çünkü kötü tasarlanmış özyinelemeli algoritmalar performans sorunlarına yol açabilir.

Bu ek konular, veri yapıları ve algoritmalar hakkındaki bilgi birikiminizi daha da genişletir ve daha etkili kodlama stratejileri geliştirmenize yardımcı olur.

Write & Read to Earn with BULB

Learn More

Enjoy this blog? Subscribe to Bayurnet

6 Comments

B
No comments yet.
Most relevant comments are displayed, so some may have been filtered out.