前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日一题 | 解一个复杂的方程

每日一题 | 解一个复杂的方程

作者头像
TechFlow-承志
发布2020-08-11 16:20:04
4410
发布2020-08-11 16:20:04
举报
文章被收录于专栏:TechFlowTechFlow

昨日题解

每日一题 | 拜占庭将军问题

拜占庭将军问题是由著名的计算机大神图灵奖获得者兰伯特提出来的非常有名的问题,我们把这个问题外面包着的故事背景去除,实际上的内涵其实围绕的是分布式系统当中的一致性问题。在分布式系统当中,当多个节点当中存在部分节点被黑客攻击而成为恶意节点的时候,如何保证集群的一致性和正确性?

关于这个问题的解法很多,从提出至今好几十年当中陆续提出了很多种解法。包括最近很流行的区块链,其实本质上也是解决的分布式系统一致性的问题。

我们选择其中最简单的一种,也是兰伯特大神自己提出来的解决方法,称为口头协议。口头协议描述的是将军和副官模型,我们把第一个传达出自己意见的节点设为将军节点,其他节点是它的副官。这里只是为了说明需要,其实哪一个节点作为将军节点都没有关系。

为了方便阐述,我们把1号节点设为将军节点,2至6号节点设为副官节点。我们希望能够达成这样的效果,如果将军节点是忠诚的,那么所有忠诚的节点都执行将军的命令。如果将军节点是叛徒,那么是否执行将军的命令不再重要,只需要忠诚的节点保持一致即可。

我们假设将军节点是忠诚的情况,对于将军是叛徒的情况也类似,作为忠诚的节点,它向其他所有节点传递的消息是一致的,不会传递虚假的消息。但问题是其他节点并不知道它是不是忠诚的,这时候我们采取什么样的策略呢?其实也很简单,对于忠诚的节点,我们采取的策略是让它询问其他节点接收到的将军命令。

比如说假如2号节点是忠诚的,它会向3至7号节点发起询问,请问你们各自收到的将军的命令是什么?3至7号节点当中最多只有两个叛徒,也就是说正确的结果是占多数的。那么2号节点只需要根据这份信息作出决策即可。

对于其他忠诚的节点也是一样的操作,我们递归询问其他节点接收到将军的命令是什么,从而让叛徒变成少数,这样每个忠诚的节点之间可以保持一致,不会受到叛徒节点的影响。

但很可惜的是这只是一种理想的情况,因为在实际的分布式场景当中,信息的传递是存在延时的。有可能2号节点向3号节点发起询问的时候,它还没有收到将军的消息。所以实际当中这种方法是不可用的,但这并不影响我们理解和学习它的思路。通过这个经典的问题呢,我们也可以对分布式系统有一个浅显的认识。

实际上分兵多路作战在古时候由于通讯不便一直是一个很大的问题,比如著名的明末萨尔浒之战。明朝发动十几万大军合围萨尔浒,想要把满清来个犁庭扫穴。结果没想到多路大军进攻的时机没能保持同步,援军补给也没能跟上。被努尔哈赤各个击破,最终全军覆没,如若不然,大明也不会那么快灭亡,中国的历史必然将要改写。

今日问题

求解出整数x,使得下列方程成立,保证x只有唯一解。

(\sqrt{x-3} - \sqrt{\frac{3x+2}{2}}^3)^7=(x - \sqrt{\frac{x^2 - 1984}{5}})^3
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 昨日题解
    • 每日一题 | 拜占庭将军问题
    • 今日问题
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档