Saturday 31 December 2011

MorphWiz

MorphWiz is the best application i've ever seen for musicians.



Friday 30 December 2011

Algorithm Breath First Search

Algorithm Maze (maze, start)
Find the goal in a maze using a queue (breadth first search)
create an empty queue named Q;
enqueue start in Q;
while Q is not empty do
current   dequeue from Q;
if current is the goal then
output “Success!”;
Q   empty queue; {to end the loop}
else if current is not a wall and current is not marked as visited then
mark current as visited;
enqueue in Q the point to the right of current;
enqueue in Q the point to the left of current;
enqueue in Q the point above current;
enqueue in Q the point below current;
end if
end while

Algorithm Depth First Search

Algorithm Maze (maze, start)
Find the goal in a maze using a stack (depth first search)
create an empty stack named S;
push start onto S;
while S is not empty do
current   pop from S;
if current is the goal then
output “Success!”;
S   empty stack; {to end the loop}
else if current is not a wall and current is not marked as visited then
mark current as visited;
push onto S the point to the right of current;
push onto S the point to the left of current;
push onto S the point above current;
push onto S the point below current;
end if
end while

Thursday 29 December 2011

İkili Arama Ağacı (Binary Search Tree)

İkili ağaçların (Binary Tree) özel bir hali olan ikili arama ağaçlarında, düğümlerde duran bilgilerin birbirine göre küçüklük büyüklük ilişkisi bulunmalıdır. Örneğin tam sayılardan(integer) oluşan veriler tutulacaksa bu verilerin aralarında küçük-büyük ilişkisi bulunmaktadır.
İkili arama ağacı, her düğümün solundaki koldan ulaşılabilecek bütün verilerin düğümün değerinden küçük, sağ kolundan ulaşılabilecek verilerin değerinin o düğümün değerinden büyük olmasını şart koşar.

Örneğin yukarıda bir ikili arama ağacı tasvir edilmiştir. Bu ağaçta dikkat edilecek olursa kökün solunda bulunan bütün sayılar kökten küçük ve sağında bulunan bütün sayılar kökten büyüktür.
İkili arama ağacına bu kurala uygun olarak ekleme çıkarma veya silme işlemleri yapılabilir. Ancak yapılan her işlemden sonra ikili arama ağacının yapısı bozulmamış olmalıdır.
İkili arama ağacında arama işlemi:
Yukarıda da anlatıldığı üzere ağacın üzerinde duran verilerin özel bir şekilde sıralı bulunması gerekir. Buna göre herhangi bir değeri arayan kişi ağacın kök değerine bakarak aşağıdaki 3 eylemden birisini yapar:
  1. Aranan sayı kökteki değere eşittir -> Aranan değer bulunmuştur
  2. Aranan sayı kökteki değerden küçüktür -> Kökün sol kolu takip edilir
  3. Aranan sayı kökteki deüerden büyüktür -> Kökün sağ kolu takip edilir
İkili arama ağaçlarının önemli bir özelliği ise öz çağıran(recursive) oluşudur. Buna göre bir ağacın sol kolu veya sağ kolu da birer ağaçtır. Bu özellikten faydalanarak örneğin C dilinde aşağıdaki şekilde bir arama fonksiyonu yazılabilir:
dugum * ara(dugum *kok, int deger){
if(deger == kok->veri){
 return kok;
 }
else if(deger > kok->veri ){
 
  if(kok->sag != NULL)
         return ara(kok->sag, deger);
 else
  return NULL;
 
 }
else{
  if(kok->sag != NULL)
         return ara(kok->sol,deger);
 else
  return NULL
 }
}