Daha önce bir olasılığın hızlı ve doğru bir şekilde nasıl hesaplanacağına dair bir soru sordum . Ancak, kapalı bir form çözümü verildiği için çok kolay oldu! İşte daha zor bir versiyon.
Bu görev, bir olasılığı tam ve hızlı bir şekilde hesaplamak için kod yazmakla ilgilidir . Çıktı, en düşük biçimde kesir olarak yazılan kesin bir olasılık olmalıdır. Asla çıktı almamalı, daha 4/8
doğrusu 1/2
.
Bazı pozitif tamsayılar için n
, 1s ve -1s uzunlukta eşit rastgele bir dize düşünün ve A olarak n
adlandırın.A
kendi kopyasını . Yani A[1] = A[n+1]
endeksleme eğer 1'den, A[2] = A[n+2]
vb. A
şimdi uzunluğu var 2n
. Şimdi n
, ilk n
değerleri her biri 1 / 4,1 / 2, 1/4 olasılıkla -1, 0 veya 1 olan ikinci bir rastgele uzunluk dizesini düşünün ve B olarak adlandırın.
Şimdi iç ürünü incelemek B
ile A[1+j,...,n+j]
farklı için j =0,1,2,...
.
Örneğin, düşünün n=3
. İçin olası değerler A
veB
olabilir A = [-1,1,1,-1,...]
ve B=[0,1,-1]
. Bu durumda ilk iki iç ürün 0
ve şeklindedir 2
.
Görev
Her biri için j
, j=1
kodunuzla başlayarak , tüm ilk j+1
iç ürünlerin her biri için sıfır olma olasılığını çıkarmalıdır n=j,...,50
.
Martin Büttner tarafından üretilen masanın j=1
aşağıdaki örnek sonuçlara sahibiz.
n P(n)
1 1/2
2 3/8
3 7/32
4 89/512
5 269/2048
6 903/8192
7 3035/32768
8 169801/2097152
Puan
Puanınız j
kodunuzun bilgisayarımdaki 1 dakika içinde tamamladığı en büyük puan . Biraz açıklığa kavuşturmak için, her birij
biri bir dakika alır. Önceki bağlantılı sorudaki dinamik programlama kodunun bunu kolayca yapacağını unutmayın j=1
.
Kravat kırıcı
İki giriş aynı j
puanı alırsa, kazanan giriş bunun için n
makinemde bir dakika içinde en yüksek olan giriş olacaktır .j
. En iyi iki giriş de bu kritere eşitse, kazanan ilk önce cevap olacaktır.
Diller ve kütüphaneler
Ücretsiz olarak istediğiniz dil ve kütüphaneleri kullanabilirsiniz. Kodunuzu çalıştırmak mümkün olmalıdır bu yüzden mümkün olduğunca linux kodunu çalıştırmak / derlemek için tam bir açıklama ekleyin.
Makinem zamanlamaları benim makinede işletilecek. Bu, AMD FX-8350 Sekiz Çekirdekli İşlemciye standart bir ubuntu yüklemesidir. Bu ayrıca kodunuzu çalıştırabilmem gerektiği anlamına gelir.
Kazanan katılımlar
j=2
içinde Python Mitch Schwartz tarafından.j=2
içinde Python feersum tarafından. Şu anda en hızlı giriş.