程序员的脑力瑜伽操04-寻找你的恋人

上篇:程序员的脑力瑜伽操03-约翰麦卡锡的间谍问题

公布答案啦:

    首先我们认识一下单向函数

        我摘取了维基百科的定义:

单向函数 (One-way function)是一种具有下述特点的单射函数:对于每一个输入,函数值都容易计算(多项式时间),但是给出一个随机输入的函数值,算出原始输入却比较困难(无法在多项式时间内使用非确定性图灵机计算)。

    拉宾就是采用“单向函数”的算法得出了解决方案。冯·诺依曼当时提出过一个单向函数,很出名。是这样描述的:

假设有个x,x有100位数字,该数值的平方值很容易计算,平方后的结果有200位数字,在这200位数字中我们取中间的100个数字,称为y。如果我给你x,你通过平方后取中间100位,得出y值。但如果我给你y值,让你计算我手中的x值,却很难逆向得出x值。

    拉宾采取的就是冯·诺依曼的这个单向函数思想。

    具体方案如下:

        假设守卫知道如何计算平方后取中,而且他们有一份y值列表,每个y值对应一个间谍。当间谍来到边境的时候,间谍会告诉守卫他的x值和姓名。守卫核对x的平方取中是否等于y(同时核对间谍没有进入过其他地方)。如果守卫喝酒漏嘴,把手中y值列表也就是间谍名单泄漏了,更或者连平方取中这个“加密规则”也告诉了敌军,那现在敌军即使有了一份y值列表和平方取中规则,敌军也很难逆向算出x,然后赋予自己间谍一个x值(名字好赋予,名单上有)。

    

    不过拉宾的方案引出了一个问题,就是"你怎么验证某个函数(就像我们这里的平方取中函数)很难逆向求解“的问题。感兴趣的猿媛们可以自行搜索。

如果猿媛们有更好的想法,比如都想到公钥私钥此类的,欢迎补充。

----------------------------------------------------------------------------------------------------------------

04弹:寻找你的恋人

    在一个小王国中,有8个村子(A~H)。如下图所示,各个村之间有道路相连(黑点表示村子,线表示道路)。而你要寻找流浪在这个王国的你的唯一的恋人。

    你的恋人住在这8个村子中的某一个里。她每过一个月便顺着道路去另外一个村子,这个村子是和上个月住的村子一定是直接相连的,比如恋人这个月住在G村,那么下个月就住在“C/F/H中的某个村子”,因为C/F/H3个村子只要一条直线或弧线和G村项链。恋人选择哪个村子是随机的,预测不了。

    目前你手头上只有这么一个确凿的信息:12个月前,恋人住在G存,请求出这个月恋人住在A存的概率。

    

    恋人,你在A村概率多大呢?

    讨论第第三个问题回复,加上Tag03,如   Tag03:我的评论

    讨论第四个问题时候加上Tag04,如  Tag04:我的评论


转载于:https://my.oschina.net/game007/blog/118416

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值