Algoritma

Evrimsel Algoritmalar

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…

Exact Cover, Dancing Links ve Sudoku Çözme

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…

Pixel Sıralama Videoları

Geçen gün Python ile tersine erime efekti yazısını gördüm. Yaptığı şey çok hoşuma gitti, ben de özendim, o tarz birşey yapayım dedim. Tam olarak ne yapsam diye düşünürken, aklıma sorting algoritmaları geldi. Sort algoritmalarını bir resim üzerinde uygulasam ve ara adımlardan bir video oluştursam ilginç olabilir diye düşündüm, ve çeşitli sıralama algoritmaları ile birkaç video hazırladım. Buyurun bakalım, umarım beğenirsiniz:

Devamını oku…

4 renk teoremi ve harita boyama

4 renk teoremi, verilen bir yüzeysel haritayı, komşu bölgeler farklı renklerde olacak şekilde boyamak için 4 rengin yeterli olacağını savunuyor. Komşuluk, köşe olmayan ortak bir sınıra sahip olmak olarak tanımlanmış. Bu teoremin geçerli olması için, bölgelerin bir bütün halinde olması gerekiyor. Dünya haritası bu kurala uymuyor, çünkü, Alaska'nın Amerikayla kara bağlantısı yok.

Devamını oku…

Python narsist sayılar

n haneli bir sayının basamaklarının n'inci üstlerinin toplamı, sayının kendisine eşitse, böyle sayılara narsist sayılar (armstrong sayıları da olur...) deniyor. Örneğin, 153, 3 haneli 1^3 + 5^3 + 3^3 = 153, olduğu için, 153 sayısı bir armstrong sayısı oluyor. Bununla ilgili bir forum konusu şurada vardı. Ben de en basitinden şöyle birşey yazdım;

Devamını oku…

Matlab'da Sieve of Erastosthenes algoritması

Matlab ile sieve algoritması kullanarak asal sayıları bulan bir fonksiyon yazdım. İlgilenenler aşağıda bulabilir.

function P = sieve(x)
%sieve Find prime numbers up to max using
%   sieve of Eratosthenes
P = 3:2:x;
len = length(P);
for n=1:fix((sqrt(x) - 1) / 2)
    if P(n)
        P((n+P(n)):P(n):len) = 0;
    end
end

P = [2 P(P ~= 0)];
end

Benzer Yazı Analizi 2

Benzer Yazı Analizi 1 başlıklı yazıyı okuduysanız, iki yazı arasındaki benzerlikleri hesaplamaya çalışan bir algoritma yazmaya çalışıyordum ancak çok da başarılı olamamıştım. Bu yazıda, algoritmayı biraz geliştirdim ve aldığım sonuçlar tatmin edici oldu.

Bu yeni algoritmanın en önemli farkı, her kelimeye kendine göre katsayı ataması. Önceki yazıda bahsettiğim, Text similarity: an alternative way to search MEDLINE yazısını takip etmeye devam ettim, ve oradaki algoritmayı aynen uygulamaya çalıştım. Kodlar aşağıda:

Devamını oku…

Benzer yazı analizi 1

Benzer yazıları bulup, ziyaretçiye öneri göstermek zannettiğimden çok daha zor gibi görünüyor. Bir yandan düzgün bir algoritma oluşturmaya çalışırken, bir yandan da şu anda katettiğim yolu (her ne kadar çok olmasa da) aktarayım istedim.

Yazıların benzerliklerini hesaplamak için, Text similarity: an alternative way to search MEDLINE adlı makalede kosinüs katsayısı (Cosine Coefficient) formülünü gördüm (daha önce de başka bir yerde görmüştüm bu formülü, ama çıkartamıyorum şimdi :) ) ve denemeye karar verdim. Şimdilik, kelime ağırlıklarını formüle eklemeden bir deneme yaptım. Şu şekilde bir python dosyası ortaya çıktı:

Devamını oku…