树和森林 查找

讨论3.1 黄金分割查找?

在二分查找中,我们是取mid等于left和right的中间值,即用等分的方法进行查找.

那为什么一定要等分呐?能不能进行“黄金分割”?也就是mid=left+0.618(right-left),当然mid要取整数。如果这样查找,时间复杂性是多少?也许你还可以编程做个试验,比较一下二分法和“黄金分割”法的执行效率。

c7bed56c2c47405e947f15947296aba9.jpg

黄金分割查找(Golden Section Search)是一种基于斐波那契数列的查找算法,它可以将查找区间划分为两个部分,并选择其中一个部分的中间点作为查找点。这种查找算法的时间复杂度为O(log n),与二分查找相同。

在黄金分割查找中,我们首先将查找区间划分为两个部分,其中一个部分的长度为黄金比例(约为0.618)与另一个部分的长度之和。然后,我们在其中一个部分的中间点进行查找。如果目标元素在这个中间点位置上,则查找结束。否则,我们将根据目标元素与中间点的相对位置来确定下一步的查找区间。

相比于二分查找,黄金分割查找的不同之处在于它将查找区间划分为两个部分,而不是简单地等分。这种划分方式可以使得查找更加细致,从而提高查找的精度和效率。

下面是一个简单的C语言实现黄金分割查找的示例代码:

c

#include <stdio.h>

#include <math.h>

double golden_section_search(double a, double b, double x) {

    double mid, fmid;

    int n = 0;

    while (fabs(a - b) > 1e-6) { // 判断区间是否足够小

        n++;

        mid = a + 0.618 * (b - a); // 计算中间点

        fmid = mid - x; // 计算中间点处的值

        if (fmid < 0) { // 如果目标函数在左半部分,则将右边界缩小为mid

            b = mid;

        } else { // 如果目标函数在右半部分,则将左边界缩小为mid+b-a

            a = mid + b - a;

        }

    }

    printf("Number of iterations: %d\n", n); // 输出迭代次数

    return mid; // 返回中间点处的值

}

这个示例代码实现了一个黄金分割查找函数golden_section_search,它接受三个参数:查找区间的左端点a、右端点b和目标函数在区间内的值x。函数使用while循环进行迭代,直到区间的长度足够小(小于1e-6)为止。在每次迭代中,函数计算中间点的位置和目标函数在中间点处的值fmid,然后根据fmid的正负来确定下一步的查找区间。最后,函数返回中间点处的值。

 树(Tree)是一种非线性的数据结构,通常由节点(Nodes)和边(Edges)组成。树可以表示层次结构,其中节点表示实体,边表示节点之间的关系。

树的基本特点是:

有且仅有一个根节点(Root Node),没有父节点。

其他节点可以有零个或多个子节点(Child Nodes),每个子节点只能有一个父节点。

树中的节点不能有环路(Cycle),即从某个节点出发沿着边不能回到出发节点。

树中的边没有权重,即节点之间的关系没有大小之分。

树有很多种,如二叉树(Binary Tree)、完全二叉树(Complete Binary Tree)、满二叉树(Full Binary Tree)、平衡二叉树(Balanced Binary Tree)、红黑树(Red-Black Tree)等。

树的应用非常广泛,如文件系统、图形学、人工智能、数据压缩等。在计算机科学中,树是常见的数据结构之一,也是许多算法的基础。

7ecd2bd3aa024b9f99aedcae8951ad13.png

 d8ca0e3fcc7e440aa75062f3d5988adb.png

5caacbea2fd9454f8d2f5d1c6bcf4a6a.png

森林

在数据结构中,森林是一个由多个不相交的树组成的集合。每个树都由一个根节点和若干个子树组成,而每个子树也是一个由根节点和若干个子树组成的树。森林中的树之间没有直接的关联,它们之间的关系是通过森林这个集合来定义的。

森林常用于表示一个有多个子问题的复杂问题,每个子问题都可以被视为一棵独立的树。通过将所有子问题的解组合起来,可以获得复杂问题的解。

在数据结构中,森林通常用数组或链表来实现。在数组实现中,每个树都存储在一个连续的内存块中,而树的节点则按照树的深度(从根节点到叶节点的路径长度)排列。在链表实现中,每个树都由一个头节点和若干个子节点组成,子节点通过指针与它们的父节点相连。

森林是一种由多个不相交的树组成的集合,常用于表示一个有多个子问题的复杂问题。

在数据结构中,森林是一个由多个不相交的树组成的集合。每个树都由一个根节点和若干个子树组成,而每个子树也是一个由根节点和若干个子树组成的树。森林中的树之间没有直接的关联,它们之间的关系是通过森林这个集合来定义的。

森林常用于表示一个有多个子问题的复杂问题,每个子问题都可以被视为一棵独立的树。通过将所有子问题的解组合起来,可以获得复杂问题的解。

在数据结构中,森林通常用数组或链表来实现。在数组实现中,每个树都存储在一个连续的内存块中,而树的节点则按照树的深度(从根节点到叶节点的路径长度)排列。在链表实现中,每个树都由一个头节点和若干个子节点组成,子节点通过指针与它们的父节点相连。

总之,森林是一种由多个不相交的树组成的集合,常用于表示一个有多个子问题的复杂问题。

0a11a326965d4a45be181eb08caf12fe.png

d5caff29e52a49078fb50d6a4025f16e.png

b99cb67c862a42929e32cb963d4db1c7.png

45b052dba5dc47d1a2c585d022255cb3.png

12d25409f58d40e69acc8e45f897273b.png

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5G车载网关让医院无人配送车“灵活“起来

​ 5G车载网关应用于无人医院配送车 随着社会老龄化加剧和医疗需求增长,为患者提供及时、便捷的药品配送服务成为医院的一项重要任务。传统的人工配送方式效率低下,无法满足患者的实时配送需求。针对这一痛点,5G车载网关为无人医院配送车提供了有力的技术支撑。 5G车载网关集成…

【vue+baiduMap】百度地图绘制多边形区域

1、创建百度地图应用&#xff0c;获取权限ak 百度地图服务台 Ps.本项目里按钮等基础控件使用的是element-ui版本控件 2、项目内全局引入 index.html页面插入引用代码&#xff1a; <scriptsrc"//api.map.baidu.com/api?v2.0&ak你的密钥"type"text/ja…

SQL编写规范【干货】

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目 2 SQL书写规范 3 SQL编写原则 获取所有软件开发资料&#xff1a;点我获取

如何利用PCB创建PCB封装库

如何利用PCB创建PCB封装库 首先你要活得PCB工程文件&#xff0c;然后利用Altium Designer将工程文件打开&#xff0c;如下图所示&#xff1a; 然后选择工具栏“设计”->“生成PCB库&#xff08;P&#xff09;”&#xff0c;如下图&#xff1a; 最后将生成的库文件保存到指…

【2015年数据结构真题】

用单链表保存m个整数&#xff0c;结点的结构为 [data] [link]&#xff0c;且|data|<n(n为正整数)。现要求设计一个时问复杂度尽可能高效的算法&#xff0c;对于链表中 data 的绝对值相等的结点&#xff0c;仅保留第一次出现的结点而删除其余绝对值相等的结点。例如&#xff…

C#多线程的操作

文章目录 1 使用线程意义2 C#线程开启的四种方式2.1 异步委托开启线程2.2 通过Thread类开启线程2.3 通过线程池开启线程2.4 通过任务Task开启线程 3 前台线程和后台线程简述3.1 前台线程3.2 后台线程 4 简述Thread和Task开启线程的区别4.1 Thread效果展示4.2 Task效果展示4.3 区…

FPGA电平标准的介绍

对FPGA的管脚进行约束的时候&#xff0c;常常看到这样的电平标准&#xff0c;例如LVCOM18&#xff0c;LVCOS25&#xff0c;LVDS&#xff0c;LVDS25等等&#xff0c;其实这些都是一系列的电平标准。 针对数字电路而言&#xff0c;数字电路表示电平的只有1和0两个状态&#xff0c…

2023年【N1叉车司机】找解析及N1叉车司机复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年N1叉车司机找解析为正在备考N1叉车司机操作证的学员准备的理论考试专题&#xff0c;每个月更新的N1叉车司机复审模拟考试祝您顺利通过N1叉车司机考试。 1、【多选题】《中华人民共和国特种设备安全法》第八十三…

Vue 模板语法 v-bind

红色框里面的都是vue的模板。有了模板就得有模板的特殊语法。上面只是简单的双括号加上表达式&#xff0c;这种叫做插值语法&#xff0c;除了这种语法还有其他语法吗&#xff1f; 插值语法实现的功能很单一&#xff0c;就是将指定的值放到指定的位置。还有一种叫做指令语法&am…

C++算法: 最大化数组末位元素的最少操作次数

涉及知识点 数学 题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;这两个数组的长度都是 n 。 你可以执行一系列 操作&#xff08;可能不执行&#xff09;。 在每次操作中&#xff0c;你可以选择一个在范围 [0, n - 1] 内的下标 i &#xff0c;并交换 num…

人工智能如何重塑体验为先的汽车行业

面向汽车行业用户体验的 AI 人工智能的影响力继续在各个主要行业中迅速蔓延&#xff0c;全球各地的公司都开始大力投资 AI 技术&#xff0c;以提高自身的竞争优势。未来的趋势表明&#xff0c;企业如果不立即采用人工智能战略&#xff0c;就可能会远远落后于竞争对手。 AI 和…

真空的应用

真空对人类主要的贡献有两点&#xff1a;对基础研究来说&#xff0c;提供了最清洁和最少受外界干扰的实验环境&#xff1b;对工业生产来说&#xff0c;则可以制造性能最优越、甚至自然界前所未有的材料。随着真空技术在航空航天和军工、光伏发电以及半导体等领域的应用&#xf…