近年来,人工智能的春风不知吹动了多少资本的浪潮,从决胜棋坛的阿尔法狗,到遍地开花的无人车,AI成为经济寒冬里熊熊燃烧的火种,不知多少投资客捧着钞票前赴后继。科幻电影中,像人类一样思考、决策、学习的强人工智能何时能问世,目前还是个未解之谜。当前市面上一切AI产品的基础,仍然是传统的电子计算机。

我们知道,计算机科学中有一个“摩尔定律”: 单位面积集成电路上可容纳的元器件的数目,大约每18个月便会增加一倍,其性能也将提升一倍。计算机指数式增长的运算能力,支撑了越来越复杂的应用场景。以棋类运动而言,上世纪末的计算机已经能战胜最优秀的人类国际象棋棋手;而随着计算机硬件的发展、运算能力的提升,比国际象棋计算量更大、场景更复杂的围棋也最终失守。

也就是说,大多数情况下,用计算机解决人类问题的标准思路,都是用计算机强大的运算能力,来强行攻克人类思维范畴里很难通过计算解决的问题。换言之,计算机擅长大力出奇迹。

当这一思路遭遇古代数学难题,又能碰撞出怎样的火花?

1、百鸡问题

今有鸡翁一,值钱伍;鸡母一,值钱三;鸡雏三,值钱一。凡百钱买鸡百只,问鸡翁、母、雏各几何?

这个问题其实是一个不定方程求整数解的问题,相当于列方程+枚举讨论。具体而言,可以设公鸡数量为x,母鸡数量为y,小鸡数量为z。有:

x + y + z = 100

5x + 3y + z/3 = 100

枚举讨论的技巧也很简单,可以先消去一个未知数,然后根据正整数性质,利用整除特性进行枚举。

显而易见计算机最擅于求解这种枚举类的问题,甚至用暴力枚举(除基本条件外,不加分析和简化)也花不了多少时间。比如从0开始枚举上述的公鸡数,最多不会超过20只,否则总价格会超出百钱;在此基础上开始枚举母鸡,母鸡最多不会超过33只,否则总价会超出百钱;然后再在已数公鸡、母鸡的基础上开始枚举小鸡,挑出精确满足百鸡、百钱的组合。

贴一下python代码与计算答案。如果你对编程或python感兴趣的话,完全可以搜索一些在线的教程来学习,这是一门十分简单、适合初学者入门的编程语言,如果有一些英语和数学基础,更能十分轻易地学会。可以看出,在0.2s时间内,该程序利用暴力枚举的手段,给出了百鸡问题的全部四组解。

2、求圆周率

中国古代对圆周率的计算有很长的历史。

早在汉初的《周髀算经》里就提到过“径一周三”的说法,给出了圆周率的近似值3。汉代张衡给出近似值3.16,而刘徽创立割圆术,“割之弥细,所失弥少,割之又割,以至于不可割,则与圆周合体而无所失矣”,我个人认为可以被当做数学领域极限及微积分的起源,最终他得到3.1416的近似值。南朝祖冲之发扬光大,不割不快,得到了3.1415926~3.1415927的近似范围,比西方国家不知早到哪里去了。

当然我们今天不用割圆术。不是不能用,而是割圆术不太容易展现计算机的运算优势,以及大力出奇迹的计算思想。我们采用一种朴素的概率方法。设想有一个正方形,边长为1。我们可以用该正方形两条相邻的边作为半径,画一个四分之一圆弧。现在想象我们往这个正方形里随机地撒豆子(天知道我们怎样保证随机,大概就是闭着眼睛抓着豆子胡乱撒吧)。假如豆子足够小,足够多,最终这个正方形里密密麻麻到处是豆子。接下来我们开始数豆子,数出所有正方形里的豆子数目,N;同时也数出,落在圆弧圈出的扇形区域里的豆子数目,n。有了这两个值,就可以用来估计π。

直观而言,n与N的比值,应当近似等于扇形(也就是四分之一圆)面积与正方形面积的比值。而在计算扇形面积的时候,显然是需要用到π值的,这里的四分之一圆面积为π/4。也就是说存在近似关系:

n : N ≈ π/4 : 1

从而可以得到,π≈ 4n/N。

同样编写一个python程序。可以看出,随机撒下的豆子越多,最终的模拟结果越精确。提到“模拟”,这一方法也就是大名鼎鼎的蒙特卡洛模拟,可以用来近似解决众多难以计算的数学问题。

考虑到时间问题,此处不再做更高精度的计算。

3、根号2。

毕达哥拉斯学派的理论根基是万物皆数。这里的数指的是整数,和可以用整数相除表达的分数。他们认为自然界中的一切,都可以用整数和分数来表达。

然而恰恰是学派中的一名晚辈,希帕索斯,对这个观点提出了质疑。希帕索斯正是利用到老师归纳的毕达哥拉斯定理(也就是西方人的勾股定理),提出:如果说万物皆数,那么等腰直角三角形的斜边,如何用整数或分数来表达呢?

毕达哥拉斯学派从此陷入了恐慌。一大群学者开始试图计算、测量这个斜边值,想要找到它的整数或分数表达形式,可是却怎么也求不出这个值。最终,这群人恼羞成怒,竟然把希帕索斯推入了大海。

我们现在知道,这个三角形的斜边值是一个无理数,无法用分数形式表达。假如直角边长为1的话,斜边长则称为根号二,其数值大约为1.414。那么如何计算这一数值呢?

计算机解决的方案有很多。这里采用最朴素的二分法。考虑函数f(x),要求其任一零点(也就是f(x)=0的点)附近,函数的值分别处于正负两侧。所谓二分法,简单来说,是在求解此零点时,先找到零点左、右两个端点,从这两点出发,取区间的中点,并根据零点的位置,用新得到的中点取代某一个端点,然后不断地逼近零点。

比如y = x^2 – 2在正轴的零点,显然处在1和2之间。以这两点为端点,取区间中点,为1.5,1.5的函数值为正,则接下来取1和1.5为端点……重复这个过程,直到某一步恰好求出了精确解(比如零点是个整数或分数),或者达到了精度要求(比如零点是个无理数),则停止迭代。这里就以0.00001为精度标准,用二分法求解根号2。可以看出,在0.2s,15轮二分迭代后,得到了4位精度的结果。

事实上这道题我在一次算法工程师求职的面试中遇到过。不过我当时写了一个运算效率更高的牛顿迭代法。当然,这就是另一个故事了。

今天展示了一些最基础的计算方法,旨在理解用计算机求解复杂问题的思路(当然这些问题实际上也并不复杂)。那些困扰前人数十年数百年的问题,在计算机强大的运算能力面前,会显得容易得多。这,就是计算机的核心能力。

在我个人的理解里,计算机相比于人类的最大优势,就是上述的计算能力,也就是计算速度,也就是大力出奇迹。以当前席卷互联网行业的深度学习方法为例,事实上深度学习所依赖的神经网络结构,在20世纪70年代美国的“人工智能热潮”中就已经有许许多多的雏形,只不过因为当时计算机算力的限制而没能早早登上历史舞台。而现在的各类深度学习AI算法,其实本质上也还是站在前人的肩膀上摘果子,这些年在图像、语音领域取得的一些成果,本质是仍然蹭了计算机硬件能力爆炸式提升的红利。对于算法本身,更多的仍是试探性结构设计。

在我看来,未来的人工智能之路,其实面临着重大的分歧。一条路是走现在的老路,继续堆硬件,加运算能力,期待量变到质变,也许当计算能力强大到某一个阈值的时候,弱AI与理论上的强AI就不会有太清晰的界限了。另一条就是另辟蹊径,从仿生学的角度重新寻找AI的实现方法。究竟是扬长避短,算力为王,还是革故鼎新,开天辟地呢?

我们拭目以待。

百鸡问题用计算机思维,大力出奇迹:当古代数学难题遇到现代计算机相关推荐

  1. 百鸡问题用计算机思维,大力出奇迹:当古代数学难题遇到计算机

    近年来,人工智能的春风不知吹动了多少资本的浪潮,从决胜棋坛的阿尔法狗,到遍地开花的无人车,AI成为经济寒冬里熊熊燃烧的火种,不知多少投资客捧着钞票前赴后继.科幻电影中,像人类一样思考.决策.学习的强人 ...

  2. 百鸡问题用计算机什么法解决,《穷举法解决问题》教学设计

    一.教学目标 1.知识与技能 ⑴了解穷举法的基本概念及用穷举法设计算法的基本过程. ⑵分析建立正确的数学模型,归纳穷举法穷举技巧. ⑶能够根据具体问题的要求,使用穷举法设计算法,编写程序求解问题. 2 ...

  3. 湖南省计算机二级考试 程序题填空题 百钱百鸡,09年计算机二级辅导:C++百钱百鸡问题的解决方法...

    应该都看过这个题目吧,呵呵,中国古老的问题,原题是"公鸡每只5元,母鸡每只3元,小鸡三只1元,用100元钱买100只鸡,求公鸡,母鸡,小鸡的只数". 这类问题呢,一般都是用穷举法, ...

  4. 计算机思维试题简答题,六年级数学思维练习题及答案

    六年级数学思维练习题及答案 在各个领域,我们会经常接触并使用试题,借助试题可以为主办方提供考生某方面的知识或技能状况的信息.什么样的试题才能有效帮助到我们呢?下面是小编为大家收集的六年级数学思维练习题 ...

  5. c语言百文百鸡问题答案,python_百文买百鸡问题

    百文买百鸡问题 -- 不定方程 -- 公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买100只鸡,如何买? -- 列出方程式 x + y + z = 100 5x + 3y + z/3 ...

  6. java百_Java_百钱买百鸡

    题目:公鸡3文钱,母鸡2文钱,3只小鸡1文钱,百钱买百鸡,求多少公鸡,母鸡,小鸡? public class Work6{ public static void main(String[] args) ...

  7. 华为机试:密码强度等级、百钱买百鸡问题

    1.密码强度等级 题目描述 密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分. 一.密码长度: 5 分: 小于等于4 个字符 10 分: 5 到7 字符 25 分: 大于等于8 个字符 ...

  8. 计算机求百钱买百鸡采用的算法,多种解法求百钱百鸡问题.doc

    多种解法求百钱百鸡问题 学 号: 0121210680225 <算法设计与分析B> 大 作 业 题 目多种解法求百钱百鸡问题学 院计算机科学与技术学院专 业软件工程班 级Sy1201姓 名 ...

  9. 我国古代数学家张邱建在《算经》中出了一道“百钱买百鸡”的问题(java)

    我国古代数学家张邱建在<算经>中出了一道"百钱买百鸡"的问题,题意是这样的:5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡.现在用100文钱买100只 ...

最新文章

  1. Python 2.7.10安装pycurl遇到的问题汇总
  2. java mvc 实际分层_SpringMVC体系分层模式原理图解
  3. 网页中JS函数自动执行常用三种方法
  4. 毕业生简单的用Python实现一个信息管理系统【含示例代码】
  5. 如何更好地理解和应用ITIL
  6. 让Android虚拟手机快速启动
  7. 域用户权限|连接DC终端服务
  8. linux mongo 添加用户名和密码,mongodb3.4 安装及用户名密码设置
  9. Cron表达式在线工具
  10. 肢体语言识别系统OpenPose问世,它甚至能明白你的表情
  11. P/O矩阵、R/D矩阵、IPO图、C/U矩阵知识点
  12. 尚德机构季报图解:净利达1.5亿 抗周期和盈利能力稳健
  13. Opencv中的erode和dilate(腐蚀和膨胀-python实现)
  14. 2022年ITMC畅享杯全国职业院校电子商务技能大赛SEM直通车竞赛平台介绍思路打法
  15. 聚观早报 | 东方甄选与顺丰、京东合作;拼多多跨境电商平台上线
  16. 高速服务器充电桩系统设计方案,高速服务区的充电桩 征集调研贴
  17. c 语言已知两点求第三点,已知3点座标,求第一点到第二点和第三点构成的直线的距离。...
  18. Java制作报表系统流程_finereport报表制作详细过程
  19. 微信小程序实现pdf、word等格式文件上传的方法,微信小程序word文档
  20. 计算机二级c语言停考,计算机等级考试调整Fortran等语言停考

热门文章

  1. 我的win10平板维修,重刷系统的经验,windows pe5.0拯救我的平板
  2. html 怎么获取焦点的位置,jQuery怎么获取焦点?
  3. 前端flyUI的方法使用注意事项
  4. 基于物联网的室内环境监测系统设计的背景
  5. 华为RH5885H V3服务器采集日志
  6. broforce怎呢上机器人_杀戮尖塔机器人怎么玩 机器人卡组教学通关攻略
  7. 为什么弃用lofter
  8. 显示gsensor即时数据的apk 用gsensor来判断手机的静和动 气压计的测试应用
  9. windows无法完成安装若要在此计算机,windows无法完成安装.若要在此
  10. 明日之后服务器什么时候维护好,明日之后选择哪个服好?服务器选择指南