树和森林 查找

news2024/10/5 13:52:07

讨论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.coloradmin.cn/o/1212978.html

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

相关文章

Vue3中使用provide和inject依赖注入完成父组件和孙子组件之间参数传递

Vue3中使用provide和inject依赖注入完成父组件和孙子组件之间参数传递 官网介绍 注意以下写法都是使用setup 代码结构 依赖注入-父组件 import { ref, provide } from "vue"const outDialogCardInfo ref() function updateOutDialogCardInfo(item) {console.log…

微信这4个功能容易暴露隐私,记得关闭

每天高频使用微信的我们&#xff0c;常常觉得安全无忧&#xff0c;然而这样的想法并不准确。尽管微信本身的安全性能极高&#xff0c;但若我们不主动设置相关功能&#xff0c;个人隐私和位置信息仍可能被暴露。 在微信朋友圈上&#xff0c;有些人喜欢分享生活的点滴&#xff0c…

LLM(四)| Chinese-LLaMA-Alpaca:包含中文 LLaMA 模型和经过指令微调的 Alpaca 大型模型

论文题目&#xff1a;《EFFICIENT AND EFFECTIVE TEXT ENCODING FOR CHINESE LL AMA AND ALPACA》 ​论文地址&#xff1a;https://arxiv.org/pdf/2304.08177v1.pdf Github地址&#xff1a;https://github.com/ymcui/Chinese-LLaMA-Alpaca 一、项目介绍 通过在原有的LLaMA词…

嵌入式LINUX——环境搭建 windows、虚拟机、开发板 互ping

摘要&#xff1a; 本文包含&#xff0c;如何设置linux开发板和虚拟机、windows 互ping成功 以及设置过程中出现的虚拟机、开发板查询不到eth0 windows ping开发板出项丢包等问题的解决方式。 windows端设置 windows端插入USB转网卡 打开windows桌面下右下角的网络标识 打…

UI自动化测试(弹出框,多窗口)

一、弹出框实战 1、在UI自动化测试中经常会遇到Alert弹出框的场景。Alert类是对话框的处理&#xff0c;主要是对alert警告框。confirm确认框&#xff0c;promp消息对话框。 text():获取alert的文本 dismiss ():点击取消 accept():接受 send-keys():输入 from selenium import …

继承、多态

复习 需求&#xff1a; 编写一个抽象类&#xff1a;职员Employee,其中定义showSalary(int s)抽象方法&#xff1b;编写Employee的子类&#xff0c;分别是销售员Sales和经理Manager,分别在子类中实现对父类抽象方法的重写&#xff0c;并编写测试类Test查看输出结果 package cn.…

多媒体播放器Infuse mac中文版软件特点

Infuse mac是一款多媒体播放器应用&#xff0c;它支持播放多种格式的视频文件、音频文件和图片文件&#xff0c;并且可以通过AIrPlay将媒体内容投放到其他设备上。Infuse还支持在线视频流媒体播放和本地网络共享&#xff0c;用户可以通过它来访问家庭网络上的媒体文件。 Infuse…

<C++> 优先级队列

目录 前言 一、priority_queue的使用 1. 成员函数 2. 例题 二、仿函数 三、模拟实现 1. 迭代器区间构造函数 && AdjustDown 2. pop 3. push && AdjustUp 4. top 5. size 6. empty 四、完整实现 总结 前言 优先级队列以及前面的双端队列基本上已经脱离了队列定…

【1】Maxwell3D闭合线圈小实例仿真

//正文开始前的唠唠&#xff1a;首先声明&#xff0c;本人是00后新人小白一枚&#xff0c;本科计算机专业&#xff0c;现目前工作需要用到一些仿真工具&#xff0c;属于是从零开始学习仿真软件&#xff0c;文章内容为本人的学习笔记&#xff08;所以对于小白来说非常友好&#…

折扣零售新浪潮,揭秘品牌如何盘活千家门店

近两年&#xff0c;随着新经济环境的革新&#xff0c;人们流行起了“反向消费”&#xff0c;开始追求高性价的特价好物。于是&#xff0c;顺应人们消费理念和新需求的折扣零售便开始日渐火热&#xff0c;也让更多品牌与资本加入折扣零售赛道。 根据《2023-2028年中国折扣商店行…

vim——“Linux”

各位CSDN的uu们好呀&#xff0c;今天&#xff0c;小雅兰的内容是Linux的开发工具——vim。下面&#xff0c;我们一起进入Linux的世界吧&#xff01;&#xff01;&#xff01; Linux编辑器-vim使用 vim的基本概念 vim的基本操作 vim正常模式命令集 vim末行模式命令集 vim操…

【力扣题:循环队列】

文章目录 一.题目描述二. 思路解析三. 代码实现 一.题目描述 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好…

cudnn安装

安装地址 cudnn安装地址&#xff1a;https://developer.nvidia.com/rdp/cudnn-download 安装 选择windows版本的下载&#xff0c;我这里选择的这个&#xff1a; 下载之后解压即可。 后续 后续&#xff1a;第一步 把cudnn的bin&#xff0c;include&#xff0c;lib三个文件…

原力CEO赵锐:ToDesk是国内唯一适合高精远程办公需求的解决方案

随着数字办公在各行业的渗透&#xff0c;远程办公也逐渐成为一种常态。2000多名艺术家员工遍布全球各地的江苏原力数字科技股份有限公司&#xff08;下称&#xff1a;原力&#xff09;&#xff0c;是一家国内业务范围、规模均遥遥领先的数字业务内容提供商。一直以来&#xff0…

轻量封装WebGPU渲染系统示例<32>- 若干线框对象(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/WireframeEntityTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下: export class WireframeEntityTest {private mRsc…

第四代智能井盖传感器:井盖位移怎么办?

城市的每一个井盖虽然看似平凡&#xff0c;但其在城市运行中发挥着不可或缺的作用。随着科学技术的不断发展&#xff0c;智能井盖传感器的引入为城市管理带来了革命性的变化。在对于传统井盖出现位移等异常现象&#xff0c;智能井盖传感器可以提供更好的解决方法。 井盖位移怎么…

矢量绘图软件 Sketch mac中文版介绍

Sketch mac是一款为用户提供设计和创建数字界面的矢量编辑工具。它主要用于UI/UX设计师、产品经理和开发人员&#xff0c;帮助他们快速设计和原型各种应用程序和网站。 Sketch具有简洁直观的界面&#xff0c;以及丰富的功能集&#xff0c;使得用户可以轻松地创建、编辑和共享精…

Matter 协议详解

目录 1、Matter 协议发展 1.1、什么是Matter 1.2、Matter能做什么 2、整体介绍 3、架构介绍 3.1、Matter网络拓扑结构 3.2、标识符 3.2.1、Fabric引用和Fabric标识符 3.2.2、供应商标识符&#xff08;Vendor ID&#xff0c;VID&#xff09; 3.2.3、产品标识符&#x…

Linux常用的磁盘使用情况命令汇总

1、查看分区使用百分比 df -h 2、查看指定目录磁盘使用情况 du -hac --max-depth1 /opt 参数&#xff1a;-a 查看所有文件&#xff0c;-c 汇总统计&#xff0c;max-depth1 查看深度为1&#xff0c;2级目录不再统计。 3、常用统计命令汇总

微信小程序项目——基本目录构成

基本构成 pages 用来存放所有小程序的页面&#xff1b;utils 用来存放工具性质的模块&#xff08;比如&#xff1a;格式化时间的自定义模块&#xff09;&#xff1b;app.js 小程序项目的入口文件&#xff1b;app.json小程序项目的全局配置文件&#xff1b;app.wxss 小程序项目…