从函数的零点问题到二分法的应用

n枚硬币中找到问题硬币 记录自己遇到的有趣的面试算法题X个硬币,其中有一枚劣质硬币(较轻或者较重未知),现在你有一个天平,请用最少的次数找出劣质硬币!这个问题如果没有最少次数限制非常简单,但是要求最少,就不一样了功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注... 阅读详情
    数学是科学的皇冠,这句话一点也不假,在程序的算法应用上也是这样的。
    众所周知,当数据量很大的时候,采用二分法是非常高效的(使用二分法查找的前提是数据是排好序的,这里不作讨论)。二分法查找的原理来自于数学上的函数的零点问题,也就是求函数的近似值(近似解)。

引用我们的高中数学教材的必修一里面的内容:求f(x)的近似解,通过试验知函数f(x)在区间(a,b)上存在零点。如何找出这个零点?一个直观的想法就是,尽可能的把零点的邻域缩小,当足够小的时候,就可以用近似值代替函数的零点。下面给出步骤
1、确定区间[a,b],验证f(a)*f(b)<0,给定精度**ε**。
2、求(a,b)的中点c。
3、计算f(c)。
    0)若f(c)=0,则c就是零点
    1)若f(a)*f(c)<0,令b=c,此时零点在(a,c)区间上,
    2)若f(c)*f(b)<0,令a=c,此时零点在(c,b)区间上,
4、验证精度是否达到要求,若|a-b|<**ε**,即零点的近似值为a(或者b),若不成立,重复2-4步骤。

下图是函数f(x)=lnx+2x-6求求近似解的示例

	那么,这种每运算一次把问题减少一半的思想,就可以运用到我们的搜索算法去,即将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x。当数据量很大的时候,这种方法就体现出它的威力来了,下面给出c++的代码(偷懒一下,百度来的)
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int a[100]={1,2,3,5,12,12,12,15,29,55};//数组中的数(由小到大)
int k;//要找的数字
int found(int x,int y)
{
    int m=x+(y-x)/2;
    if(x>y)//查找完毕没有找到答案,返回-1
        return -1;
    else
    {
        if(a[m]==k)
            return m;//找到!返回位置.
        else if(a[m]>k)
            return found(x,m-1);//找左边
         else
            return found(m+1,y);//找右边
    }
}
int main()
    {
        cin>>k;//输入要找的数字c语言把cin换为scanf即可
        cout<<found(0,9);//从数组a[0]到a[9]c语言把cout换为printf即可
        return 0;
    }

高一所学的数学都能在算法上发挥如此大的威力,不得不感叹,数学真美。

二分法(一篇文章讲透) 二分法作为一种简单而有效的数值求解方法,在各个领域都有着广泛的应用。通过深入理解其基本原理、实现步骤和优化策略,我们可以更好地利用二分法来解决实际问题。未来,随着计算机技术的不断发展,我们有望看到更多基于二分法的创新应用和优化算法的出现。 阅读详情

相关推荐

Matlab函数零点求解方法

本文介绍了三种常用的求解函数零点的方法:二分法、牛顿法和fsolve 函数。它基于一个简单的原理:如果在一个区间内,函数在两个点的函数值异号,那么在这个区间内一定存在一个零点。在Matlab中,我们经常需要求解函数的零点(即函数在横轴上的根),这对于许多数值计算和工程应用来说非常重要。本文将介绍几种常用的求解函数零点的方法,并提供相应的源代码示例。牛顿法是另一种常用的求解函数零点的方法,它基于函数的局部线性逼近。牛顿法使用函数的导数来逼近函数的零点,并通过迭代来逐步逼近真实的零点。

TechChamp的博客 3546

N个硬币_其中一个假币_不知偏轻或偏重__称K次_找出假币

转载自大连理工的碧海青天站,http://bbs.dlut.edu.cn/nforum/article/Competition/15017 ,7楼。 它说是转载南大小百合,可惜没找到原文,就贴上面这个吧。 约定:共N个硬币,称的次数为K。 先上结论: A型:称出,并告知是重是轻,则      K= [ ln(2*N+3) / ln3 ]  B型:如果不需要告知是重是轻,则为

Peter_Wang_1970的专栏 6333

[C/算法]N硬币问题/称硬币

N枚硬币中,有一枚是假币,并且已知假币与真币重量不同,但不知道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币,设计一个高效的算法来检测出这枚假币。

n枚硬币找出假币问题(包含一枚假币)

问题描述: 在n枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币,设计一个高效的算法来检测这枚假币(以下提供两种方法)。 解题思路1(本例为真币重量大于假币): 使用减治法的解题思路,将硬币分为3堆,则每堆的硬币数量为 n/3 ,但是这是在 n%3==0 的情况下才能成立,所以我们将 n 枚硬币分为

wjyboomshakalaka的博客 2万+

实验银币问题

问题描述与实验目的: 在n个银币中有一个是不合格的,不合格的银币比合格银币要轻。 现用天平秤银币,找出不合格的银币,且在最坏情况下秤银币的次数最少。 输入 输入有若干行。每行上有一个整数n,表示银币个数,n<100000。 当n=0,表示输入结束。 输出 对输入大于0的整数n,输出2行。第1行输出n的值,第2行上先输出“Times:”,接着输出在最坏情况下秤n个银币的最少次数。 当n=0时,这种情况你不必处理和结果输出。

n枚硬币中找假币 其中一个为假

有n枚硬币 从中找出一个硬币 效率较高的方法 类似于减治法

假币问题 (n枚硬币+未知轻重+DFS)

本题用的是减治法,我找了很多网上的写法,但是没有符合我想象中的代码,或者就是题目略有不同,所以决定自己写一个。写的时候花了很长时间处理边界问题。 注意本题是n枚硬币,并且没有事先告知硬币是偏重还是偏轻,因此如果只是根据重量的大小来判断,无法得到正确的答案。

codeslogan 4737

固定时间收敛的控制器设计(基础知识)

针对控制系统的有限时间收敛和固定时间收敛给出一些常用定理。

qq_40241332的博客 1万+

n枚硬币问题(假币问题)——分治法(减治法)

1、8枚硬币问题 在8枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道的是假币与真币相比较是轻还是重。可以通过一架天平来比较两组硬币: 减治法将原问题一分为三,8枚硬币分别表示a,b,c,d,e,f,g,h,从8枚中取6枚在天平两端各放3枚比较,三种结果: a+b+c>d+e+f a+b+c=d+e+f a+b+c<d+e+f 如下所示判定树是完整表...

yisandezhuiqiu的博客 1万+

基于AXI PCIE IP的FPGA PCIE卡示意图

如果在上图中的AXI互联IP上再连接一个带AXI Slave接口的BRAM控制器,这个BRAM控制器连接一个BRAM,Host PC在系统主存中分配了一些不连续的内存,Host PC可以将这些内存段的起始地址(当然要先转为PCIE总线地址)写到AXI总线上的BRAM中,这样AXI CDMA读取BRAM,将读取到的PCIE总线基地址写到AXIPCIE寄存器块中的AXIBAR2PCIEBAR_n寄存器中,这样就实现了SG DMA。通过动态改变AXIBAR2PCIEBAR_n寄存器的值,可以实现多通道DMA。

csdn_gddf102384398的博客 1621

向量数据库安全实战:从Embedding反推到检索越权的全链路防护

随着RAG应用在企业中的普及,向量数据库已成为知识库系统的核心组件。但许多团队对向量数据的安全认知仍停留在传统数据库的账号密码、网络隔离和磁盘加密上。事实上,向量化并非加密,而是一种有损压缩的语义映射,向量本身可以被反推模型还原出原文关键信息,形成高保真的语义泄露通道。同时,相似度检索的模糊匹配特性打破了传统行列权限模型,使得越权检索和成员推断攻击成为新的安全威胁。理解这些原理,有助于企业在数据采集、向量化、索引构建、检索查询等环节构建分层防护体系,包括脱敏、扰动、过滤下推、网关控制等手段。本文从基础概念出

weixin_29323551的博客 257

二分法求方程的根_高中数学:函数零点的概念及求法,用二分法求方程的近似解...

一、知识点1、函数的零点对于函数,我们把使的实数叫做函数的零点。2、方程的根与函数的零点的关系:方程有实数根函数的图象与轴有交点函数有零点。3、函数零点的存在性对函数零点的存在性应从以下几方面进一步理解:(1)函数的图象是连续的,当它通过零点(不是二重零点)时,函数值变号;(2)相邻两个零点之间的所有函数值保持同号;(3)在函数的某一单调区间内,至多有一个零点;(4)如果函数在一个区间上...

weixin_39991935的博客 2083

UR5 机械臂手眼标定(Eye-in-Hand)实战:OpenCV 求解 AX=XB,误差 < 2mm

本文详细介绍了UR5机械臂在Eye-in-Hand配置下的手眼标定实战,通过OpenCV实现高精度标定,最终达到误差小于2mm的工业级精度要求。文章涵盖了标定基础原理、环境搭建、数据采集策略、核心算法实现及误差分析与优化,为视觉机械臂的自主抓取提供了实用指南。

weixin_31476015的博客 294

二分法c语言程序优点,浅析二分法及其Matab与C程序实现.doc

浅析二分法及其Matab与C程序实现PAGE PAGE 1浅析二分法及其Matlab和C程序实现第一部分:二分法浅析用二分法求方程的近似解是紧跟在“函数的零点”之后的教学内容。从联系的角度看,前面一节,学生已经学习了方程的根与函数的零点之间存在着对立统一的关系,这一节则是介绍一种具体的方法来运用这一关系解决问题。从整个教材来分析,这一部分的内容是在“函数的应用”这一大章节之下。新课程标准中强调...

weixin_30539081的博客 224

Jacobi正交多项式在数值分析中的应用与实现

本文深入探讨了Jacobi正交多项式在数值分析中的核心应用与实现。作为最通用的正交多项式族,Jacobi多项式通过参数α和β的调节,可退化为切比雪夫、勒让德等经典多项式,为函数逼近、奇异积分和微分方程求解提供了统一框架。文章重点解析了其在加权高斯积分(高斯-雅可比积分)和谱方法求解微分方程中的关键作用,并提供了基于递归关系和SciPy的稳定高效实现方案,帮助读者掌握这一强大的数值计算工具。

weixin_29306011的博客 243

二分法原理

二分法 编辑 数学方面牛顿二分法 一般地,对于函数f(x),如果存在实数c,当x=c时,若f(c)=0,那么把x=c叫做函数f(x)的零点。 解方程即要求f(x)的所有零点。 假定f(x)在区间(x,y)上连续 先找到a、b属于区间(x,y),使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2], 现在假设f(a)0,a

lorenzoln的专栏 9774

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。提供了 示例以便参考,罗列了 各函数可设属性。希望对绘图的你有所帮助。

weixin_43339605的博客 1945

c语言二分法排序原理,二分法原理是什么意思_二分法排序原理图解

lookup函数查找是遵循 二分法 查找原理,所以要看懂上例中的查找结果,必须要了解什么是二分法查找。(二分法求零点是什么意思ps:与vlookup的遍历查询法不同,lookup的查询原理是二分法,lookup陷阱正与二分法有关,感兴趣的小伙伴可以看看往期教程《lookup函数用法全解(下)——lookup函数的二分法原理》。高中数学 二分法 f m 0 是什么意思 为什么可以结束算法二分...

weixin_35523284的博客 1293

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

二分法matlab_牛顿法和二分法介绍及其在空气处理当中的应用

二分法如上图所示,对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法[1]。二分法解题步骤:给定精确度ε,用二分法求函数f(x)零点近似值的步骤如下:1、确定区间[a,b],验证f(a)·f(b)<0,确保零点在区间[a,b]内2、求区间(a,...

weixin_39564617的博客 303

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数值计算方法 matlab用二分法或简单迭代法求_牛顿法和二分法介绍及其在空气处理当中的应用...

二分法如上图所示,对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法[1]。二分法解题步骤:给定精确度ε,用二分法求函数f(x)零点近似值的步骤如下:1、确定区间[a,b],验证f(a)·f(b)<0,确保零点在区间[a,b]内2、求区间(a,...

weixin_39605455的博客 940

关于二分法

一、适用范围 二分法适用于在一个严格单调序列中找出给定的某个数。 二、二分查找 二分查找很简单啦,这里就不说了。 三、求函数零点 利用二分法求函数零点。 利用零点定理,只要函数在某个区间内单调,且端点值异号,则在该区间存在唯一零点。 每次取区间中点进行判断,根据判断结果缩小区间范围,当满足精度时,区间的左端点(或右端点)即为所求零点。 四、木棒切割问题。 给出长度已知的 n 根木棒,现...

Armstrong的博客 1797

二分法求解相关问题

二分法主要注意:1.平分的两端范围,left和right (一般left取0,right取平均值或者给出数据中的最大值);2.平分的中间端为(left+right)/23.while循环的终止条件为 right-left>1e-6,其中1e-6为0。或者终止条件为right>=left。

YY0503_的博客 1148

编程题:二分法求解-最后一位

二分法定义 对于区间[a,b]上连续且存在f(a)*f(b)的函数f=y(x),通过不断地将函数f(x)的零点所在的区间一分为二,使得区间的两个端点逐步靠近零点,进而得到零点近似值的方法叫做二分法。 最经典的二分法用于求解数学上函数的零点,例如求解3x3-13x+2=0在区间[1,9]的根,具体求解很简单,无非是逐渐二分逼近零点,感兴趣的读者可以自己尝试。 最后一位 这里我要说的是,面对一个具体的...

zseqsc_asd的博客 1139

二分法简介

定义 对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。 例如对于一个连续的范围[0, 10],寻找x2+3x+4=22的一个解, 由于在取值范围内函数是随x单调增的,对于一个单调上升的x序列[0,10],我们要寻找的是最后一个值x使...

weixin_30437481的博客 173
下一篇: 微信跳一跳辅助程序开发,基于C++与opencv图像识别
搬砖大学生
博客等级 码龄14年 29粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值