Misalkan Anda memiliki tas dengan ubin, masing-masing dengan huruf di atasnya. Ada ubin dengan huruf 'A', dengan 'B', dan seterusnya, dan ubin wildcard '(kami memiliki ). Misalkan Anda memiliki kamus dengan jumlah kata yang terbatas.
Anda memilih ubin dari kantong tanpa pengganti.
Bagaimana Anda menghitung (atau memperkirakan) probabilitas bahwa Anda dapat membentuk kata tertentu, dengan panjang (dengan 1 < = < ) dari kamus mengingat ubin dipilih?l k k
Bagi mereka yang tidak terbiasa dengan Scrabble (TM), karakter wildcard dapat digunakan untuk mencocokkan huruf apa pun. Jadi kata 'BOOT' bisa 'dieja' dengan ubin 'B', '*', 'O', 'T'. Urutan pengambilan surat tidak menjadi masalah.
Saran: untuk menyederhanakan penulisan jawaban, mungkin lebih baik hanya menjawab pertanyaan: berapa probabilitas memiliki kata 'BOOT' di antara kemungkinan perpindahan Anda setelah menggambar 7 huruf dari tas baru.
(pengantar masalah telah disalin dari pertanyaan serupa ini )
sumber
Jawaban:
Sebuah rumus diminta. Sayangnya, situasinya sangat rumit sehingga tampaknya formula apa pun hanya akan menjadi jalan memutar untuk menyebutkan semua kemungkinan. Alih-alih, jawaban ini menawarkan algoritma yang (a) sama dengan formula yang melibatkan jumlah produk dari koefisien binomial dan (b) dapat diangkut ke banyak platform.
Untuk mendapatkan formula seperti itu, bagi kemungkinan menjadi kelompok-kelompok yang saling terpisah dalam dua cara: menurut berapa banyak huruf tidak dalam kata yang dipilih di rak (biarkan inim ) dan menurut berapa banyak wildcard (kosong) yang dipilih ( biarkan ini w ). Ketika ada r=7 petak di rak, N petak tersedia, M petak tersedia dengan huruf tidak ada dalam kata, dan W=2 kosong tersedia, jumlah pilihan yang mungkin diberikan oleh (m,w) adalah
karena pilihan huruf non-kata, kosong, dan kata-kata bersyarat independen pada(m,w,r).
Ini mengurangi masalah untuk menemukan sejumlah cara untuk mengeja kata ketika memilih hanya dari petak yang mewakili huruf kata, mengingat bahwa kosong tersedia dan r - m - w petak akan dipilih. Situasinya berantakan dan tidak ada formula tertutup yang tersedia. Misalnya, dengan w = 0 kosong dan m = 3 huruf di luar kata ditarik, akan ada empat huruf tersisa untuk mengeja "boot" yang diambil dari ubin "b", "o", dan "t" . Mengingat ada 2 "b", 8 "o", dan 6w r−m−w w=0 m=3 2 8 6 "t" ada di set ubin Scrabble, ada kemungkinan positif menggambar (multiset) "bboo", "bbot", "bbtt", "booo", "boot", "bott", "bttt", "oooo "," ooot "," oott "," ottt ", dan" tttt ", tetapi hanya satu dari mantra ini" boot ". Dan itu adalah kasus yang mudah! Misalnya, seandainya rak berisi lima ubin yang dipilih secara acak dari ubin "o", "b", dan "t", bersama dengan keduanya, ada banyak lagi cara untuk mengeja "boot" - dan bukan mengeja. Misalnya, "boot" dapat dieja dari "__boott" dan "__bbttt", tetapi tidak dari "__ttttt".
Penghitungan ini - inti dari masalah - dapat ditangani secara rekursif. Saya akan menggambarkannya dengan sebuah contoh. Misalkan kita ingin menghitung cara mengeja "boot" dengan satu ubin kosong dan empat ubin lagi dari koleksi ubin "b", "o", dan "t" (di mana dua ubin yang tersisa menunjukkan huruf-huruf tidak kosong yang tidak dalam { "b", "o", "t"}). Pertimbangkan huruf pertama, "b":
A "b" dapat ditarik ke dalam cara dari dua ubin "b" yang tersedia. Ini mengurangi masalah untuk menghitung jumlah cara mengeja akhiran "oot" menggunakan kedua kosong dan hanya tiga ubin lagi dari koleksi ubin "o" dan "t".(21)
Satu kosong dapat ditetapkan sebagai "b". Ini mengurangi masalah untuk menghitung jumlah cara mengeja "oot" menggunakan kosong yang tersisa dan hanya tiga ubin lagi dari koleksi ubin "o" dan "t".
Secara umum, langkah (1) dan (2) - yang terpisah dan karena itu berkontribusi secara positif pada perhitungan probabilitas - dapat diimplementasikan sebagai loop atas kemungkinan jumlah kosong yang mungkin digunakan untuk huruf pertama. Pengurangan masalah diselesaikan secara rekursif. Kasing dasar terjadi ketika ada satu huruf tersisa, ada sejumlah ubin dengan surat itu tersedia, dan mungkin ada beberapa kosong di rak juga. Kami hanya perlu memastikan bahwa jumlah kosong di rak ditambah jumlah ubin yang tersedia akan cukup untuk mendapatkan jumlah yang diinginkan dari surat terakhir.
Berikut ini adalah7
R
kode untuk langkah rekursif.rack
biasanya sama ,adalah array jumlah huruf (seperti),adalah struktur yang sama memberikan jumlah ubin yang tersedia dengan huruf-huruf itu, danjumlah kosong yang diasumsikan terjadi di rak.word
c(b=1, o=2, t=1)
alphabet
wild
Antarmuka untuk fungsi ini menentukan ubin Scrabble standar, mengubah kata yang diberikan ke dalam struktur data multisetnya, dan melakukan jumlah ganda di atas dan w . Di sinilah koefisien binomialm w dan ( W(Mm) dihitung dan dikalikan.(Ww)
Mari kita coba solusi ini dan tentukan waktunya. Tes berikut menggunakan input yang sama yang digunakan dalam simulasi oleh @Rasmus Bååth :
Mesin ini melaporkan total waktu berlalu detik: cukup cepat. Hasil?0.05
Probabilitas untuk "boot" dari persis sama dengan nilai 2381831 / 333490850 diperoleh dalam jawaban saya yang lain (yang menggunakan metode yang sama tapi sofa itu dalam kerangka yang lebih kuat membutuhkan platform aljabar komputasi simbolik). Probabilitas untuk semua empat kata yang cukup dekat dengan simulasi Baath (yang tidak bisa diharapkan untuk memberikan nilai yang akurat untuk "zoologi" karena probabilitas rendah dari 11840 / 16007560800 , yang kurang dari satu dalam satu juta).114327888/16007560800 2381831/333490850 11840/16007560800,
sumber
R
tetapi masih berhasil menggunakan fungsi Anda dalam waktu kurang dari satu jam kerja, sehingga skrip mengambil input dari file kamus kata 20k dan menulis hasilnya ke .csv. (ini membutuhkan waktu kurang dari 10 menit pada core i5 mid-range)Jawaban untuk pertanyaan yang direferensikan berlaku di sini secara langsung: buat kamus yang hanya terdiri dari kata target (dan kemungkinan ejaan wildcardnya), hitung kemungkinan rak acak tidak dapat membentuk target, dan kurangi dari . Perhitungan ini cepat.1
Simulasi (ditampilkan di bagian akhir) mendukung jawaban yang dihitung.
Detail
Seperti pada jawaban sebelumnya, Mathematica digunakan untuk melakukan perhitungan.
Tentukan masalah: kata (atau kata-kata, jika Anda suka), huruf, jumlah mereka, dan ukuran rak. Karena semua huruf yang tidak ada dalam kata tersebut bertindak sama, itu sangat mempercepat perhitungan untuk menggantinya dengan simbol tunggal mewakili "huruf apa pun yang tidak ada dalam kata."χ
Buat kamus kata ini (atau kata-kata) dan tambahkan untuk memasukkan semua ejaan wildcard yang mungkin.
Hitung bukan kata-kata:
(Ada185 non-kata dalam kasus ini.)
Hitung peluangnya. Untuk pengambilan sampel dengan penggantian, ganti saja jumlah ubin untuk variabel:
Nilai ini sekitar0.00756036.
Untuk pengambilan sampel tanpa penggantian, gunakan kekuatan faktorial alih-alih kekuatan:
Nilai ini sekitar Perhitungannya praktis instan.0.00714212.
Hasil simulasi
Hasil dari iterasi dengan penggantian:106
Bandingkan dengan nilai yang dihitung relatif terhadap kesalahan standar:
Perjanjian baik-baik saja, sangat mendukung hasil yang dihitung.
Buat perbandingan:
Kesepakatan dalam simulasi ini sangat bagus.
sumber
Jadi ini Monte Carlo , yaitu, kita akan mensimulasikan menggambar ubin jutaan kali dan kemudian kita akan menghitung berapa banyak undian yang disimulasikan menghasilkan kita mampu membentuk kata yang diberikan. Saya telah menulis solusinya dalam R, tetapi Anda bisa menggunakan bahasa pemrograman lain, misalnya Python atau Ruby.
Saya pertama-tama akan menjelaskan cara mensimulasikan satu undian. Pertama mari kita tentukan frekuensi ubin.
Kemudian mengkodekan kata sebagai vektor jumlah huruf.
Sekarang gambar sampel tujuh ubin dan encode dengan cara yang sama seperti kata.
Akhirnya, hitung huruf apa yang hilang ...
... dan jumlahkan jumlah huruf yang hilang dan kurangi jumlah kosong yang tersedia. Jika hasilnya nol atau kurang, kami berhasil mengeja kata.
Namun dalam kasus khusus ini kami tidak ... Sekarang kami hanya perlu mengulanginya berkali-kali dan menghitung persentase pengundian yang berhasil. Semua ini dilakukan oleh fungsi R berikut:
Ini
reps
adalah jumlah undian yang disimulasikan. Sekarang kita dapat mencobanya pada sejumlah kata yang berbeda.sumber
sample
tidak bertindak seperti yang Anda harapkan. Misalnya, apa yang terjadi pada kode Anda jika gim dimodifikasi untuk memungkinkan rak berisi 28 ubin? Ubahsize=7
untuksize=28
mengetahuinya.For the word "BOOT" with no wildcards:
sumber
Meh.
It's been a while since I looked at how I built my project. And my math may be entirely incorrect below, or correct. I may have it backwards. Honestly, I forget. BUT! Using only binomial combination, without taking into account blank tiles which throws the entire thing out of whack. The simple combination solution without wild.
I asked these questions myself, and built my own scrabble words probability dictionary because of it. You don't need a dictionary of possible words pulled out, only the math behind it and available letters based on letters in tile bag. The array of English rules is below. I spent weeks developing the math just to answer this question for all English words that can be used in a game, including words that can not be used in a game. It may all be incorrect.
The probability of drawing a given word from a bag of letters in Scrabble, requires how many letters are available in the bag, for each letter ( A-Z ) and, whether we're using the wild card as an addition to the math. The blank tiles are included in this math - assuming 100 tiles, 2 of which are blank. Also, how many tiles are available differs based on language of the game, and game rules from around the world. English scrabble differs from Arabic scrabble, obviously. Just alter the available letters, and the math should do the work.
If anyone finds errors, I will be sure to update and resolve them.
Boot: The probability of Boot in a game of scrabble is 0.000386% which is a chance of 67 out of 173,758 hands as shown on the word page for boot.
English Tiles
all is the array of letters in the bag. count is the array of available tiles for that letter, and point is the point value of the letter.
There are 100 tiles in an English scrabble game (i.e., the sum of
$count
). It does not matter how the tiles are pulled, so it's not a permutation.The Math I Used Determine how many letters are in the word and what letters are in the word, how many of those letters are available in the tile bag ( count for each letter, unique and allchars ). Binomial coefficient of each, divided by binomial coefficient of length word.
Determine the binomial combinations available
Foreach letter, what is the binomial coefficient.
There is 1 "B". There are 2 available, a 2% chance of pulling the b.
There is 2 "O". There are 8 available, a 8% chance of pulling the o.
There is 1 "T". There are 6 available, a 6% chance of pulling the t.
BOOT is a 4 letter word, being taken from a 100 tile set with blanks, 98 without.
n = 98. The number of tiles without blank in the English set
sumber
R
solution I posted. Try this one-secondR
simulation:let <- c(rep("b", 2), rep("o", 8), rep("t", 6), rep("_", 84)); boot <- function(x) sum(x=="b")>=1 && sum(x=="o")>=2 && sum(x=="t")>=1; mean(replicate(1e5, boot(sample(let, 7))))