1000 kişinin bir yuvarlak masada oturduğunu düşünün. 1. kişi yanındakini öldürüp bıçağı canlı kalan kişiye veriyor. O da aynı şeyi yapıyor. En sonunda masadaki kaçıncı kişi sağ kalır. Mesela, birinci kişi ikinciyi öldürüyor ve bıçağı üçüncü kişiye veriyor. Üçüncü kişi de dördüncüyü öldürüyor ve bıçağı beşinciye veriyor. Bunun çözümünü programlama ile çözmek istedim ve aşağıdaki mantığı kurdum ama anlamadığım bir nedenden ötürü hata veriyor.
Kod:
visitors = range(1, 1001)
i = 1
while(len(visitors) > 1): del visitors[i] i = i + 1
print visitors
Hata:
Traceback (most recent call last): File "main.py", line 6, in <module> del visitors[i] IndexError: list assignment index out of range
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
Eger herhangi bir anda, masada 2^n kadar insan varsa, o sirada bicagi elinde tutan kisi son kalan kimse olacaktir. Bu ipucu ile bakarsan algoritmaya loop yapmana gerek kalmaz, O(1) zamanda cozebilirsin.
Bu sonuca nasıl ulaştınız? Sıfırdan kendiniz mi düşündünüz? Çünkü bunu düşünmek kolay değil. GeekforGeek'te kanıtı yok. Direkt formül vermiş.
Alıntıları Göster
Hayır ben bulmadım, araştırabilmeniz için linki vermiştim, sorunun orijinal adı Josephus problem. Şuradan okuyabilirsiniz, hızlıca göz gezdirdim, güzel anlatmış gibi göründü. Vazgeçtim o siteye bir daha baktım, ama Ali Nesin'in çözümü daha güzel.https://matematikkoyu.org/docs/sayma.pdf buradan josephus diye aratın bu daha iyi.
Verdiğin linkten sonra probleme şimdi yeniden baktım. Kod yazmadan sadece matematik formul ile de bulunabilir belki fakat kodla çözünce sonuç garanti. Nitekimhttps://rosettacode.org/wiki/Josephus_problem#Perl 'da bu problemin Perl ile çözümünü buldum, kodu biraz sadeleştirerek ve Türkçe yorum ekleyerek yazdım. 0 .. 999 arası endeksli 1000 kişi içinde endeksi 976 olan kişi hayatta kaldı.
Rosetta.org 'a baktın mı?http://rosettacode.org/wiki/Josephus_problem#Java 'da Java çözümünü de yazmışlar cunku her bir dilde çözümünü yazmışlar. (linki tıklayınca DH Forum kampanya linki eklediği için # etiketinden dolayı açmayabilir; DH linkini silerek açın)
Kod:
Hata:
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.