Saya sebelumnya menanyakan pertanyaan bagaimana menghitung probabilitas dengan cepat dan akurat. Namun, ternyata itu terlalu mudah karena diberikan solusi bentuk tertutup! Ini versi yang lebih sulit.
Tugas ini adalah tentang menulis kode untuk menghitung probabilitas secara tepat dan cepat . Outputnya harus berupa probabilitas tepat yang ditulis sebagai pecahan dalam bentuk yang paling dikurangi. Itu seharusnya tidak pernah output 4/8melainkan 1/2.
Untuk beberapa bilangan bulat positif n, pertimbangkan string acak seragam panjang 1s dan -1s ndan menyebutnya A. Sekarang gabungkan ke Asalinan itu sendiri. Itu A[1] = A[n+1]jika pengindeksan dari 1, A[2] = A[n+2]dan sebagainya. Asekarang memiliki panjang 2n. Sekarang juga pertimbangkan string acak kedua panjang ndengan nnilai pertama -1, 0, atau 1 dengan probabilitas 1 / 4,1 / 2, masing-masing 1/4 dan menyebutnya B.
Sekarang pertimbangkan produk dalam Bdengan A[1+j,...,n+j]untuk yang berbeda j =0,1,2,....
Sebagai contoh, pertimbangkan n=3. Nilai yang mungkin untuk Adan Bbisa A = [-1,1,1,-1,...]dan B=[0,1,-1]. Dalam hal ini dua produk dalam yang pertama adalah 0dan 2.
Tugas
Untuk masing-masing j, dimulai dengan j=1, kode Anda harus menampilkan probabilitas bahwa semua j+1produk dalam pertama adalah nol untuk setiap n=j,...,50.
Menyalin tabel yang diproduksi oleh Martin Büttner untuk j=1kami memiliki hasil sampel berikut.
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
Skor
Skor Anda adalah jkode terbesar yang Anda selesaikan dalam 1 menit di komputer saya. Untuk menjelaskan sedikit, masing j- masing mendapat satu menit. Perhatikan bahwa kode pemrograman dinamis dalam pertanyaan terkait sebelumnya akan melakukan ini dengan mudah j=1.
Pemutus dasi
Jika dua entri mendapatkan jskor yang sama maka entri yang menang akan menjadi yang tertinggi ndalam satu menit pada mesin saya untuk itu j. Jika dua entri terbaik sama pada kriteria ini juga maka pemenangnya adalah jawaban yang dikirimkan terlebih dahulu.
Bahasa dan perpustakaan
Anda dapat menggunakan bahasa dan perpustakaan yang tersedia secara bebas yang Anda suka. Saya harus dapat menjalankan kode Anda jadi tolong sertakan penjelasan lengkap tentang cara menjalankan / kompilasi kode Anda di linux jika memungkinkan.
Mesin Saya Pengaturan waktu akan dijalankan pada mesin saya. Ini adalah instalasi ubuntu standar pada Prosesor Delapan Core AMD FX-8350. Ini juga berarti saya harus dapat menjalankan kode Anda.
Entri yang menang
j=2dalam Python oleh Mitch Schwartz.j=2dalam Python oleh feersum. Saat ini entri tercepat.