Algoritmalar hakkında çok karmaşık makaleler nasıl yazılır. Son olarak, yazmaya en basit seviyeden başlamanın daha iyi olacağını düşünüyorum. Başlangıçtan itibaren, yapay zeka, makine öğrenimi algoritmaları ve çok sayıda matematik ve optimizasyon bilgisi gibi bazı ağır ağırlıklara sahip olacağım. Sanırım çok bunaltıcı olacak. Bunu yapamayabilirim, doğru.
Her soruya iki dilde, bir statik dil ve bir dinamik dilde çözüm getirmeyi planlıyorum.
C dilini ve Python'u seçtim. Başlangıçta Java'yı düşündüm, ancak alan sınırlı. İlgileniyorsanız, kendiniz deneyin
LeetCode 559. N-ary ağacının maksimum derinliğini bulun (N-ary Ağacın Maksimum Derinliği)
Ağacın maksimum derinliği, kök düğümden en uzaktaki yaprak düğümüne kadar en uzun yoldaki düğüm sayısını ifade eder.
Bir N-ary ağacı verildiğinde, maksimum derinliğini bulun.
Maksimum derinliği 3'tür.
Aşağıdaki şekil, ağacın derinliğinin en sezgisel anlayışıdır.
Ağacın derinliğini bulmaya gelince, yine de yinelemeli yöntemi kullanıyoruz, çünkü uygulanması daha kolay ve anlaşılması daha kolay.
Bir alt ağaç için derinliği:
(Neden 1 ekleyin? Ve kendinizi unutmayın, unutmayın)
Aşağıdaki kodu eklerseniz, tüm testleri 30 ms içinde geçmesi beklenir. (Söylediğim şeyin umut verici olduğuna dikkat edin: leetCode'da gönderilen C ++ kodunun çalışma zamanı o kadar kararlı değil.)
Bu optimize edilmiş kod, gcc'nin optimizasyon seviyesini en yüksek seviyeye ayarlamak için ilk olarak pragma ön işleme talimatını kullanır.
Bir lambda ifadesi daha sonra tanımlanır ve ifadenin adı gerçekten önemli değildir:
Std :: ios :: Sync_with_stdio (yanlış): Cin ve cout'u C stdio ile eşzamanlı olarak ilişkilendirmek yasaktır, devre dışı bırakıldıktan sonra C ++ kodunda C stdio sistem çağrı işlevlerini kullanmayın. Bu yöntem çıktı hızını etkili bir şekilde artırabilir.
Std :: cin.tie (nullprt): Cin.
Python uygulama ilkesi C dilininkiyle aynıdır, bu yüzden onu bir daha yazmayacağım. kod aşağıdaki gibi gösterilir: