>>dakid

blood, sweat and tears.

‘Algoritma’ Kategorisi için Arşiv

Monty Hall Problem

Yazan: aycanayhan Ocak 12, 2009

Monty Hall Problem kısaca şöyle;
Bir televizyon şovundasınız, önünüzde 3 kapı var, bir tanesinin arkasında araba, diğer ikisini arkasında keçi var. Bir kapı seçeceksiniz ve arkasındaki ödülün sahibi olacaksınız. Kapıların arkasında hangi ödüller olduğunu bilen sunucu size bir kapı seçmenizi söylüyor. Bir kapı seçiyorsunuz. Ama o kapı açılmadan önce sunucu sizin seçmediğiniz diğer iki kapıdan arkasında keçi olanını açıyor ve size seçtiğiniz kapıyı değiştirme şansı veriyor. Burdaki sorun ilk seçtiğiniz kapıyı değiştirmeli misiniz, seçtiğiniz kapıda ısrarcı mı olmalısınız, yoksa değiştirip değiştirmemeniz kazanma şansınızı etkilemez mi?

İlk bakışta siz bir kapı seçtikten ve sunucu diğer kapılardan arkasında keçi olanı açtıktan sonra seçtiğiniz kapıyı değiştirseniz de değiştirmeseniz de arabayı kazanma şansınız %50 gibi görünüyor ( Yani değiştirmek kazanma şansınızı etkilemiyor). Ama biraz daha dikkatli incelersek kapıyı değiştirmenin bize daha fazla kazanma şansı verdiğini görebiliriz.

İki seçeneğimiz var, ya teklif geldiğinde kapımızı değiştireceğiz, ya da ilk seçtiğimiz kapıda ısrarcı olacağız.

ilk seçtiğimiz kapıda ısrarcı olmak ( değiştirmemek ):
İlk başta 3 kapı varken arabayı bulma şansımız %33 ve biz nasıl bir teklifle karşılaşsak da kapımızı değiştirmeyeceğimize göre sonuçta da arabayı bulma şansımız %33 olacaktır. Şöyle düşünün, teklif gelmesin, 3 kapıdan bir kapı seçin, direk açılsın kapılar. Arabayı kazanma şansınız %33 olacaktır. Nasıl olsa değiştirmeyeceksiniz.

Kapıyı değiştirmek:
Çok basit mantıkla, ilk başta %33′lik şans ile arabayı bulursanız ve teklif sırasında kapınızı değiştireceksiniz ve kaybedeceksiniz. İlk seçtiğiniz kapıda %67′lik şans ile keçi olan kapıyı seçerseniz, kapınızı değiştireceksiniz ve kazanacaksınız. Sonuç olarak %33  kaybedersiniz, %67 kazanırsınız.

Kapı sayısını 100′e çıkaralım, bir kapı seçtik, sunucu diğer 99 kapıdan 98′ini ( keçi olan ) açtı ve bize seçtiğimiz kapıyı değiştirip değiştirmeyeceğimizi sordu. Tabiki değiştirmeliyiz. Arabanın bizim seçtiğimiz kapıda olma şansı 1% iken diğer 99 kapıdan birinde olma şansı 99%’dur. 99 kapıdan 98′inde keçi olduğunu zaten biliyorduk, ama hangilerinde olduğunu bilmiyorduk. Sunucu bize yardım etmiş oldu.

Her zaman kapıyı değiştirelim ve rastgele üretilen kapılardan rastgele bir kapı seçelim. Bir parça c kodu ile kanıtlamaya çalıştım:

#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define COUNT 1000

int main()
{
 int kapi[3];
 int i,temp,win=0,lose=0;

 srand ( time(NULL) );

 for ( i=0;i<COUNT;i++ )
 {

  kapi[0]=0;
  kapi[1]=0;
  kapi[2]=0;
  temp=rand()%3;

  kapi[temp]=1;

  temp=rand()%3; 
  
  if( kapi[temp] == 1 )  // ilk seçişte kapıyı bulursak
  {
   lose++;
  }else
  {
   win++;
  }

 }
 printf("win = %d\nlose = %d\n",win,lose);

 return 0;

}

Sonuçlar:

win = 675 lose = 325
win = 667 lose = 333
win = 677 lose = 323
win = 672 lose = 328
win = 653 lose = 347
win = 693 lose = 307
win = 679 lose = 321
win = 681 lose = 319
win = 682 lose = 318
win = 672 lose = 328

Gördüğümüz gibi ilk seçtiğimiz kapıyı değiştirmek bize arabayı kazanmamızda daha fazla şans sunuyor. Böyle bir yarışmaya katılırsanız ilk seçtiğiniz kapıyı mutlaka değiştirin, tabi bir keçi kazanmak istemiyorsanız.

Yazı kategorisi: Algoritma | Etiketler: , , , | 6 Yorum »

Seçmeli Sıralama ( Selection Sort )

Yazan: aycanayhan Kasım 7, 2008

Neden Sıralıyoruz?
Elimizde bulunan her türlü bilgiye kolay ulaşmak için o bilgilerin belirli bir düzen ve sıra içinde olması, aradığımız bilgiye kolay ulaşmak için gerekli olan temel ihtiyaçlardan biridir. Basit örnek olarak; elimizde 100 tane gözü olan bir raf ve 1’den 100’e kadar numaralandırılmış 100 tane kitap olsun. Kitapların raflara belirli bir sıra ile değil de rastgele yerleştirilmiş olduğunu düşünürsek, 45 numaralı kitaba ulaşmak için en az 1, en fazla 100 rafa bakmamız gerekebilir. Ama kitapların raflara sırayla yerleştirirsek, istediğimiz numaralı kitaba tek bir rafa bakarak ulaşabiliriz. Elimizdeki bilgilerin sıralı olması bu gibi durumlarda, özellikle arama ( searching ) durumlarında işimizi oldukça kolaylaştıracaktır.
Birçok sıralama algoritması vardır. Bu algoritmalardan selection sort’a değinmeye çalışacağım:

Seçmeli Sıralama ( Selection Sort )
En basit sıralama algoritması olarak gösterilebilir. Elimizdeki dizide sıralanması gereken n tane sayı olsun. Bu sayıları küçükten büyüğe sıralamak gerekirse, sıralama algoritması şöyledir:
1- Dizinin 1. elemanından başlayarak tüm elemanlarını kontrol ederek en küçük sayıyı bul,
2- Bulduğun en küçük sayıyı dizinin 1. sayısıyla yer değiştir (swap).
3- Dizinin 2. elemanından başlayarak tüm elemanlarını kontrol ederek en küçük sayıyı bul,
4- Bulduğun en küçük sayıyı dizinin 2. sayısıyla yer değiştir (swap).
5- ……
6- Dizinin (n-1). elemanından başlayarak tüm elemanlarını kontrol ederek en küçük sayıyı bul,
7- Bulduğun en küçük sayıyı dizinin (n-1). sayısıyla yer değiştir (swap).
Her bir jenerasyonda en küçük sayıyı bulup onu swap ettiğimiz yer, o sayının sıralanmış dizideki uygun yeri olmuş oluyor.


Bir parça c kodu ile;

#include <stdio.h>
int main()
{
	int dizi[6] = { 10,1,9,2,8,3 };
	int n=6;
	int i,j,indexOfMin,temp;
	int min;

	for ( i=0;i<n-1;i++ )
	{
		min=dizi[i];
		indexOfMin=i;
		for ( j=i+1;j<n;j++ )
		{
			if( dizi[j]<min )
			{
				min=dizi[j];
				indexOfMin=j;
			}
		}
		temp=dizi[i];
		dizi[i]=min;
		dizi[indexOfMin]=temp;
	}
	printf("siralanmis dizi\n");
	for( i=0;i<n;i++ )
		printf("%d ",dizi[i] );
	printf("\n");
	return 0;
}

(21-23. satırlar arasında swap işlemi yapılıyor)
Kodda ufak değişiklikler yaparak büyükten küçüğe de sıralama yapmak mümkündür.

Karmaşıklık ( Complexity )
Sıralanmış dizinin herbir elemanını bulurken, sıralanmamış diziyi baştan sonra kontrol etmemiz gerekiyor.
1. en küçük elemanı bulurken n-1,
2. en küçük elemanı bulurken n-2,
3. en küçük elemanı bulurken n-3,
…..
(n-1). en küçük elemanı bulurken 1 tane kontrol yapılır. Yapılan tüm bu kontrollerin toplam sayısı:

( n X (n-1) ) / 2 tanedir. Seçmeli sıralamanın karmaşıklığı O(n2) olur.

Yazı kategorisi: Algoritma | Etiketler: , | » yorum bırak;