Yayın tarihi:

Python sınıflarında, temel olarak 3 farklı şekilde metot tanımı yapılabilir.

  • Örnek (Instance) metotları
  • Statik (@staticmethod) metotlar
  • Sınıf (@classmethod) metotları

Bunların arasındaki başlıca fark, aldıkları argümanlardır. Örnek metotlarına, ilk argüman olarak, objenin kendisine bir referans gönderilir. Bu argümana, geleneksel olarak self adı verilir. Statik metotlar, kendisini çağıran sınıf veya örnek hakkında herhangi bir bilgiye sahip değildir. Bunlar, işlevini kaybetmeden, sınıf dışında da aynı şekilde tanımlanabilir. Sınıf metotları ise, otomatik olarak, kendisini çağıran sınıfa veya örneğin sınıfına bir referans alır. Bu argümana da geleneksel olarak cls adı verilir.

Devamını oku…

   Yayın tarihi:

Ben genelde çok şikayet eden bir insan değilim. Devlet sitelerinin de, devlet sitesi olduğu düşünüldüğünde, yüksek kaliteli siteler beklemek doğru olmaz. Ama yine de, bunların ufak tefek sıkıntıları birleşip, kullanıcıyı yıldırabiliyor.

Sık sık kullanmaya ihtiyaç duyduğum devlet sitelerinde, muhakkak en ez bir özellik bozuk, sinir bozucu, kötü tasarlanmış veya nasıl çalıştığı belli değil. Devlet siteleri, kullanıcı memnuniyetini ya göz ardı etmiş, ya da benim dikkatimi çeken şeyler, bu sitelerin kullanıcı memnuniyeti standardları içinde yer almıyor.

Devamını oku…

   Yayın tarihi:

Ne zamandır, evrimsel algoritmalar ve genetik algoritmalarına göz atmak istiyordum.. Bugün biraz fırsat bulup, evrimsel algoritmalara göz attım.

Evrimsel algoritma, bana biraz breadth-first search algoritmalarını andırdı. Genel gidişat şu şekilde:

  • Rastgele bireylerden ilk popülasyonu oluştur
  • Her bireyin, aranan sonuca benzerliğini test et
  • En iyi bireylerden, mutasyon ve eşleşme ile yeni bireyler oluştur.
  • En iyi bireylerden yeni popülasyon oluştur.
  • Yeterince iyi bireyler elde edene kadar tekrarla

Bu tür algoritmaları genelde arama uzayının çok büyük olduğu durumlarda kullanıyorlar. Daha önce gördüğüm algoritmalara nazaran, doğru sonuca bir hayli hızlı yaklaşıyor, ancak, bazı sıkıntılar da yaşadım, bunlardan birazdan bahsedeceğim.

Devamını oku…

   Yayın tarihi:

Donald Knuth tarafından geliştirilmiş olan "Dancing Links" algoritması, "exact cover" problemi ve bu probleme çevirilebilen sudoku gibi problemlerin çözümü için bir hayli etkin bir yöntem sunuyor. Bu yazıda, "exact cover" problemi, "dancing links" algoritması, sudoku probleminin exact cover problemine dönüştürülmesi konularından bahsedeceğim. Ayrıca, Ali Assaf tarafından "Algorithm X in 30 lines!" yazısında bahsedilen yönteme kısaca değineceğim.

Devamını oku…

   Yayın tarihi:

Birazdan okuyacaklarınız, Python'da yazdığım basit bir fonksiyonu optimize etme hikayemdir.

Çözmeye çalıştığım problem şu; bir string ve alt string verildiğinde, büyük string'in hangi indexlerindeki karakterleri birleştirerek alt string'i elde edebileceğimi bulan bir algoritma yazmak. Örneğin, büyük string "yasar arabaci", küçük string de "aa" olduğu zaman, algoritmanın vereceği sonuç [(1, 3), (1, 6), (1, 8), (1, 10), (3, 6), (3, 8), (3, 10), (6, 8), (6, 10), (8, 10)] olmalı. Örnekten de anlayacağınız üzere, alt stringi oluşturmak için, büyük string'den alacağım karakterlerin sırasının değişmesini istemiyorum. Diğer bir deyişle, sonuçlar içinde (3,1) istemiyorum.

Bu problemi çözmek için yazdığım ilk algoritma şu oldu:

Devamını oku…