我試圖在 JS 中模擬秘書問題,期望得到 1/e (~37%) 的值,但我得到的要少得多 (~10%),而且它在變化,增加的人會減少它.
這是我嘗試過的,我認為錯誤可能是let x=new Array(people).fill(0).map(e=>Math.random()) . 我期待 37%,但得到了 ~10%
//number of people, and also number of results
let people=100
//multiple trials to smooth data
let trials=1000;
let results=new Array(people).fill(0);
// creates a percent, i/people, for each initial group that is "turned down"
for (var i=0;i<people;i ) {
// runs a few times to smooth data
for (var j=0;j<trials;j ) {
//x is new random set of people, values in [0,1]
let x=new Array(people).fill(0).map(e=>Math.random());
//"rejected set"
let min=Math.max(...x.splice(0,i));
//select the first person better than the "rejected" set
let select=0;
let selected=false
for (var k of x) {
if (k>=min && !selected) {
select=k;
selected=true;
}
}
//increase results by selected or last person
results[i] =select!=0?select:x[x.length-1];
}
}
//strategy to get highest average score
console.log("Best strategy: " (results.indexOf(Math.max(...results))/people*100) "%");
我還在這里繪制了一些關于 desmos 的資料。
uj5u.com熱心網友回復:
我不明白你是如何計算成功試驗的次數來計算概率的。嘗試按如下方式替換計數邏輯。
for (var k of x) {
if (k > min && !selected) {
select = k;
selected = true;
} else if (k > select && selected) {
selected = false;
break;
}
}
//increase results by selected or last person
results[i] = selected
基本上,只有當第一個高于min值的值是總最大值時,您的試驗才會成功。這給1/e*100了我接近的價值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535665.html
上一篇:渲染的羽化線衰減斜率(數學)
