Каковы шансы выпадения роял-флеша? Вероятности, таблицы и примеры покерных комбинаций.
Если вы умеете считать, вы сможете научиться мыслить как игрок в покер. В краткосрочной перспективе покер кажется игрой на удачу, но в основе каждого решения лежат комбинаторика, вероятность и ожидаемая выгода (EV). В этом руководстве вы рассчитаете шансы для каждой классической пятикарточной комбинации (пара, две пары, трипсы, стрит, флеш, фулл-хаус, каре, стрит-флеш, роял-флеш), поймете, как переводить подсчеты в вероятности и шансы «1 к X», а также используете небольшие фрагменты кода на Питон для проверки результатов и проведения быстрых симуляций. Цель не в том, чтобы обещать выигрыш, а в том, чтобы помочь вам ясно рассуждать о неопределенности за столом.
Примечание для образовательных целей: Данный контент предназначен для изучения статистики и принятия решений. Он не гарантирует получения прибыли и не поощряет азартные игры.
Что вы узнаете
- Как колода из 52 карт соотносится с количеством комбинаций.
- Точные вероятности выпадения 5 карт и шансы «1 из X» для каждого ранга комбинации.
- Пошаговые вычисления (например, одна пара, флеш, фулл-хаус) с помощью KaTeX.
- Как сравнить шансы банка и шансы розыгрыша с помощью ожидаемой прибыли.
- Небольшие фрагменты кода на Python для проверки количества элементов и проведения небольших симуляций.
1) Колода, комбинации и язык вероятностей
Стандартная колода состоит из 52 карт: 13 рангов (A, 2, ..., K) × 4 масти (♠♥♦♣). В 5-карточном покере мы рассматриваем комбинации как случайные числа. Знаменатель для всех точных вероятностей равен:
\text{Total 5-card hands}=\binom{52}{5}=\frac{52!}{5!,47!}=2{,}598{,}960Все приведенные ниже точные вероятности выпадения 5 карт делят соответствующее количество карт в руке на \binom{52}{5}.
2) Точные шансы выигрыша в пятикарточных покерных комбинациях (количество, вероятность, «1 к X»)
Ниже приведена стандартная таблица взаимоисключающих подсчетов рук и вероятностей. «Шансы (1 из …)» — это просто \dfrac{1}{p}, округленное значение.
| Тип руки | Комбинационный счет | Вероятность | Шансы (1 к …) |
|---|---|---|---|
| Флеш-рояль | 4 | 0.000154% | 649,740 |
| Стрит-флеш (экс-роял) | 36 | 0.001385% | 72,193 |
| Четыре вида | 624 | 0.0240% | 4,165 |
| Фулл-хаус | 3,744 | 0.1441% | 694 |
| Флеш (экс-стрит-флеш) | 5,108 | 0.1965% | 509 |
| Стрит (бывший стрит-флеш) | 10,200 | 0.3925% | 255 |
| Тройка | 54,912 | 2.1128% | 47 |
| Две пары | 123,552 | 4.7539% | 21 |
| Одна пара | 1,098,240 | 42.2569% | 2.37 |
| Старшая карта (без стрита/флеша) | 1,302,540 | 50.1177% | 2.0 |
Быстрые выводы
• Роял-флеш встречается в 4 из 2 598 960 возможных комбинаций из 5 карт — примерно 1 из 649 740.
• Более 92% всех пятикарточных комбинаций — это «одна пара» или хуже; примерно половина состоит из одной старшей карты.
Выводы формул (избранные)
Флеш-рояль
Вам нужен AKQJ-10 в одном костюме. Всего 4 костюма, поэтому:
N_{\text{royal}}=4 \quad\Rightarrow\quad P(\text{royal})=\frac{4}{\binom{52}{5}}\approx 1.539\times 10^{-6} ,(0.000154%)Стрит-флеш (за исключением роял-флеша)
В каждой масти 10 ранговых последовательности (от A-5 до 10-A), за исключением королевской карты; всего 4 масти:
N_{\text{sf (ex-royal)}}=10\cdot 4 - 4 = 36
Одна пара
Выберите ранг пары; выберите 2 масти; выберите 3 различных боковых ранга; выберите 1 масть для каждого бокового ранга:
N_{\text{one pair}}=\binom{13}{1}\binom{4}{2}\binom{12}{3}4^{3}=1{,}098{,}240 P(\text{одна пара})=\frac{1{,}098{,}240}{\binom{52}{5}}\approx 0.422569 ; (42.2569%)Фулл-хаус
Выберите ранг для поездок и другой ранг для пары; подберите масти соответственно:
N_{\text{full}}=\binom{13}{1}\binom{4}{3}\binom{12}{1}\binom{4}{2}=3{,}744Смыв (за исключением прямого смыва)
Выберите масть (4 способа), затем выберите любые 5 из 13 карт этой масти (без порядка), вычтите стрит-флеши этой масти:
N_{\text{flush ex-sf}}=4\binom{13}{5}-40=5{,}108(Всего 10 стрит-последовательностей × 4 масти = 40 стрит-флешей; 4 из них — роял-флеши.)
3) От подсчета до принятия решений: шансы банка и ожидаемая прибыль
Если действие приводит к результатам x_i с вероятностями p_i, то ожидаемое значение равно
\mathrm{EV}=\sum_i p_i x_i
Колл считается прибыльным, когда \mathrm{EV}>0. Быстрый тест на точку безубыточности сравнивает вашу вероятность выигрыша с шансы на выигрыш:
- Коэффициенты банка (соотношение) = \dfrac{\text{сумма для колла}}{\text{банк после колла}}
- Вероятность безубыточности выигрыша п^*:
p*=\frac{\text{сумма вызова}}{\text{сумма вызова}+\text{порция}}
Пример. Банк = 90 долларов; оппонент ставит 10 долларов; вы делаете ставку в 10 долларов → после ставки банк = 110 долларов.
p^*=\frac{10}{110}\approx 9.09%
Если ваши шансы на улучшение (и при этом на победу) превышают 9.09%, то колл имеет положительное ожидаемое значение фишек (без учета будущих улиц).
4) Правила выхода и приближения (Правило 4 и 2)
An out это невидимая карта, которая повышает ваши шансы на победу.
- Впереди еще одна карта (река): P(\text{попадание})\approx \frac{k}{46}\approx 2k%
- Впереди две карты (тёрн + ривер): P(\text{попадание})\approx 4k%
Типичные варианты выхода:
- Открытый стрит-дро: к = 8 → ~32% по реке
- Флеш-дро после флопа: к = 9 → ~36% по реке
- Две старшие карты (одна из них парная по риверу, грубая карта): k\approx 6 → ~24%
Точный флеш на ривере после флеша из четырех карт на флопе (еще два флеша впереди).
Промахнуться мимо обеих улиц: \frac{39}{47}\cdot\frac{38}{46}\approx 0.676
Так что меня накрыло рекой: 1-0.676=0.324 ; (32.4%) — прекрасно согласуется с правилом 4 (9 аутов → ~36%).
5) Python: проверка количества совпадений, вывод таблицы вероятностей и моделирование.
5.1 Подсчет и вывод стандартных вероятностей
import math
def nCk(n, k): return math.comb(n, k)
total = nCk(52, 5)
counts = {
"royal_flush": 4,
"straight_flush_ex_royal": 36,
"four_of_a_kind": 624,
"full_house": 3744,
"flush_ex_straight_flush": 5108,
"straight_ex_straight_flush": 10200,
"three_of_a_kind": 54912,
"two_pair": 123552,
"one_pair": 1098240,
"high_card": 1302540,
}
for hand, c in counts.items():
p = c / total
print(hand, c, f"{100*p:.6f}% (1 in {round(1/p):,})")
5.2 Шансы банка и вспомогательные средства EV (правило 4/2 уже заложено)
def break_even_prob_to_call(to_call, pot_before_call):
pot_after_call = pot_before_call + to_call
return to_call / pot_after_call
def approx_hit_prob(outs, cards_to_come=2):
if cards_to_come == 2: return min(1.0, outs * 4 / 100)
if cards_to_come == 1: return min(1.0, outs * 2 / 100)
raise ValueError("cards_to_come must be 1 or 2")
def call_chip_ev(to_call, pot_before_call, win_prob):
pot_after_call = pot_before_call + to_call
return win_prob * pot_after_call - (1 - win_prob) * to_call
# Example: flush draw after flop (9 outs), pot $90, need to call $10
to_call, pot = 10, 90
p_be = break_even_prob_to_call(to_call, pot)
p_est = approx_hit_prob(outs=9, cards_to_come=2)
ev = call_chip_ev(to_call, pot, p_est)
print("Break-even:", round(100*p_be, 2), "% | Est. win prob:", round(100*p_est, 2), "% | EV:", round(ev, 2))
5.3 Миниатюрный Монте-Карло (Внимание, очень упрощенное описание)
Эта приблизительная симуляция сравнивает ваши закрытые карты с картами случайной руки, раздавая 5 общих карт и сравнивая 5 лучших.
import random from collections import Counter from itertools import combinations ranks = "23456789TJQKA"; suits = "CDHS" deck = [r+s for r in ranks for s in suits] def hand_rank_5(cards5): rs = [c[0] for c in cards5]; ss = [c[1] for c in cards5] is_flush = len(set(ss)) == 1 vals = sorted([ranks.index(r) for r in rs]) is_straight = all(vals[i]+1 == vals[i+1] for i in range(4)) or vals == [0,1,2,3,12] cnt = Counter(rs).most_common() pattern = sorted([c for _, c in cnt], reverse=True) if is_straight and is_flush: cat = 8 elif pattern == [4,1]: cat = 7 elif pattern == [3,2]: cat = 6 elif is_flush: cat = 5 elif is_straight: cat = 4 elif pattern == [3,1,1]: cat = 3 elif pattern == [2,2,1]: cat = 2 elif pattern == [2,1,1,1]: cat = 1 else: cat = 0 order = [] for r,c in sorted(cnt, key=lambda x:(x[1], ranks.index(x[0])), reverse=True): order += [r]*c key = tuple(sorted([ranks.index(r) for r in order], reverse=True)) return (cat, key) def best_5_from_7(cards7): best = None for comb in combinations(cards7, 5): rank = hand_rank_5(comb) if best is None or rank > best: best = rank return best def simulate_heads_up(hole_hero, iters=5000): wins = ties = 0 for _ in range(iters): d = deck.copy() for c in hole_hero: d.remove(c) random.shuffle(d) villain = d[:2]; board = d[2:7] hero_best = best_5_from_7(hole_hero + board) vill_best = best_5_from_7(villain + board) if hero_best > vill_best: wins += 1 elif hero_best == vill_best: ties += 1 return (wins + 0.5*ties) / iters # Example: AK suited print("AKs win rate (est.):", round(100*simulate_heads_up(["A S".replace(" ",""), "K S".replace(" ","")], iters=8000), 2), "%")
6) От подсчета к стратегии: изучите границы возможного.
В таблице указаны точные шансы для пятикарточной игры. Решения в реальном Холдеме зависят от обстоятельств: флоп, терн и ривер раскрывают информацию, которая меняет ваши варианты развития событий. Используйте правило Rule of 4 and 2 для быстрых приближений и проверяйте адекватность с помощью EV. В случае сомнений, смоделируйте ситуацию.
7) Советы по подготовке к экзамену / Практический контрольный список
- Запомните таблицу пятикарточных комбинаций; знайте, какие комбинации карт действительно редкие.
- Пробивка отверстий и правило 4/2 до настоящего момента.
- Всегда сравнивайте вероятность выигрыша с точкой безубыточности. п^*.
- Запишите найденные вами близкие по результату комбинации — позже произведите точные вычисления.
- Используйте небольшие эксперименты методом Монте-Карло для калибровки интуиции.
Заключение
Комбинаторика показывает, насколько редка каждая пятикарточная комбинация. Условная вероятность и приближения (ауты, правило 4/2) позволяют быстро принимать решения. Ожидаемое значение и шансы банка преобразуют убеждения в действия, а небольшие симуляции подтверждают ваши рассуждения. Вы не избавитесь от неопределенности, но замените догадки структурой и дисциплиной.

