量化面試綠皮書:23. 醉酒乘客

文中內容僅限技術學習與代碼實踐參考,市場存在不確定性,技術分析需謹慎驗證,不構成任何投資建議。

23. 醉酒乘客

100名乘客排隊登機,每人持有一張對應座位的機票(第n位乘客的座位號為n)。
第一位乘客喝醉后隨機選擇了一個座位(每個座位被選中的概率相等)。
其他乘客清醒時會按票就座,但若自己的座位已被占,則會隨機選擇一個空座位。

Q: 假設你是第100位乘客,求你坐到座位100的概率。

A: 在100名乘客登機的問題中,第一位乘客隨機選擇一個座位(每個座位被選中的概率相等),后續乘客如果發現自己的座位空閑則按票就座,否則隨機選擇一個空閑座位。目標是求第100位乘客坐到座位100的概率。

通過分析,發現無論乘客總數 n n n 是多少( n ≥ 2 n \geq 2 n2),最后一位乘客坐到自己的座位的概率始終為 1 2 \frac{1}{2} 21?。這一結論可以通過以下關鍵觀察得出:

  • 座位 1 1 1(第一位乘客的座位)和座位 n n n(最后一位乘客的座位)在隨機選擇過程中扮演對稱角色。
  • 當有乘客被迫隨機選擇座位時(即發現自己的座位被占用),空座位集合包括座位1、座位 n n n和其他一些座位。
  • 在隨機選擇過程中,座位 1 1 1和座位 n n n被選中的概率相等。
  • 如果座位 1 1 1在座位 n n n之前被選中,則后續所有乘客(包括第 n n n位)都能坐到自己的座位,因此第 n n n位乘客坐到座位 n n n
  • 如果座位 n n n在座位 1 1 1之前被選中,則座位 n n n被提前占用,第 n n n位乘客無法坐到座位 n n n
  • 由于在每一步隨機選擇中,座位 1 1 1和座位 n n n被選中的概率相同,因此座位 1 1 1在座位 n n n之前被選中的概率為 1 2 \frac{1}{2} 21?,這意味著第 n n n位乘客坐到座位 n n n的概率為 1 2 \frac{1}{2} 21?

對于 n = 100 n = 100 n=100,這一概率同樣適用。

因此,第100位乘客坐到座位100的概率為:

1 2 \boxed{\dfrac{1}{2}} 21??

Python 實現

以下是使用Python實現的代碼,通過模擬登機過程計算第100位乘客坐到座位100的概率,并驗證理論值1/2:

import random
from typing import Setdef simulate_boarding(n: int, num_simulations: int) -> float:"""模擬乘客登機過程,計算最后一位乘客坐到正確座位的概率。根據概率理論,無論總乘客數多少(n≥2),最后一位乘客坐到正確座位的概率恒為1/2。本函數通過蒙特卡洛模擬驗證該理論。Args:n (int): 乘客總數(座位總數),要求n≥2num_simulations (int): 模擬實驗次數Raises:ValueError: 如果n < 2Returns:float: 最后一位乘客坐到正確座位的概率估計值"""# 參數校驗if n < 2:raise ValueError("乘客總數n必須至少為2")success_count = 0  # 記錄成功次數(最后一位坐到正確座位)for _ in range(num_simulations):# 初始化座位狀態:用集合跟蹤剩余空座位available_seats: Set[int] = set(range(n))# 第一位乘客隨機選座(0~n-1均勻分布)first_passenger_choice = random.choice(list(available_seats))available_seats.remove(first_passenger_choice)# 中間乘客(第2位到第99位)登機for passenger in range(1, n - 1):  # 乘客索引1到n-2(共n-2位)# 如果自己的座位空閑,直接入座if passenger in available_seats:available_seats.remove(passenger)# 座位被占則隨機選擇空座位else:chosen_seat = random.choice(list(available_seats))available_seats.remove(chosen_seat)# 最后一位乘客(第100位)登機:檢查唯一剩余座位last_seat = available_seats.pop()if last_seat == n - 1:  # 檢查是否是正確座位(索引n-1對應座位100)success_count += 1return success_count / num_simulations# 參數設置
PASSENGERS = 100  # 乘客總數
SIMULATIONS = 100_000  # 模擬次數# 執行模擬并打印結果
probability = simulate_boarding(n=PASSENGERS, num_simulations=SIMULATIONS)
print(f"模擬次數: {SIMULATIONS:,}")
print(f"第{PASSENGERS}位乘客坐到正確座位的概率: {probability:.6f}")
print(f"理論概率值: 0.500000")
print(f"絕對誤差: {abs(probability - 0.5):.6f}")

代碼說明

  1. 強類型規范

    • 所有變量和返回值均使用類型注解(如Set[int]
    • 函數參數明確標注類型(n: int
    • 添加了詳細的文檔字符串(docstring),包含參數說明和返回值解釋
  2. 核心邏輯

    • 初始化:創建座位集合available_seats(0~99)
    • 第一位乘客:隨機選擇任意座位
    • 中間乘客
      • 若自己座位空閑則入座
      • 若被占則隨機選擇空座位
    • 最后一位乘客:檢查剩余的唯一座位是否是99號(對應座位100)
  3. 概率計算

    • 通過success_count統計成功次數
    • 返回成功頻率作為概率估計值
  4. 理論驗證

    • 打印理論值0.5作為參照
    • 顯示絕對誤差驗證準確性

輸出示例

模擬次數: 100,000
第100位乘客坐到正確座位的概率: 0.502590
理論概率值: 0.500000
絕對誤差: 0.002590

算法分析

  • 時間復雜度 O ( num_simulations × n ) O(\text{num\_simulations} \times n) O(num_simulations×n),單次模擬需處理 n n n 位乘客
  • 空間復雜度 O ( n ) O(n) O(n),維護座位集合
  • 準確性:10萬次模擬可使誤差小于0.01(95%置信度)

這道面試題的本質是考察候選人將復雜隨機過程抽象為概率模型的能力利用遞歸與對稱性進行問題降維的思維,這類能力直接對應量化金融中高頻交易撮合、信用風險傳染建模以及衍生品路徑依賴定價的核心挑戰。

🔑 核心知識點

  1. 隨機過程建模
    • 登機過程本質是帶吸收態的馬爾可夫鏈:座位占用狀態轉移具有無后效性
  2. 遞歸問題分解
    • 當第 k k k 位乘客發現座位被占時,問題規模遞歸降為 n ? k + 1 n-k+1 n?k+1 的子問題
  3. 概率不變性原理
    • 關鍵洞察:最后一位乘客的成功概率恒為 1 2 \frac{1}{2} 21? n ≥ 2 n \ge 2 n2),與總人數無關
  4. 吸收態分析
    • 座位 1 1 1 和座位 n n n 構成雙吸收態,其被占順序決定最終結果

📊 面試評估維度

考察維度具體表現要求本題對應點
隨機建模能力將現實場景轉化為概率模型識別座位占用過程的馬爾可夫鏈特性
遞歸思維建立自相似問題結構當乘客隨機選座時,問題規模遞歸減小
對稱性洞察發現系統隱含的不變量證明座位1和n的對稱性導致 P ( n ) = 1 2 P(n) = \frac{1}{2} P(n)=21?
金融映射能力關聯抽象模型與金融場景類比信用違約鏈式反應(一家機構違約引發隨機傳染)或交易所訂單流擁堵問題

🧩 典型回答框架

  1. 定義關鍵事件

    • 事件A:第 1 1 1 位乘客直接坐自己座位(概率 1 n \frac{1}{n} n1?)→ 第 n n n 位必然坐對
    • 事件B:第 1 1 1 位乘客坐第n位座位(概率 1 n \frac{1}{n} n1?)→ 第 n n n 位必然坐錯
    • 事件C:第 1 1 1 位坐第 k k k 位座位( 2 ≤ k ≤ n ? 1 2 \le k \le n - 1 2kn?1, 概率 n ? 2 n \frac{n-2}{n} nn?2?
  2. 遞歸分解

    P n = 1 n × 1 + 1 n × 0 + 1 n ∑ k = 2 n ? 1 P n ? k + 1 P_n = \frac{1}{n} \times 1 + \frac{1}{n} \times 0 + \frac{1}{n} \sum_{k=2}^{n-1} P_{n-k+1} Pn?=n1?×1+n1?×0+n1?k=2n?1?Pn?k+1?

    • 當第1位占 1 1 1 座時,第 21 21 21 k ? 1 k-1 k?1 位正常入座,問題退化為 n ? k + 1 n-k+1 n?k+1 人子問題
  3. 數學歸納證明

    • 基準情形: n = 2 n=2 n=2 P 2 = 1 2 P_2 = \frac{1}{2} P2?=21?
    • 假設 P m = 1 2 P_m = \frac{1}{2} Pm?=21? 對所有 m < n m < n m<n成立
    • 代入遞歸式得 P n = 1 n + n ? 2 n ? 1 2 = 1 2 P_n = \frac{1}{n} + \frac{n-2}{n} \cdot \frac{1}{2} = \frac{1}{2} Pn?=n1?+nn?2??21?=21?
  4. 對稱性論證

    • 在整個過程中,座位1和座位 n n n 被隨機選中的概率始終相等
    • n n n 位坐對當且僅當座位 n n n 比座位 1 1 1 更晚被占用

💡 核心洞察

  1. 系統魯棒性

    • 無論乘客規模 n n n 如何增大( n ≥ 2 n \ge 2 n2),系統最終收斂到相同概率,反映復雜系統中的相變現象
  2. 金融場景隱喻

    • 風險傳染:類比首個機構違約后,風險在金融網絡中隨機擴散至特定機構的概率
    • 訂單流分析:高頻交易中單一錯誤訂單引發交易所撮合系統連鎖反應的建模
  3. 模型擴展方向

    • 若加入乘客選座偏好(如總是優先選擇靠窗座位),模型可延伸至行為金融場景
    • 若醉漢乘客數增加,可建模系統性風險壓力測試的臨界閾值

風險提示與免責聲明
本文內容基于公開信息研究整理,不構成任何形式的投資建議。歷史表現不應作為未來收益保證,市場存在不可預見的波動風險。投資者需結合自身財務狀況及風險承受能力獨立決策,并自行承擔交易結果。作者及發布方不對任何依據本文操作導致的損失承擔法律責任。市場有風險,投資須謹慎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87563.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87563.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87563.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AntV G6入門教程

以下教程聚焦于 AntV?G6 的 數據操作 API,詳細介紹各個方法的用途、參數以及完整的使用示例,幫助你在圖實例上精細地讀取、修改和管理節點/邊/組合等數據。文中示例代碼均基于 G6 v5.0.47 官方文檔 ([g6.antv.antgroup.com][1])。 一、獲取完整圖數據 1.1 graph.getData() …

67、數據訪問-crud實驗-分頁數據展示

67、數據訪問-crud實驗-分頁數據展示 分頁數據展示是數據訪問中常見的功能&#xff0c;用于將大量數據分割成多個頁面顯示&#xff0c;提升用戶體驗和系統性能。以下是分頁數據展示的相關介紹&#xff1a; #### 基本原理 1. **確定每頁顯示數量**&#xff1a;設定每頁顯示的數…

常見 Web 服務器

Web 服務器有很多種&#xff0c;功能和用途略有不同&#xff0c;下面我會分類介紹主流的 Web 服務器&#xff08;包含靜態/動態/反向代理支持&#xff09;并重點說明類似 Tomcat 的 Java 支持型。 常見 Web 服務器分類 類型名稱描述與特點&#x1f310; 靜態資源服務器Nginx高…

【MacOS】M3 Pro芯片MacBook極速搭建Kubernetes

M3 Pro 芯片 MacBook 2023上使用 Colima 安裝 Kubernetes。 Colima 輕量、高效&#xff0c;并且在 Apple Silicon 架構上表現出色。 下面是詳細的、一步一步的安裝和配置指南。 核心思路 我們將通過以下步驟完成整個過程&#xff1a; 準備工作: 安裝必要的工具&#xff0c;…

import { Add, Dongdong, UserAdd } from ‘@nutui/icons-react‘ 使用圖標導入庫報錯

import { Add } from "nutui/icons-react-taro"; 官網的導入的庫名字不全&#xff0c;后面要加-taro&#xff0c;就行了

猿人學js逆向比賽第一屆第七題

分析響應 看到響應體里面的data是個字體加密&#xff0c;于是這里可以看到woff文件也給返回了&#xff0c;這里現分析這個文件。 打開可以看到這里a351對應的是3和頁面中的3是對應的&#xff0c;于是用ddddocr動態識別字體文件中的字體&#xff0c;然后對應對應的字體替換是不…

股票心理學習篇:交易的人性弱點 - 頻繁交易

以下內容為學習時的筆記整理&#xff0c;視頻作者來自B站&#xff1a;老貓與指標 視頻鏈接&#xff1a;頻繁交易必死&#xff1f;底層邏輯深度剖析&#xff0c;老貓的的破局心法與實戰策略分享 交易的人性弱點 - 頻繁交易 主講人&#xff1a; 老貓 1. 引言&#xff1a;問題的…

WPF入門 #1 WPF布局基礎、WPF樣式基礎、WPF數據模板、WPF綁定

WPF當中有許多的布局容器控件&#xff0c;例如<Grid>、<StackPanel>、<WrapPanel>、<DockPanel>、<UniformGrid>。接下來分別介紹一下各個布局容器控件。 布局基礎 Grid <Grid><Grid.RowDefinitions><RowDefinition Height&qu…

開源大型語言模型的文本記憶新突破!

在現代科技的推動下&#xff0c;人工智能領域正在不斷地突破人類認知的極限。今年&#xff0c;由斯坦福大學、康奈爾大學和西弗吉尼亞大學的計算機科學家們&#xff0c;與法律學者共同展開了一項引人入勝的研究&#xff0c;聚焦于開源大型語言模型的文本記憶表現。這項研究不僅…

LeetCode 3090.每個字符最多出現兩次的最長子字符串

題目鏈接 https://leetcode.cn/problems/maximum-length-substring-with-two-occurrences/ 題目描述 給定一個字符串 s&#xff0c;找出滿足每個字符最多出現兩次的最長子字符串&#xff0c;并返回其長度。 示例 輸入&#xff1a;s "aabba" 輸出&#xff1a;5解…

使用開源NVIDIA cuOpt加速決策優化

使用開源NVIDIA cuOpt加速決策優化 文章目錄 使用開源NVIDIA cuOpt加速決策優化決策優化的現實挑戰供應鏈優化的復雜性實時決策的挑戰計算復雜性的挑戰 NVIDIA cuOpt&#xff1a;GPU加速的決策優化解決方案cuOpt的核心技術架構支持的優化問題類型性能優勢分析 實際應用案例&…

【JVM 09-垃圾回收】

垃圾回收 筆記記錄 1. 如何判斷對象可以回收1.1 引用計數法1.1.1 缺點 1.2 可達性分析算法1.2.1 可達分析、根對象1.2.2 優缺點 1.3 四種引用(強軟弱虛)1.3.1 軟引用的實際使用案例1.3.2 軟引用-引用隊列1.3.3 弱引用的實際使用案例 2. 垃圾回收算法2.1 標記清除算法2.2 標記整…

《二叉搜索樹》

引言&#xff1a; 上次我們結束了類和對象的收尾&#xff0c;之后我們就要學習一些高級的數據結構&#xff0c;今天我們先來看一個數據結構-- 二叉搜索樹。 一&#xff1a; 二叉搜索樹的概念(性質) 二叉搜索樹又稱二叉排序樹&#xff0c;它或者是一棵空樹&#xff0c;或者是…

【Redis】Sentinel哨兵

&#x1f6e1;? 深入理解 Redis Sentinel&#xff1a;高可用架構的守護者 在實際開發中&#xff0c;我們常用 Redis 構建緩存系統或數據中間件。然而&#xff0c;主從復制雖然能實現數據同步&#xff0c;但無法自動故障轉移&#xff08;failover&#xff09;&#xff0c;這就…

Shell腳本應用及實戰演練

文章目錄 一、Shell腳本語言的基本結構1、Shell腳本的用途&#xff1a;2、 Shell腳本基本結構&#xff1a;3、 創建Shell腳本過程4、 腳本注釋規范 二、Shell腳本語言的變量用法詳解位置與預定義變量 三、 Shell字符串詳解1、Shell字符串拼接2、Shell字符串截取3、 Shell的格式…

軟件工程瀑布模型學習指南

軟件工程瀑布模型學習指南 一、瀑布模型核心概念 1.1 定義與特點 瀑布模型是一種經典的軟件開發流程,將項目劃分為順序性的階段,每個階段有明確的輸入和輸出,如同瀑布流水般單向推進。其特點包括: 階段間具有明確的順序性和依賴性強調文檔驅動和階段評審適合需求明確、穩…

獲取gitlab上項目分支版本(二)

獲取gitlab上項目分支版本_gitlab代碼分支版本在哪-CSDN博客 原先寫過一版&#xff0c;但是這次想更新一下項目的分支信息時&#xff0c;提示我 git服務器上的Python版本是2.7.3&#xff0c;這個錯誤表明當前Python環境中沒有安裝requests庫&#xff0c;服務器也沒有連接外網&…

主流防火墻策略繞過漏洞的修復方案與加固實踐

主流防火墻策略繞過漏洞的修復方案與加固實踐 流量關鍵點分析&#xff08;攻擊手法&#xff09; 攻擊者通過精心構造的TCP序列號攻擊和惡意標志組合繞過防火墻DPI檢測&#xff0c;核心手法如下&#xff1a; TCP連接建立&#xff08;正常握手&#xff09; 1049&#xff1a;客戶…

泛微OAe9-后端二開常見數據庫操作

泛微OAe9-后端二開常見數據庫操作 文章目錄 泛微OAe9-后端二開常見數據庫操作一、RecordSet1 RecordSet 操作OA本身的表2 RecordSet 操作OA 本身的存儲過程 二、RecordSetTrans三、RecordSetDataSource四、原生 jdbc 一、RecordSet RecordSet 適用于操作 OA 自己的庫。OA 數據庫…

【數據分析八:hypothesis testing】假設檢驗

本節我們講述假設檢驗和抽樣方法 有關假設檢驗的詳細內容&#xff0c;可以參考我以往的博客 概率論與數理統計總復習_概率論與數理統計復習-CSDN博客文章瀏覽閱讀1.5k次&#xff0c;點贊33次&#xff0c;收藏23次。中科大使用的教輔《概率論和數理統計》&#xff0c;帶大家復…