Galiba n'nin bilinmediği durum da kolay çözülüyor. Hem de, kolay çözülmesinin nedeni, zaten başka yapacak pek bir şey olmaması. :)
n'yi bilmediğimize göre giriş tükenene kadar sayılar çekip k uzunluğundaki sonuca ekleyeceğiz. n==k bile olabileceğine göre, ilk k sayı arasında hiç seçici olamayız; hepsini almalıyız.
Daha sonra gelen sayılar için şöyle bir algoritma uygulayabiliriz: O sayıyı seçip seçmeyeceğine belirli bir olasılıkla karar ver. Eğer seçiyorsan, şimdilik seçilmiş olan k sayıdan rasgele birisinin yerine yeni seçtiğini yerleştir.
Eğer i'inci sayıdaysak, onu seçme kararı verirken şimdiye kadar çıkmış olanlara haksızlık olmasın diye k/i olasılığını kullanmalıyız. Önceden seçildiği halde diziden atılacak olan talihsizi de 1/k olasılığı ile belirlemeliyiz.
n ve k için seçtiğim örnekler ve kafamda yaptığım hesaplar bunun istenen sonucu vereceğini söylüyor: Sonuçta n sayının her birisinin seçilme şansı k/n olacak. Hatta, tüme varım ve tümden gelim gibi yöntemlerle ispatlanabilirmiş gibi de görünüyor.
i'inci sayının en sonda k sayı arasında kalma olasılığı şu: k/i olasılığıyla seçimiş olacak ve daha sonra gelenler tarafından diziden atılmamış olacak. Atılmamış olma şansı (1 - atılmaŞansı)'dır. Atılma şansı da şu: j=i+1'den n'ye kadar şu terimin toplamı k/j * 1/k. Yani, i+1'den n'ye kadar 1/j serisinin toplamı. O da seri açılımlarına göre 1'den küçük bir değerdir. Evet, galiba hesap doğru çıkacak ama kağıt üzerinde de göstermek gerek. :)
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]