1. sayfa
pseudo code yazmanın ve grafiğe dökmenin önemi burda çıkıyor aslında. onlarca adım sonrasını kimse göremez zaten. fakat grafiğe döktüğünde eksik olan şeyi göreceksin. recursion kısmı tekrar edecek zaten sürekli. matematikteki modüler aritmetikti sanırım ismi onlar gibi kuralı bulduktan sonra yazması da kolay |
|
ben de teşekkür ederim bazı şeyleri geride bırakmak gerekiyor ![]() |
|
Kodu bir deneyim dedim de şöyle gıcık bi hata verdi. Python boşluk/sekme kullandığı için kodu SS ile göndermen gerekli. Bu arada Recursion ile veri yapıları arasında bağlantı yok. Hash, hashmap, associative array gibi veri yapıları 1960'larda geliştirilmeye başlanmış, recursion 1950'lerde vardı, bilg programlama dilleri ortaya cıkmadan yıllar önce de matematikte vardı. < Resime gitmek için tıklayın > |
https://github.com/jmportilla/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Recursion/Recursion%20Interview%20Problems/Recursion%20Problems%20-%20%20SOLUTIONS/Recursion%20Problem%204%20-%20Coin%20Change%20-%20SOLUTION.ipynb |
return min_coins fonksiyonun dönüş degeri old için, dediğin gibi if'le aynı hizada olması gerekli fakat öyle yapsam da aynı satır ve aynı yerde yine indentation/tab hatası verdi. şimdi linkteki kodu kopyaladım hata vermedi. çözümde fonksiyonun recursive olarak çalıştırıldığı satırdaki şu açıklamada # Recursive call, note how we include the known results! target-1 kısmını açıklamamış oysa ki en önemli kısımlardan biri cunku o sayede fonksiyon elif known_results[target] > 0: return known_results[target] ile fonksiyon dönme ihtimalini yakalıyor. Bir önceki "base case" dediği kısımda da dönme ihtimali var tabi ki fakat target, coins içinde zaten varsa dönmek için o örnein hedef 5 ise ve coins içinde 5 varsa tabi ki 1 ile dönecek. Genel olarak bu problem recursion olayını açıklamak açısından kötü seçim gibi görünüyor. Üstüne de yetersiz açıklamalar eklenince, daha da kötü oluyor. Bu konulara yeni başlayan biri olsam ve böyle bi örnekle karşılaşsam herhalde ben de pek anlayamazdım. |
|
Programa bu akşam öylesine bakayım dedim. Ufak bir eksik daha buldum "coins" e 2 ekleyerek [1,3,5,2] yaptım. Bu durumda 14 için yine 4 cıkması gerekirken yanlış şekilde 7 buluyor. 2x5 + 2x2 = 14 ile yine 4 çıkarmalı. Hatanın sebebi cunku algoritma coins 'in artan dizi olduğunu varsayıyor. Bunu açıklamaya eklemesi veya coins = sorted([1,5,3]) gibi tanımlaması gerekirdi Ancak bu eksiklere ragmen program yine de iyi cunku recursion olayını tam olması gerektiği gibi kullanıyor. Bu program üzerine bir ek soru daha sorulabilir: En az sayıda coin'in toplam adetiyle birlikte 2 adet 5 kuruş, 2 adet 2 kuruş gibi, kendilerini de listeleyiniz. Programı modifiye ederek bunu yapabilir misin :) |
Sonda sorduğunuz soruyu ise (deneyeyim dedim ama denemek için algoritmayı tam olarak baştan iyi anlamak lazım olduğunu fark edip zaman kaybetmeden bıraktım) sanırım başka bir dictionary oluşturup, coins'e göre sayıyı 1 arttırarak, en az sayılan coin'i bastırmak herhalde doğru olurdu ancak şöyle bir sorun olduğunu fark ettim, algoritmada zaten her coin aslında tek tek kullanılıyor, yani her koşul hesaplanıyor zaten o yüzden o dict'i nereye yazmalıyız daha doğrusu işlem sonunda içerisinde sadece kullanılmış coinlerin olduğu bir dict nasıl oluşturulur biraz uğraşmak gerekiyor sanırım :) Demek istediğim [1,2,3,10] listesinde target 12 iken listedeki tüm coinler algoritma içerisinde doğru coini bulmak için kullanılıyor, ancak asıl coinler burada 10 ve 2 oluyor, işlem sonucunda dict içerisinde sadece 10 ve 2'nin olduğu ve bu 2'sinin adet sayısı karşılaştırılıp az olanın yazıldığı bir kod lazım,Onu da yazmak için şu an çalıştığım dersleri bir kenara bırakıp saatlerce bununla uğraşmam lazım ama kalsın hocam ben almiyim :D Bu arada bu kadar uğraştığınıza göre sizin de baya hoşunuza gitmiş sanırım :D |
coins'lerin sonuna 2 eklendiğinde 7 bulduğu an. < Resime gitmek için tıklayın > bulunan coin'leri listelemek o kadar kolay değil . ancak cok zor da değil. sorunun ilgimi cekme sebebi, dediğim gibi recursion olayını tam olması gerektiği gibi kullanması. dikkat ettiysen kod yaptığı işe oranla kısa ve net. recursion değil de iterasyon kullansaydı daha uzun ve karışık olurdu. hobi amaçlı ilgilendiğim kodlarda bazen ben de recursion kullanıyorum. |
|
ops aynen, onu yorumdan geri almayı unutmuşum. sonuçta bu kod, yeni başlayanlar için biraz zor (ve o yüzden biraz isabetsiz seçim) olsa da, tek başına değerlendirildiğinde recursion kullanımına iyi bir örnek. coins listesini cıkaran koda yarın bir bakacağım. dediğm gibi o cok kolay degil, cok zor da değil. |
Sen bunu da anlayamazsın ki. Sen necisin ya bu forumda boş boş yorumlar her yerde. Ekran görüntüsüyle paylaş falan :D Tipe gel. Seni iyi maskot yapmamışlar bu foruma ama benim favorim sensin aslanım bundan sonra. Takibindeyim. |
Değişik algoritma sorularıyla ilgilenmem ve forumun syntax highlighting'i yeterli olmadığı için bazen kodları SS olarak göndermem neden rahatsız etti ki :) |
1. sayfa
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu mesaj bu kişi tarafından değiştirildi Guest-33247115E -- 21 Haziran 2021; 21:14:44 >