一道北大强基题背后的故事(一)——从走弯路到看答案

news2024/11/24 3:33:23

早点关注我,精彩不错过!

42c545618cfbe992d1a46a28683621d4.png

在前面的系列文章《我的数学学习回忆录——一个数学爱好者的反思(二)》中,我从宏观层面回忆了我的数学学习历程和反思。其实,我和数学之间还有很多很多意识流一样的交流和故事,它会时不时在我的生活中可爱地蹦跶出来。有时源于突然记起的公式,有时源于工作生活中联想回去的特定场景。它代表着我那时候的记忆定格以及以我今天的思维碰撞后的结果,有时能擦出令人惊喜的思维火花。

我很乐意记录和分享这些学习思考的乐趣,它也像砖瓦一样构筑着让我觉得安全的思考大厦。

这个系列的灵感源于看到一道北大强基考试题,先看题:

计算:[((1 + sqrt(5)) / 2) ^ 12]

这是一道整数部分估算题。

那就来看看我的解题和思考之旅吧!

算法逻辑的硬算

如今的我,早就忘了当年的各种奇淫技巧,倒是对用计算机思维程序性地解决问题熟练在心。于是我二话不说,直接开始按程序逻辑硬算。

首先,需要解析这个表达式成一个假想的计算树结构,树顶(也就处理它用的栈的是栈底)的最后一步计算是向下取整,即所有小于等于它的整数中的最大值。如果是精确表达的有限小数,算出来后抹去小数点后的即为所求;如果是有理数,本质也一样,可以化为分数以后化为连分数后剔除不足1的部分即为所求。负数的话问题也不大,注意符号带来的变化就是了,总之都是可以按逻辑执行解决的。

但是,如果对象是无理数(容易证明非完全平方数的sqrt都是无理数,以之为唯一参数x,仅用一次的有理数内四则运算后的p / q * x + a仍然为无理数;更多根号有理数的和,包括pi,n次方根的情况需要另外讨论),那理论上需要求出一个值域范围,不能包含任何不在边界上的整数,而不是那种可以左右摇摆的四舍五入近似结果,才能保证下界准确求得。(根据整数部分的定义证明)

显然这里取整运算之前是无理数,因为1 + sqrt(5)) / 2就是上述无理数,而12次方根据二项式定理,剔除掉那些因为平方变回有理数的部分,剩余的依然是p / q * x + a的计算形式的无理数。

故我们需要求得取整前的无理数的估算值,更准确来说是一个足够计算整数部分值的开区间范围。好在,所有的计算无非在四则运算范围内,那自然可以用计算机提供的相关接口解决,由此估算出一个上下限内不包含整数的范围即为所求。

另外,在带入近似解去求范围之前,本身可以把sqrt(5)的无理数部分当成参数进行符号运算,并且可以用sqrt(5) ^ 2 = 5的式子消解和化简,这种符号计算依旧可抽象为CFG语法描述的AST树的解析,并无不可解之处。这属于计算机代数系统,最有名的莫过于wolfram的系统,在python,matlab等上也都有相应实现。

另外,按数学里学过的二项式定理,它本质上是形如(ax + by) ^ n的二元一次完全幂次的多项式计算的结论公式,因为其系数的计算刚好符合组合数公式,有结果的优雅性。而从计算角度而言,用指数计算本身有复杂度为o(logn)级别的算法,此时复杂度为o(n ^ 2 * logn),n ^ 2为平方一个多项式的复杂度;而用上二项式定理结论的话则是o(n)(后一项的计算都可以由前一项在单位时间内计算而得);如果是求其中一个特殊的指定x次幂为m的一项,还可以进一步优化到o(m),但直接按指数算的就没有任何优势了。这里可以初步看到,对数学规律的符号化挖掘,发现规律,用了更好的数学计算模型以后,对计算速度的帮助。

然而,这里需要令sqrt(5) = y,才符合以上的一切推理,而忽略了sqrt(5)这个数的定义带来的一个非常重要的sqrt(5) ^ 2 = 5的化简性质。这使得指数算法的复杂度又瞬间降低到了o(logn),因为每次产生的二次项都会被消掉,使得实际要平方计算的项数永远都只有2项,等价的次幂仍然是1次。

当我处在一个有计算机资源的环境下,哪怕只需要解决一个问题,我也一定力图写出通用代码批量解决这一类问题,而不是一个。当然,如果解决一类的方法在解决一个时仍然高效,那为了这个一个也要把一类解决了。当然,思维的抽象层次可以很高,但是代码的层次需要适当。

这里,根据指数计算算法,我们尝试把取整里面的式子化为:(X * X ^ 2) ^ 2 ^ 2,X = (1 + sqrt(5)) / 2。

这显然就剩下了4次运算了,比12就这个特例都省去了2 / 3的计算次数。不过,这在并非n趋于无穷的趋势下的特例上就绝对有效,以及还要人类对每种运算本身的单次运算时间的差距,这都很影响计算时间估计的系数,在无穷时是弟弟,具体数值时可就猴子称霸王了。同时,我们还需要了解自己,知道自己在哪种类型的计算上的效率最高,用准确率和速度都相对有最大优势的方法去计算,找到自己当下水平估计下的预期以及此时的执行最优解,这也是分析的一部分。

于是这里很容易可以求得:

(X * X ^ 2) ^ 2 ^ 2 = ((1 + sqrt(5)) / 2 * (3 + sqrt(5)) / 2) ^ 2 ^ 2 = (2 + sqrt(5)) ^ 2 ^ 2 = (9 + 4sqrt(5)) ^ 2 = 161 + 72sqrt(5)

当然,这里是严格按照递归算法的思路手动拆解的结果,而实际上我们正向计算的时候,一般会算到X ^ 2, X ^ 4, X ^ 8,然后发现12 = 8 + 4,就地取材把值算出来了。不过对计算机而言,上面的递归更好描述,而这个方法,倒是有点像进制数分解算法。复杂度也相同,只是这么迭代更符合人脑的处理逻辑,不用有堆那么多栈的压力,还能完成一些特殊条件下的巧算。

再把sqrt(5) = 2.236带入计算,即可求出估算值。

算法逻辑的碰壁

我以为这题就要被我暴力地搞出来了,但是要严谨地证明式地把值放心地求出来,可不是一件容易的事。

注意前面说了,这里理论上要严格求整数部分,需要取得一个sqrt(5)的一个上下界,使得最后的结果范围也不包含任何整数,然后看到161不影响整数包含情况先剔除。

72放大到100的话,需要0.01左右级别的精度,故计算下2.23得160.56,如果2.237时小于161就得证了。但一算发现,居然超过了,只能继续提高精度。在2.236上则是160.992,然而我们一般记忆到sqrt(5)的小数点后3位时的6,代表着有可能是2.355+...或者2.364-...,后者竟然又超过了161,这就让想确定最终答案是321还是322的孩子们十分纠结了。如果你算到这时候放弃了,那你就只值得期望为0.5的得分值,可别怪什么运气不好。

不行,一条道走到黑,得动用终极大招,开方公式!再往下算一位小数,发现是2.2360,不超过161,但2.2361仍然超过,再算到2.23606和2.23607这两个数把sqrt(5)夹在中间,才最终确认161的整数部分成立。

奇妙的数学解法

好吧,写了这么多就只是为了记录一个严谨而愚蠢的错误思路。虽然得到了答案,但这个计算量,精度,速度,细心和耐心的要求已经远远超出了一个正常自主招生题考察的本意,也使得凡人基本不可能从这条直接的通路上在有限时间内而脑算出答案。

也就是说,计算机通用的那套方法,在解题思路上,和有限条件下折中的方法上,行不通啊!

我们还需要在特定时间条件下,对给定的目标问题,拆解规划出真正可行的思路。

此时我开始回想,在儿时学习解数学题的过程中,本就从来都没有这么考察硬算的题目(纯考试经验技巧,无道理可言)。从今天的观点看虽然是几乎唯一的逻辑解,但那是没有考虑人脑以及有限时间的条件的。而数学题给我眼前一亮的表面原因一直是,竟然可以这么做,好漂亮的解法!

这时,我们来看一下神奇的解答:

a.  构造斐波那契数列:b_(n + 2) = b_(n + 1) + b_n,令b1 = 1, b2 = 3;

b.  递推计算,知b12 = 322;

c.  写出bn的通项公式:bn = ((1 + sqrt(5)) / 2) ^ n + ((1 - sqrt(5)) / 2) ^ n;

d.  取n = 12, ((1 + sqrt(5)) / 2) ^ 12 + ((1 - sqrt(5)) / 2) ^ 12 = 322;

e.  因为((1 - sqrt(5)) / 2) ^ 12必然在(0, 1)内,因此[((1 + sqrt(5)) / 2) ^ n] = b12 - 1 = 321。

没错,就这么完了!

但是对此题的真正理解才刚刚开始,出题人到底是怎么想出这题的,这么考察合适吗?还是只是魔术秘密般毫无规律的巧合?

以及,我们要如何学习解题?解数学题的本质到底是什么?

在日思夜想中,我不断探究着它的本质,欲知后事如何,下期见!

3f13fe172a93c22c2dd47d42d4eb8d30.gif

我们是谁:

MatheMagician,中文“数学魔术师”,原指用数学设计魔术的魔术师和数学家。既取其用数学来变魔术的本义,也取像魔术一样玩数学的意思。文章内容涵盖互联网,计算机,统计,算法,NLP等前沿的数学及应用领域;也包括魔术思想,流程鉴等魔术内容;以及结合二者的数学魔术分享,还有一些思辨性的谈天说地的随笔。希望你能和我一起,既能感性思考又保持理性思维,享受人生乐趣。欢迎扫码关注和在文末或公众号留言与我交流!

6b3d55df718ffc9e0be2898b5a918c4b.gif

921829bd39fd0f70bf2c811f95ebc851.png

6e6790741828ceb9c72d2017e73cf83a.jpeg

扫描二维码

关注更多精彩

用排列组合来编码通信(七)——《我的5/4张牌的预言》

好魔术背后的秘密

对称思维的妙用之从解题到本质(六)——网红鸭子半圆概率问题的多种解法

文字对称中的数学与魔术(八)——魔术《抓牌奇迹》与系列总结

魔术缘何而给你惊喜?

6cd9416c51ebe93f3e032307938395b1.gif

点击阅读原文,往期精彩不错过!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/575258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

训练DeeplabV3+来分割车道线

本例我们训练DeepLabV3语义分割模型来分割车道线。 DeepLabV3模型的原理有以下一些要点: 1,采用Encoder-Decoder架构。 2,Encoder使用类似Xception的结构作为backbone。 3,Encoder还使用ASPP(Atrous Spatial Pyramid Pooling)&…

听听飞桨框架硬核贡献者如何玩转开源!

当仰望星空时,你在想什么?我在想象,未来可能是什么样子。从应用广泛的人工神经网络,到火遍全网的AIGC,创造新宇宙的人,相信永远看不到天花板。 在这些神奇的AI产品背后,有一个了不起的开源项目—…

滴滴时空供需系统的设计和演进

本篇文章分为: 1.背景介绍 2.系统框架的演进 2.1 旧系统框架的不足 2.2 新系统框架的优势 3.系统建设思考 3.1 存储治理 3.2 性能优化 3.3 研发提效:配置化能力升级 3.总结 1. 背景介绍 时空供需系统(SDS, supply and demand system)是为了满足滴滴网约车…

开箱即用的工具函数库xijs更新指南(v1.2.6)

xijs 是一款开箱即用的 js 业务工具库, 聚集于解决业务中遇到的常用函数逻辑问题, 帮助开发者更高效的开展业务开发. 接下来就和大家一起分享一下 v1.2.6 版本的更新内容以及后续的更新方向. 贡献者列表: 1. 计算变量内存calculateMemory 该模块主要由 zhengsixsix 贡献, 我们可…

leetcode练习(汇总插入区间)

文章目录 题目一:汇总区间题目二:插入区间 语言:python 工具:jupyuter 题目一:汇总区间 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c…

“程序员,致敬!”

手机震动,提醒着我3年前参加研发的应用迎来了一次重大升级。我按下开源社区提供的合并请求按钮,与开源社区的朋友分享我对这个项目的改进。不久,一条消息提醒我合并请求已被其它社区成员审核通过。 这种远程协作、开源分享的方式是如今广泛存…

chatgpt赋能python:Python数值计算指南:为什么它是一种强大的工具

Python数值计算指南:为什么它是一种强大的工具 当谈到数值计算时,许多人所想到的编程语言都是MATLAB和R。然而,Python也在数值计算领域有着强大的地位。Python是一种令人难以置信的通用编程语言,它不仅为数据科学和机器学习提供了…

行人检测重识别yolov5+reid(跑通+界面设计)

行人检测重识别yolov5reid(跑通界面设计) 参考源代码: github 权重文件: 根据github上面的网盘进行权重下载: 检测:将 ReID_resnet50_ibn_a.pth放在person_search/weights文件下,yolov5s.pt放person_sear…

如何用海外代理辅助对接 ChatGPT

许多朋友问我有没有好用的海外代理。说实话,真的好用的并不多。 最近我了解到了一家还不错的海外代理,叫做 IPIDEA,我已经使用了一段时间了,觉得质量挺不错。 你可能知道,我最近在进行一些 ChatGPT 相关的研究&#xf…

DTW 2023:戴尔发力多云战略与边缘运营

近日,2023戴尔科技全球科技大会(Dell Technologies World,简称DTW)在美国拉斯维加斯如期而至。 作为戴尔科技集团一年一度的科技盛宴,本届DTW吸引了众多业界人士的关注。而作为本届大会的重头戏,戴尔科技集…

Spark学习笔记

1 spark简介 (1) spark是基于内存计算的分布式并行计算框架,如今已成为apache软件基金会最重要的三大分布式计算系统开源项目之一(Hadoop、Spark、Storm)。 (2) spark组件 (3) spark组件应用场景 Spark Streaming:提供流计算功能 Sparl SQL&#xff1…

Python实现循环的最快方式(for、while等速度对比)

众所周知,Python 不是一种执行效率较高的语言。此外在任何语言中,循环都是一种非常消耗时间的操作。假如任意一种简单的单步操作耗费的时间为 1 个单位,将此操作重复执行上万次,最终耗费的时间也将增长上万倍。 while 和 for 是 …

JavaCV - 图像暗通道去雾

一、效果图 二、实现原理 暗通道先验:首先说在绝大多数非天空的局部区域里,某一些像素总会有至少一个颜色通道具有很低的值,也就是说该区域光强是一个很小的值。所以给暗通道下了个数学定义,对于任何输入的图像J,其暗通道可以用下面的公式来表示:其中JC表示彩色图像每个…

SOFA Weekly|SOFAChannel#33 直播预告、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展 欢迎留言互动~ SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&am…

阿里、腾讯、京东齐降价:云计算迎来新拐点

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 618源于京东创办日(创办于2004年6月18日),发展至今,618已然成为中国两大最火爆的消费节点之一。每年618,京东都会推出覆盖全品类的优惠政策,并以严格的…

chatgpt赋能python:Python捕获所有异常

Python 捕获所有异常 Python是一种易用、高效的编程语言,广泛应用于Web开发、数据科学、人工智能等领域。在Python编程中,异常处理是一项重要的技能,因为程序总会出现各种异常情况,如输入错误、网络错误、程序崩溃等等。Python提…

矿井水除氟——高矿化度矿井水氟化物深度降解的技术方案

高矿化度矿井水是指含有高浓度溶解性矿物质的废水,通常指的是含有高浓度钠、钙、镁、铁、铝、钾等离子的废水。这些离子通常来自于废水所处的环境、工业或生产过程中使用的原材料和化学品。高矿化度的废水通常具有高盐度、高电导率、高硬度等特征,对环境…

(十七)ArcGIS 属性表生成GUID字段

ArcGIS 属性表生成GUID字段 目录 ArcGIS 属性表生成GUID字段 1.GUID概念2.GUID格式3. ArcGIS 属性表生成GUID字段3.1新建GUID字段3.2生成GUID字段 1.GUID概念 全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度…

堆的实现+堆的应用(堆排序和Topk)

珍惜当下的一切,相信未来的一切都是美好的。 -- 丹尼尔迪凯托目录 一.堆的概念及结构 二.堆的各种函数的实现 1.结构体的内容 2.堆的初始化 3.堆的插入 4.堆的向上调整法 5.验证堆的向上调整法 6.堆顶的删除 7.堆的向下调整法 8.返回堆…

【Python】使用百度AI能力

知识目录 一、写在前面✨二、百度AI能力介绍三、植物识别四、总结撒花😊 一、写在前面✨ 大家好!我是初心,希望我们一路走来能坚守初心! 今天跟大家分享的文章是 Python调用百度AI能力进行植物识别。 ,希望能帮助到大…