English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

konuk
1 / ?
derslere geri dön

Büyüme Oranları için Kod Okuma

Doğruluk için Kod İncelemesi vs Karmaşıklık için Kod İncelemesi

Doğruluk için kod incelemesi mantık hatalarını yakalar: yanlış koşullar, kapalı-bir indeks dizinler, eksik null kontrolleri. Karmaşıklık-bilincli kod incelemesi farklı bir kusur sınıfını yakalar: N = 100'de doğru çalışan ancak N = 100.000'de felaket ölçüde büyüyen kod.

MOAD-0001 Deseni: liste seen O(N²) vs set seen O(N) — tek satırlık düzeltme


Bu ders, unhamming kursunda daha derin bir araştırmaya bağlanır: Eksik Bölüm: Algoritmik Karmaşıklık karmaşıklığı üretim kusurları bağlamında kapsar ve MOAD-0001: Sedimanter Kusur deseni 60+ yazılım ekosistemi arasında eşler.


İki İnceleme Buluşsal Yöntemi


İç içe döngüler karmaşıklığı çarpar. N öğe üzerinde iki iç içe döngü O(N²) üretir. Üç O(N³) üretir. İncelemede: önce döngü iç içe geçme derinliğini sayın.


Sıcak döngü içinde sıralı kapsayıcı. Bir döngü içinde herhangi bir .contains(), .includes(), .find() veya in list kontrolü kontrol başına O(N) maliyeti vardır. N yineleme üzerinden: toplam O(N²). Bu desen düzinelerce ekosistem arasında üretim kodunda görünür — GHC Haskell derleyicisi, Python pip, Apache Maven, Rust Cargo, TypeScript, Godot. Aynı hata, farklı kod tabanları.

İnceleme: find_duplicates

Aşağıdaki Python işlevini karmaşıklık açısından gözden geçirin:


def find_duplicates(items):
    seen = []
    duplicates = []
    for item in items:
        if item in seen:
            duplicates.append(item)
        else:
            seen.append(item)
    return duplicates
Karmaşıklık-bilincli kod incelemesi yapın: (a) Bu işlevin zaman karmaşıklığı nedir? (b) Neden? Sorumlu olan tam satırı belirleyin. (c) Bunu O(N) olarak yeniden yazın.

MOAD-0001: Sedimanter Kusur

Aynı Kusur, Altmış Ekosistem

Desen if x not in list: list.append(x) bir döngü içinde üretim kodu arasında görünür — görünmüştür — düzinelerce yazılım ekosistemi arasında:


- GHC (Haskell derleyicisi): bağımlılık çözücüsü, O(N²) N = 50.000 paket'te, 17 dakikalık derleme

- Python pip: bağımlılık çatışması çözümü

- Apache Maven: sınıf yolu çoğaltması kaldırma

- Rust Cargo: özellik birleştirme

- TypeScript derleyicisi: modül çözümü

- Godot / Redot oyun motoru: düğüm grafiği geçişi


Bu ekiplerin hiçbiri hata yapmadı. Küçük N'de doğru kod yazdılar. N büyüdü. Kod katılaştı. Desen bir ada sahiptir: MOAD-0001, Sedimanter Kusur. Kum taşı: ince tabakalarda doğru, zararsız. Zaman içinde tabakaların birikimi ve sertleşmesi.


Düzeltme

Her durumda: sıralı kapsayıcıyı hash kapsayıcısı ile değiştirin. Bir satır. Doğru girdilerde sıfır davranış değişikliği. Gerçek dünya N'de 100–1.000× hızlanma.


Düzeltme işe yarar çünkü iki işlem hızlı kalmak zorundadır:

1. Üyelik kontrolü: bu öğe daha önce görüldü mü?

2. Sıralı çıktı: öğeleri göründükleri sırada döndür (bazen gerekli, bazen değil).


Bir küme (1)'i O(1)'de ele alır. (2) de önemliyse, sıralı çıktı için ayrı bir liste ve üyelik kontrolü için ayrı bir küme tutun. İki veri yapısı, her biri bir işi yapıyor.

Gözden Geçirene Yanıt Verme

Bir pull request bir projenin grafik geçişi işlevinde MOAD-0001'i düzeltir. Bir gözden geçiren şunları yorum yapar:


> "Kümeler ekleme sırasını korumaz — bu davranışı değiştirir."

Nasıl yanıt verirsiniz? Gözden geçiren'in endişesinin ne zaman geçerli olduğunu ve ne zaman geçerli olmadığını açıklayın. Her iki endişenin de çakıştığı zaman her iki endişeyi de karşılayan bir çözüm öneriniz.

Mülakat Analiz Deseni

Beklenen Format

Algoritmik karmaşıklık analizi yazılım mühendisliği mülakatlarında görünür. Güçlü bir yanıt dört kısımlı deseni takip eder:


1. Geçerli karmaşıklığı belirtin — zaman için O(?), alan için O(?).

2. Neden açıklayınız — sorumlu olan belirli yapıyı belirleyin (iç içe döngü, döngü içinde doğrusal tarama, özyinelemeli dallanma).

3. Optimizasyon öneriniz — değişikliği adlandırın ve getirdiği veri yapısını veya algoritmayı adlandırın.

4. Yeni karmaşıklığı belirtin — düzeltmeden sonra, zaman ve alan karmaşıklığı nedir?


Örnek:

Kod: [döngü içinde bir listede üyeliği kontrol eden işlev]
Geçerli: O(N²) — `item in seen_list` kontrol başına O(N) × N yineleme
Optimizasyon: seen_list'i seen_set (hash kümesi) ile değiştirin
Sonra: O(N) — kümede üyelik kontrolü O(1)'dir

Bu beceri mülakatların ötesine aktarılır: karmaşıklık-bilincli kod incelemesi, mimari tasarımı, performans hata ayıklaması, güvenlik denetimi. Değişken boyutlu girdileri işleyen herhangi bir sistem bundan yararlanır.


Bu ders unhamming kursuna doğru aktarılır ve bu tam deseni 60+ açık kaynak projesi arasında üretim kusuru araştırmasına uygular.

Mülakat: has_common_element'i Analiz Edin

Dört kısımlı mülakat biçimini bu işleve uygulayın:


def has_common_element(list_a, list_b):
    for item in list_a:
        for other in list_b:
            if item == other:
                return True
    return False
Geçerli karmaşıklığı belirtin, neden açıklayınız, optimizasyon öneriniz, yeni karmaşıklığı belirtin.