0Pricing
C++ Academy · Ders

Performans Değerlendirmeleri

Kovaları ve yük katsayısını öğrenin

Performans Değerlendirmeleri, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Hash Tabloları Verileri Nasıl Saklar?

Sırasız bir konteyner, bucket'lardan oluşan bir dizi içerir. Bir anahtarın hash'i bir bucket seçer; tek bir bucket'taki birden çok anahtar, doğrusal olarak aranan bir zincir oluşturur.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, int> m{{1, 1}, {2, 2}, {3, 3}};
    std::cout << "bucket count: " << m.bucket_count() << '\n';
    return 0;
}

Hangi Bucket?

bucket(key), bir anahtarın şu anda eşlendiği bucket dizinini bildirir.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, int> m{{10, 1}, {20, 2}, {30, 3}};
    std::cout << "key 20 in bucket " << m.bucket(20) << '\n';
    return 0;
}

Yük Faktörü

Yük faktörü, size / bucket_count değeridir. Daha yüksek yük, daha uzun zincirler ve daha yavaş aramalar anlamına gelir.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, int> m{{1, 1}, {2, 2}};
    std::cout << "load factor: " << m.load_factor() << '\n';
    return 0;
}

Maksimum Yük Faktörü

max_load_factor() eşik değeridir. Yük faktörü bu değeri aştığında tablo daha fazla bucket'a rehash edilir.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, int> m;
    std::cout << "default max load: " << m.max_load_factor() << '\n';
    return 0;
}

Rehash İşlemi

Rehash işlemi, tabloyu daha fazla bucket ile yeniden oluşturur ve maliyetlidir. Yük faktörü aşıldığında otomatik olarak gerçekleşir.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, int> m;
    std::size_t before = m.bucket_count();
    for (int i = 0; i < 100; ++i) m[i] = i;
    std::cout << before << " -> " << m.bucket_count() << " buckets\n";
    return 0;
}

Rehash İşlemlerini Önlemek İçin Reserve Kullanma

Boyutu önceden biliyorsanız bucket'ları önceden ayırmak ve tekrarlanan rehash işlemlerini önlemek için reserve(n) çağırın.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, int> m;
    m.reserve(1000);
    std::cout << "buckets reserved: " << (m.bucket_count() >= 1000 ? "yes" : "no") << '\n';
    return 0;
}

Doğrudan rehash

rehash(n), bucket sayısını en az n olacak şekilde ayarlar. Öğe sayıları için reserve, bucket sayıları için ise rehash kullanın.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, int> m;
    m.rehash(64);
    std::cout << "buckets >= 64: " << (m.bucket_count() >= 64 ? "yes" : "no") << '\n';
    return 0;
}

Bucket Boyutlarını İnceleme

bucket_size(i), i bucket'ını kaç öğenin paylaştığını gösterir; bu, çakışmaları teşhis etmek için kullanışlıdır.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, int> m;
    for (int i = 0; i < 10; ++i) m[i] = i;
    std::cout << "bucket 0 holds " << m.bucket_size(0) << " elements\n";
    return 0;
}

En Kötü Durum O(n)'dir

Çok sayıda çakışmaya neden olan kötü bir hash ile tüm anahtarlar tek bir bucket'ta zincirlenir ve işlemler doğrusal zamana düşer. İyi bir hash, işlemleri O(1) düzeyinde tutar.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, int> m;
    for (int i = 0; i < 5; ++i) m[i] = i * i;
    std::cout << "avg lookups stay fast with good hashing\n";
    std::cout << "load: " << m.load_factor() << '\n';
    return 0;
}

Maksimum Yük Faktörünü Azaltma

Daha düşük bir max_load_factor ayarlamak, bellek karşılığında hız kazandırır: daha az çakışma olur, ancak daha fazla bucket gerekir.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, int> m;
    m.max_load_factor(0.5f);
    std::cout << "new max load: " << m.max_load_factor() << '\n';
    return 0;
}

Yineleyicilerin Geçersiz Kılınması

Bir rehash işlemi yineleyicileri geçersiz kılar; ancak öğelere yönelik başvuruları ve işaretçileri geçerli tutar. Döngülerinizi buna göre planlayın.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, int> m{{1, 100}};
    int& ref = m[1];
    m.reserve(500);
    std::cout << "reference still valid: " << ref << '\n';
    return 0;
}

Hızlı Kontrol

Karma tablolarının başarımı konusundaki anlayışınızı sınayın.

Özet

Karma tablolarının iç işleyişini öğrendiniz:

  • anahtarlar kovalara eşlenir; çakışmalar zincirler oluşturur
  • doluluk oranı = boyut / kova_sayısı; max_load_factor değerinin aşılması yeniden karma işlemini tetikler
  • yeniden karma işlemini önlemek için reserve kullanın; yeniden karma işlemi yineleyicileri geçersiz kılar, ancak başvuruları geçersiz kılmaz

Sonraki ders: fstream ile dosyaları okuma ve yazma.

Sıkça Sorulan Sorular

“Performans Değerlendirmeleri” dersi ücretsiz mi?

Evet — “Performans Değerlendirmeleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Performans Değerlendirmeleri” dersinde ne öğreneceğim?

Kovaları ve yük katsayısını öğrenin C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Performans Değerlendirmeleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. std::unordered_map
  2. unordered_set
  3. Özel Karma İşlevleri
  4. Performans Değerlendirmeleri
← C++ Academy Sayfasına Dön