海盗分金问题的一种解答
创始人
2025-05-29 02:09:32
  • 欢迎对非前言部分感兴趣的同学与我讨论

前言

  • 人的一生充满了意外 真的意外

  • 有时候我也受某些同学的启发,觉得自己应该去写点古典诗歌或者科幻小说去养活自己而不是苦逼得学量子力学+热统

  • 还有学科学计算

  • 我们培养一个理论物理学家有多么不容易

  • 往少了说,对于强基计划的同学而言,至少要读8年,还是在少写好几篇论文的情况下......

  • 当然

  • 不排除人家直接润 白培养八年

  • 一句话 乐

  • 物理学院也是很冷漠的 当然只是绝对意义上的 相对于其他学院嘛 好多了

  • 活着

  • 有的人活着就已经用尽了全力

  • 有的物理人活着就已经透支了下辈子的全力

  • 我是比较幸运的

  • 当然有些人本身就已经很幸运的,但还是不太自知

  • 比如某学院某课程某教师 刘星他吧 草房子顶

  • ..一身穿三万元算奢侈

  • ..车子开三十万元的算奢侈

  • ...

  • 没有什么好评价的

海盗分金问题

图片来源于网络 原链接

海盗分金问题的几种解题思路与分析

  • 首先我们要知道海盗分金问题的几个重要环节

  • 海盗为什么要同意这样一种方案

  • 多少海盗同意才能通过这一方案

  • 其次我们要知道这个问题到底有没有解

  • 解的存在性

  • 解的唯一性

  • 事实上,我们忽略掉数学上的证明,直接给出结论

  • 金币足够多时,解是存在且不唯一的

  • 金币不够多时,解不一定存在

  • 解存在的意义是:第一位分金币的人必然可以使他的方案被通过从而不被扔进海里

热力学方法

  • 付费内容

本文提出的一种解法

  • 本文的解法可能存在较大的误差

  • 事实上,本文的解法也不是正确的解法,只是一个相对靠谱的解法,这一点在之后会提到

  • 正确的解法反正我没有找到

解法针对的情况

  • 当且仅当海盗在这一轮分得的金币大于这一轮方案被否决时能获得的金币的最大值,海盗才会同意这一方案

  • 当且仅当同意人数不少于半数时方案才可通过

代码实现

import matplotlib.pyplot as plt
import numpy as np
import time#pass when greater and equal
#see more people to be killedCoins = 100
Pirate = 10
Pass = 0.5def distribute(i,Share,Pirate):count = 0for j in range(i):count += check(Share,i,j)if count/Pirate >= Pass:return Trueelse:flag = Truewhile flag:J = find_min(Share,i)#print("J=",J)Share[i][J] += 1Share[i][i] -= 1#print(Share)#time.sleep(0.5)count = 0for j in range(i):count += check(Share,i,j)#print("count=",count)if (1+count)/(1+i) >= Pass:#print("(1+count)/i=",(1+count)/i)#print("Successfully!")print(Share)flag = Falsereturn Truedef find_min(Share,i):Sum = np.zeros(i-1)for j in range(i-1):Sum[j] = max(Share[j+1:i,j])Sum[j] -= Share[i][j] #print("Sum=",Sum)A = np.where(Sum>=0)#print("A=",A)J = np.where(min(Sum[A])==Sum[A])[0][0]#print("J=",J)#print("find Sum=",Sum)return A[0][J]def check(Share,i,j):T = Share[j+1:i,j]try:M = max(T)except:M = 0#print("Share[j+1:i,j]:",T)#print("max(T)",M)#print("Share[i][j]",Share[i][j])if Share[i][j] > M:#print("i=",i,"YES!")return 1else:return 0def share(Coins,Pirate,Pass):if Pirate == 1:return Coinselif Pirate == 2:return np.array([0,Coins])elif Pirate == 3:return np.array([1,0,Coins-1])elif Pirate == 4:return np.array([0,1,0,Coins-1])elif Pirate == 5:return np.array([2,0,1,0,Coins-3])Share = np.zeros((Pirate,Pirate))Share[0][0] = CoinsShare[1][0] = 0Share[1][1] = CoinsShare[2][0] = 1Share[2][1] = 0Share[2][2] = Coins-1Share[3][0] = 0Share[3][1] = 1Share[3][2] = 0Share[3][3] = Coins-1Share[4][0] = 2Share[4][1] = 0Share[4][2] = 1Share[4][3] = 0Share[4][4] = Coins-3for i in range(5,Pirate):Share[i][i] = Coinsif distribute(i,Share,i):print("SUCCESSFULLY:(i)=",i)passelse:print("ERROR:(i)=",i)return ShareS = share(Coins,Pirate,Pass)
f = open("0.txt","w")
for i in range(len(S)):f.write(str(i)+" ")f.write(str(S[i][i])+"\n")
f.close()

[[100.   0.   0.   0.   0.   0.   0.   0.   0.   0.][  0. 100.   0.   0.   0.   0.   0.   0.   0.   0.][  1.   0.  99.   0.   0.   0.   0.   0.   0.   0.][  0.   1.   0.  99.   0.   0.   0.   0.   0.   0.][  2.   0.   1.   0.  97.   0.   0.   0.   0.   0.][  0.   2.   0.   1.   0.  97.   0.   0.   0.   0.][  0.   0.   2.   2.   1.   0.  95.   0.   0.   0.][  3.   0.   0.   0.   2.   1.   0.  94.   0.   0.][  0.   3.   3.   0.   0.   2.   1.   0.  91.   0.][  0.   0.   0.   3.   3.   0.   2.   1.   0.  91.]]

本文给出的解的分析

  • 这个解是否正确呢,很明显是错误的,因为第五轮时的分配方案不唯一,这导致第六轮以及之后的轮数,分配方案不唯一,从而忽略掉某些解

  • 考虑到我们需要得到解最大值,我们的分析是有问题的,至少是不严谨的

  • 比如我们调整第五轮的分配方案

[[100.   0.   0.   0.   0.   0.   0.   0.   0.   0.][  0. 100.   0.   0.   0.   0.   0.   0.   0.   0.][  1.   0.  99.   0.   0.   0.   0.   0.   0.   0.][  0.   1.   0.  99.   0.   0.   0.   0.   0.   0.][  0.   2.   1.   0.  97.   0.   0.   0.   0.   0.][  2.   0.   0.   1.   0.  97.   0.   0.   0.   0.][  0.   0.   2.   2.   1.   0.  95.   0.   0.   0.][  3.   0.   0.   0.   2.   1.   0.  94.   0.   0.][  0.   3.   3.   0.   0.   2.   1.   0.  91.   0.][  0.   0.   0.   3.   3.   0.   2.   1.   0.  91.]]

相关内容

热门资讯

SpringBoot的单例模式... 目录 Spring使用的设计模式 单例模式简介 Spring所管理的注解 Spring获取对象时加...
小米总裁:一个能打SU7的对手... 5月27日,小米集团总裁、小米品牌总经理卢伟冰在小米一季度业绩电话会上表示,“SU7发布这么久,一款...
港股创新药ETF(159567... 5月30日,港股医药股走强,石药集团涨近8%,消息面上,石药集团在港交所公告,集团目前正与若干独立第...
2023年“网络安全”赛项江苏... 2023年中职组江苏省淮安市“网络空间安全”赛项 ①.2023年中职组江苏省淮安市任务书②.2023...
ArcGIS: 如何利用模型构... 01 实验数据说明chengdu.pix(栅格图像),其中...
从对标星巴克到沦为 “小透明”... 来源 | 伯虎财经(bohuFN)作者 | 林恩凭借“茶饮+烘焙”的双品类模式与对空间体验的执着追求...
图形视图框架QGraphics... QGraphicsScene 该类充当 QGraphicsItems 的容器。它与 QGraphic...
A股三大指数低开 CPO概念跌...   中新经纬5月30日电 30日早间,A股三大指数集体低开,上证指数跌0.14%,报3358.81点...
广东虎门通报小车高架坠桥5人死... 近日,广东东莞环莞快速路虎门段的一起交通事故引发了广泛关注。5月19日,有网友反映其侄儿驾车经过该路...
全球资产再平衡,港股创新药赛道... 近年来,全球资本市场的结构性调整愈发显著。在美联储加息周期临近尾声、地缘博弈常态化背景下,资金正重新...
警惕信创ETF高溢价风险 摘要: 海光信息和中科曙光计划进行资产重组,持有这两只股票权重较高的信创ETF(159537)受到市...
Spring Boot/Clo... 一、前言 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel ...
新思科技:在中国市场销售芯片设... 当地时间5月29日,新思科技称已收到美国商务部工业和安全局 (BIS) 信函,告知新思科技与中国相关...
TIME_WAIT 尽可能客户... 、LISTENING状态   FTP服务启动后首先处于侦听(LISTENING...
蓝桥杯 - 皮亚诺曲线距离 题目描述 皮亚诺曲线是一条平面内的曲线。 下图给出了皮亚诺曲线的 111 阶情形,它是...
卖枕头,真能救酒店? 酒店卖枕... 定焦One(dingjiaoone)原创见习作者 | 何欣欣编辑 | 金玙璠在行业整体规模狂飙突进的...
手写-签名的隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本...
给车机投放广告?深蓝汽车CEO... 文 / 零度来源 / 节点财经5月27日晚间,深蓝汽车在其官方微博账号发文称,“今日,我们关注到部分...
ElasticSearch-第... 目录 ElasticSearch简介 ElasticSearch 应用场景 ElasticSearc...
JAVA练习82-在排序数组中... 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮...
最大值最小值归一化_sklea...  然后我们再来看一下,再来说一下归一化 比如:在公司有两个人,一个是W2 他能力强,然后领导给他分配...
中金公司:微盘风格未来可能仍有... 中金公司研报称,展望未来,微盘风格可能呈现优势边际弱化、仍存在一定结构性机会的格局。政策端对科创小微...
【超详细】MMLab分类任务m... 本文详细介绍了使用MMLab的mmclassification进行分类任务的环境配置、训练与预测流程...
内地优质科技企业“排大队”赴港... 科技企业纷纷涌向港股市场。Wind资讯数据显示,截至5月29日,有5家企业聆讯通过,另有155家企业...
Spring学习(三) Spring的AOP的XML开发(重要指数五颗星*****) 一、AOP...
原创 今... 在1998年房改后,我国房地产市场经历了一次爆发式增长,许多购房者借此机会实现了财富的快速增值,尤其...
原创 A... 5月30日,新股打新市场迎来影石创新的发行申购。它在网上发行656万股,顶格申购需配沪市股票市值6....
15个新一线城市名单出炉,郑州... 【大河财立方 记者 程帅星】5月28日,第一财经旗下新一线城市研究所发布《2025新一线城市魅力排行...
Vector底层源码解析 Java源码系列:下方连接 http://t.csdn.cn/Nwzed 文章目录...
月内3家券商定增迎来新进展,加... 前,证券行业的竞争愈发激烈,资本实力成为券商在市场竞争中制胜的关键因素。近期,证券行业再融资事项迎来...