量化面試綠皮書:1. 海盜分金博弈

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

1. 海盜分金博弈

五個海盜搶走了一個裝滿 100 枚金幣的箱子。作為一群民主的海盜,他們同意以下分配戰利品的方法:最資深的海盜將提議分配硬幣。所有的海盜,包括最資深的海盜,都會進行投票。如果至少50%的海盜(在本例中為3名海盜)接受提議,則黃金按提議進行分配。如果沒有,則將最高級的海盜喂給鯊魚,然后從下一個最高級的海盜開始這個過程.…重復這個過程,直到一個計劃被批準。你可以假設所有的海盜都是完全理性的:他們首先想活下去,其次是獲得盡可能多的金子。最后,作為嗜血的海盜,如果在其他方面均等的結果之間做出選擇,他們希望船上的海盜更少。

Q: 金幣最終將如何分配?

A: 根據海盜的分配規則和理性行為(優先生存、其次最大化金幣、最后在金幣相同情況下希望船上海盜更少),我們從海盜數量最少的情況開始逆向推理,逐步推導出五個海盜時的分配方案。

  1. 一個海盜(只剩 P5)

    • P5 提出方案,拿走所有 100 枚金幣。
    • 投票:僅 P5 一人,100% 支持,方案通過。
    • 分配:P5 得到 100。
  2. 兩個海盜(P4 和 P5)

    • P4 提出方案。需要至少 50% 支持(2 的 50% 為 1,即至少一票支持)。
    • P4 會投票支持自己的方案,因此即使 P5 反對,方案也能通過(P4 一票支持即滿足條件)。
    • P4 可以提出:自己拿 100,P5 拿 0。
    • 分配:P4 得到 100,P5 得到 0。
  3. 三個海盜(P3、P4、P5)

    • P3 提出方案。需要至少 50% 支持(3 的 50% 為 1.5,向上取整需至少 2 票支持)。
    • P3 會投票支持自己,因此還需要一票支持。
    • 如果方案被拒絕,P3 被淘汰,進入兩個海盜情況(P4 得 100,P5 得 0)。
    • P5 在拒絕情況下得 0,因此 P3 可以賄賂 P5:給 P5 1 枚金幣,P5 會支持(1 > 0)。
    • P4 在拒絕情況下得 100,但 P3 無需賄賂 P4(成本高)。
    • 方案:P3 得 99,P4 得 0,P5 得 1。
    • 投票:P3 支持、P5 支持(兩票支持),方案通過。
  4. 四個海盜(P2、P3、P4、P5)

    • P2 提出方案。需要至少 50% 支持(4 的 50% 為 2,需至少 2 票支持)。
    • P2 會投票支持自己,因此還需要一票支持。
    • 如果方案被拒絕,P2 被淘汰,進入三個海盜情況(P3 得 99,P4 得 0,P5 得 1)。
    • P4 在拒絕情況下得 0,因此 P2 可以賄賂 P4:給 P4 1 枚金幣,P4 會支持(1 > 0)。
    • P3 在拒絕情況下得 99,賄賂成本高;P5 在拒絕情況下得 1,如果給 1 枚,金幣相同但海盜更少時 P5 可能反對(嗜血偏好),因此賄賂 P4 更劃算。
    • 方案:P2 得 99,P3 得 0,P4 得 1,P5 得 0。
    • 投票:P2 支持、P4 支持(兩票支持),方案通過。
  5. 五個海盜(P1、P2、P3、P4、P5)

    • P1 提出方案。需要至少 50% 支持(5 的 50% 為 2.5,向上取整需至少 3 票支持)。
    • P1 會投票支持自己,因此還需要兩票支持。
    • 如果方案被拒絕,P1 被淘汰,進入四個海盜情況(P2 得 99,P3 得 0,P4 得 1,P5 得 0)。
    • P3 在拒絕情況下得 0,因此 P1 可以賄賂 P3:給 P3 1 枚金幣,P3 會支持(1 > 0)。
    • P5 在拒絕情況下得 0,因此 P1 可以賄賂 P5:給 P5 1 枚金幣,P5 會支持(1 > 0)。
    • P2 在拒絕情況下得 99,賄賂成本高;P4 在拒絕情況下得 1,如果給 1 枚,金幣相同但海盜更少時 P4 可能反對,因此賄賂 P3 和 P5 更劃算。
    • 方案:P1 得 98,P2 得 0,P3 得 1,P4 得 0,P5 得 1。
    • 投票:P1 支持、P3 支持、P5 支持(三票支持),方案通過。

根據上述推理過程,我們可以生成如下表格來展示分配方案:

海盜數量P5P4P3P2P1
1100
20100
31099
401099
5101098

在五個海盜的情況下,金幣分配如下:

  • 最資深海盜(P1):98 枚金幣
  • 第二資深海盜(P2):0 枚金幣
  • 第三資深海盜(P3):1 枚金幣
  • 第四資深海盜(P4):0 枚金幣
  • 最年輕海盜(P5):1 枚金幣

總金幣:98 + 0 + 1 + 0 + 1 = 100 枚。

Python實現

要解決海盜分金問題,我們可以使用逆向歸納法(從最少海盜數開始逐步推導到5個海盜),并通過Python代碼實現這一邏輯。以下是完整的代碼實現:

from typing import Dict, List, Tupledef pirate_allocation(total_pirates: int) -> Dict[int, int]:"""計算海盜分配金幣的最優策略。Args:total_pirates (int): 海盜總數。Returns:Dict[int, int]: 每個海盜的金幣分配方案,鍵為海盜編號(從1到total_pirates),值為金幣數量。"""# 存儲不同海盜數量的分配方案allocations: Dict[int, Dict[int, int]] = {}# 基礎情況:1個海盜allocations[1] = {1: 100}# 從2個海盜開始逐步計算到指定數量的海盜for n in range(2, total_pirates + 1):# 獲取n-1個海盜時的分配方案prev_alloc: Dict[int, int] = allocations[n - 1]# 計算每個非提議者海盜在下一輪(n-1海盜)中的收益next_round_gains: List[Tuple[int, int]] = []for i in range(2, n + 1):  # 當前海盜編號i(從2到n)# 在下一輪中,當前海盜的編號變為i-1gain_in_next: int = prev_alloc.get(i - 1, 0)next_round_gains.append((i, gain_in_next))# 按下一輪收益升序排序,收益相同則按海盜編號升序next_round_gains.sort(key=lambda x: (x[1], x[0]))# 計算通過方案所需總票數(向上取整)total_votes_needed: int = (n + 1) // 2votes_to_buy: int = total_votes_needed - 1  # 需要收買的海盜數# 初始化當前分配方案(所有海盜0金幣)curr_alloc: Dict[int, int] = {pirate: 0 for pirate in range(1, n + 1)}total_cost: int = 0# 收買代價最小的votes_to_buy個海盜for idx in range(votes_to_buy):pirate_id, next_gain = next_round_gains[idx]bribe_amount: int = next_gain + 1  # 必須比下一輪收益多至少1金幣curr_alloc[pirate_id] = bribe_amounttotal_cost += bribe_amount# 剩余金幣歸提議者(1號海盜)curr_alloc[1] = 100 - total_cost# 存儲當前海盜數的分配方案allocations[n] = curr_allocreturn allocations[total_pirates]# 計算5個海盜的分配方案
result: Dict[int, int] = pirate_allocation(5)
print("金幣分配方案(海盜編號從最資深到最年輕海盜):")
for pirate, coins in sorted(result.items()):print(f"海盜{pirate}: {coins}枚金幣")

輸出結果

金幣分配方案(海盜編號從最資深到最年輕海盜):
海盜1: 98枚金幣
海盜2: 0枚金幣
海盜3: 1枚金幣
海盜4: 0枚金幣
海盜5: 1枚金幣

代碼邏輯詳解

  1. 基礎情況處理:當只有1個海盜時,他獨占全部100枚金幣。
  2. 逆向歸納
    • 從2個海盜開始逐步計算到5個海盜。
    • 對于每個海盜數量n
      • 獲取n-1個海盜時的分配方案(作為下一輪基準)。
      • 計算每個非提議者海盜(編號2~n)在下一輪中的預期收益。
      • 將這些海盜按下一輪收益排序(收益低者優先,收益相同則按編號升序)。
      • 計算通過方案所需票數:ceil(n/2)(通過整數除法(n+1)//2實現)。
      • 提議者(1號海盜)需要收買ceil(n/2)-1個海盜,選擇代價最小的海盜(給下一輪收益+1金幣)。
      • 剩余金幣歸提議者所有。
  3. 輸出結果:返回5個海盜時的分配方案。

關鍵點說明

  • 理性行為:海盜優先考慮生存,其次最大化金幣,最后在同等收益下希望減少海盜。
  • 投票邏輯:提議者只需確保獲得剛好足夠的贊成票(包括自己的一票)。
  • 收買策略:提議者會收買在下一輪收益最低的海盜,用最小代價(下一輪收益+1金幣)換取支持。
  • 嗜血特性:通過嚴格大于下一輪收益的出價規避嗜血影響(避免海盜因嗜血而投反對票)。

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

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

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

相關文章

購物商城網站 Java+Vue.js+SpringBoot,包括商家管理、商品分類管理、商品管理、在線客服管理、購物訂單模塊

購物商城網站 JavaVue.jsSpringBoot,包括商家管理、商品分類管理、商品管理、在線客服管理、購物訂單模塊 百度云盤鏈接:https://pan.baidu.com/s/10W0kpwswDSmtbqYFsQmm5w 密碼:68jy 摘 要 隨著科學技術的飛速發展,各行各業都在…

用mediamtx搭建簡易rtmp,rtsp視頻服務器

簡述: 平常測試的時候搭建rtmp服務器很麻煩,這個mediamtx服務器,只要下載就能運行,不用安裝、編譯、配置等,簡單易用、ffmpeg推流、vlc拉流 基礎環境: vmware17,centos10 64位,wi…

Java 高頻面試題場景(二):老年健康手環數據管理系統

系列文章 序號文章名稱1Java 高頻面試題場景(一):社區智能充電樁管理系統2Java 高頻面試題場景(二):老年健康手環數據管理系統文章目錄 系列文章一、項目信息項目介紹技術棧主要工作二、面試題及回答1. **面試官問**:在這個老年健康手環數據管理系統項目中,為什么要用R…

Python爬蟲爬取天貓商品數據,詳細教程【Python經典實戰項目】

Python爬取天貓商品數據詳細教程 一、前期準備 1. 環境配置 Python環境:確保已安裝Python 3.x版本,建議使用Anaconda或直接從Python官網下載安裝。第三方庫: requests:用于發送HTTP請求。BeautifulSoup:用于解析HTM…

Symbol as Points: Panoptic Symbol Spotting via Point-based Representation

文章目錄 AbstractIntroductionRelated WorkVector Graphics RecognitionPanoptic Symbol SpottingPoint Cloud Segmentation MethodFrom Symbol to PointsPrimitive positionPrimitive feature Panoptic Symbol Spotting via Point-based RepresentationBackboneSymbol Spotti…

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()獲取任意值的類型對象1.2、reflect.ValueOf()1.3、結構體反射 2、文件操作2.1、os.Open()打開文件2.2、方式一:使用Read()讀取文件2.3、方式二:bufio讀取文件2.4、方式三:os.ReadFile讀取2.5、寫…

[閉源saas選項]Pinecone:為向量數據庫而生的實時語義搜索引擎

目錄 Pinecone:為向量數據庫而生的實時語義搜索引擎 一、什么是 Pinecone? 二、Pinecone 是開源的嗎?支持私有化部署嗎? 三、為什么需要向量搜索? 四、Pinecone 的核心優勢 五、使用 Pinecone 的典型流程 六、在…

【Maniskill】使用Ppo的官方基線訓練時出現指標突然“塌陷”的現象

1. 問題描述 1.1 在使用官方代碼進行訓練的時候“success_once突然掉落到0” 簡要說明你在使用官方 examples/baselines/ppo/baselines.sh 腳本訓練 PickCube-v1 時,在 early stage(如前 50 k 步)指標正常、success_once 接近 1,…

本地部署大模型實戰:使用AIStarter一鍵安裝Ollama+OpenWeb教程(含最新版本更新指南)

大家好!今天給大家帶來一個本地部署大模型的詳細教程 ,主要介紹如何通過 AIStarter 4.0 一鍵部署 Ollama OpenWeb 的完整流程。如果你還在為在線大模型不穩定、隱私泄露等問題煩惱,那么本地部署 將是一個非常不錯的選擇! 首先&am…

Redis大量key集中過期怎么辦

當 Redis 中存在大量 key 在同一時間點集中過期時,可能會導致以下問題: 請求延遲增加:Redis 在處理過期 key 時需要消耗 CPU 資源,如果過期 key 數量龐大,會導致 Redis 實例的 CPU 占用率升高,進而影響其他…

【Linux 學習計劃】-- 系統中進程是如何調度的(內核進程調度隊列)

目錄 回顧進程優先級與進程調度的引入 內核runqueue圖例 關于queue[140]前100個位置 | 實時進程與分時進程 遍歷需要調度的進程與bitmap的引入 active、expired指針 結語 回顧進程優先級與進程調度的引入 在我們之前的學習中,我們是有學習過進程優先級這個概…

【Spring AI 1.0.0】Spring AI 1.0.0框架快速入門(1)——Chat Client API

Spring AI框架快速入門 一、前言二、前期準備2.1 運行環境2.2 maven配置2.3 api-key申請 三、Chat Client API3.1 導入pom依賴3.2 配置application.properties文件3.3 創建 ChatClient3.3.1 使用自動配置的 ChatClient.Builder3.3.2 使用多個聊天模型 3.4 ChatClient請求3.5 Ch…

微信小程序開發一個自定義組件的詳細教程

以下是一個微信小程序自定義組件的詳細教程,覆蓋開發文檔中的核心知識點。我們將以一個包含屬性、事件、插槽、生命周期等功能的按鈕組件為例進行說明: 一、創建組件 在 components 目錄下新建 custom-button 文件夾,包含以下文件&#xff…

模電——第四講場效應管

定義:具有正向受控作用的半導體器件 分類:MOS(絕緣柵)場效應管和結性場效應管 區別:場效應管相比于晶體管,輸入電阻很大,是單極型器件 MOS場效應管: 特性曲線 利用半導體表面的電…

[藍橋杯]堆的計數

堆的計數 題目描述 我們知道包含 NN 個元素的堆可以看成是一棵包含 NN 個節點的完全二叉樹。 每個節點有一個權值。對于小根堆來說,父節點的權值一定小于其子節點的權值。 假設 NN 個節點的權值分別是 1~NN,你能求出一共有多少種不同的小根堆嗎&…

論文閱讀:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻譯 自動駕駛技術作為推動交通和城市出行變革的催化劑,正從基于規則的系統向數據驅動策略轉變。傳統的模塊化系統受限于級聯模塊間的累積誤差和缺乏靈活性的預設規則。…

WebRTC中的幾個Rtp*Sender

一、問題: webrtc當中有幾個比較相似的類,看著都是發送RTP數據包的,分別是:RtpPacketToSend 和RtpSenderVideo還有RtpVideoSender以及RTPSender,這說明什么呢?首先,說明我會很多連詞&#xff0…

EFI(x64)簡易開發環境

文章目錄 1 必須文件2 運行環境3 構建應用 (Visual Studio)4 引用 EDK2 頭文件 1 必須文件 EDK2: 可以只拉取倉庫本身, 不拉取其子倉庫(完整構建才需要) qemu: qemu 以源碼發布, QEMU for Windows – Installers (64 bit) 這里有民間構建的安裝包 2 運行環境 創建一個 root …

八皇后問題深度解析

八皇后問題深度解析 一、八皇后問題的起源與背景1.1 問題起源1.2 歷史發展 二、問題描述與約束條件2.1 問題描述2.2 約束條件 三、算法原理:回溯算法3.1 回溯算法概述3.2 八皇后問題的回溯算法實現思路 四、八皇后問題的多語言實現4.1 Python實現4.2 C實現4.3 Java實…

Cursor 工具項目構建指南: Python 3.8 環境下的 Prompt Rules 約束

簡簡單單 Online zuozuo: 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo :本心、輸入輸出、結果 簡簡單單 Online zuozuo : 文章目錄 Cursor 工具項目構建指南: Python 3.8 環境下的 Prompt Rules 約束前言項目簡介技術棧…