請問巫師 #283
什麼是 Fisher-Yates 洗牌?
Fisher-Yates 洗牌是一種程式設計技巧,用於快速且無偏差地對陣列進行洗牌。假設數組中有 n 個元素。將計數器設為 n。
- 從卡號1到n-1中隨機選取一張卡。
- 將該卡與卡號 n 交換。
- 從 n 減去 1。
- 重複步驟1至3,直到n=2。
這是它在 C++ 中的樣子。請注意,為了簡單起見,這裡忽略了模偏差。
void fisher_yates(int deck[], int NumCards) { int i,保持; 無符號整數 rn; 對於(i = NumCards-1;i> 0;i--) { rn=genrand_int32()%(i+1); 保持=甲板[rn]; 甲板[rn]=甲板[i]; 甲板[i]=保持; } }
我在Wizard of Vegas論壇上討論過這個問題。
在加州的埃爾西諾湖酒店及賭場,有一個名為「Red Flex」的二十一點附加賭注。此賭注根據莊家手中連續的紅牌數量(從第一張牌開始)進行賠償。賠付表如下:
- 七個或更多紅色的賠率為 200 比 1
- 六個紅色的賠率為 100 比 1
- 五張紅牌賠率為 50 比 1
- 四個紅色的賠率為 10 比 1
- 三張紅牌賠率為 5 比 1
- 兩張紅牌賠率為 1 比 1
如果莊家爆牌,或因為所有玩家爆牌而不需要抽牌,莊家仍將根據需要抽牌來裁定邊注。
幾率有多大?
我在我的二十一點附錄 8中展示了對 Red Flex 的分析。
我在Wizard of Vegas論壇上討論過這個問題。
如果賭場不允許加倍或分牌,這會對二十一點的賭場優勢產生什麼影響?
不允許加倍會使賭場優勢增加 1.48%。不允許分牌會使賭場優勢增加 0.57%。兩者都不允許會使賭場優勢增加 1.91%。
冒著再次激怒優勢玩家社群的風險,我只想說,在某些情況下,精明的玩家可以在知道自己的第一張牌是什麼的情況下下注。
下表顯示了每張牌的機率,以及當它是第一張牌時的優勢(如果大於零)。條件回報是指在給定第一張牌的情況下的預期收益。預期回報是機率列和條件回報列的乘積。
牌九撲克 — 第一張牌 Q 或更好
卡片 | 可能性 | 條件 返回 | 預期的 返回 |
---|---|---|---|
小丑 | 0.018868 | 0.257773 | 0.004864 |
高手 | 0.075472 | 0.136483 | 0.010301 |
國王 | 0.075472 | 0.038914 | 0.002937 |
女王 | 0.075472 | 0.000534 | 0.000040 |
所有其他 | 0.754717 | 0.000000 | 0.000000 |
全部的 | 1.000000 | 0.018141 |
上表顯示,如果玩家只在第一張牌是Q或更高時出牌,那麼他每手牌的優勢為1.81%。玩家下注的機率為24.52%。每手牌的優勢為7.40%。
注意,Q的優勢只有0.05%。如果我們不玩這手牌,那麼牌桌就會變成這樣。
牌九撲克 — 首張牌王或更好
卡片 | 可能性 | 條件 返回 | 預期的 返回 |
---|---|---|---|
小丑 | 0.018868 | 0.257773 | 0.004864 |
高手 | 0.075472 | 0.136483 | 0.010301 |
國王 | 0.075472 | 0.038914 | 0.002937 |
所有其他 | 0.830189 | 0.000000 | 0.000000 |
全部的 | 1.000000 | 0.018101 |
上表顯示,如果玩家只在第一張牌是K或更高時出牌,那麼他每手牌的優勢仍然為1.81%。玩家下注的機率為16.98%。每手牌的優勢為10.66%。
如果玩家只玩 A 或小丑,則表格如下。
牌九撲克 — 第一張牌 A 或 Joker
卡片 | 可能性 | 條件 返回 | 預期的 返回 |
---|---|---|---|
小丑 | 0.018868 | 0.257773 | 0.004864 |
高手 | 0.075472 | 0.136483 | 0.010301 |
所有其他 | 0.905660 | 0.000000 | 0.000000 |
全部的 | 1.000000 | 0.015164 |
這表明,如果玩家只在第一張牌是A或Joke時出牌,那麼他每手牌的優勢仍然有1.52%。玩家下注的機率為9.43%。因此,每手牌的優勢為16.07%。
請參閱我在Wizard of Vegas論壇上關於此問題的討論。
一架飛機在正上方5公里處。你從地面向它發射一枚熱尋的飛彈。導彈始終朝著飛機直飛。飛機的速度是每分鐘10公里,沿著直線飛行,並保持相同的高度。導彈的速度是每分鐘11公里。導彈需要多長時間才能擊中飛機?
要查看您可能覺得有用的積分,請選擇下面的黑色區域。
(1+x^2)^0.5 的積分 dx = ln(x + (1+x^2)^0.5) + 積分常數。 |
要查看答案,請選擇下面的黑色區域。
55/21 分 = 2.6195 分 = 157.1429 秒。 |