数据结构与算法之查找算法

news2024/11/28 6:34:21

数据结构与算法——查找算法

本文将不断更新查找有关算法,由于精力有限,因此本博文将分多次更新,感谢您的关注

文章目录

  • 数据结构与算法——查找算法
    • 1. 二分法查找(折半查找)
      • 1.1 算法叙述
      • 1.2 实例说明
    • 2. 插值查找(比例查找)
      • 2.1 算法叙述
      • 2.2 实例说明
    • 3. 斐波那契查找(黄金分割法查找)
      • 3.1 算法叙述
      • 3.2 实例说明
    • 4. 线性索引查找
      • 4.1 算法叙述
      • 4.2 实例说明

1. 二分法查找(折半查找)

1.1 算法叙述

  • 二分法查找又称折半查找,顾名思义也就是将待查找范围不断折半直到不能再折为止

  • 适用范围:数据表是顺序结构,也就是从小到大或从大到小已经排好序

  • 算法复杂度:O(logn)

  • 思路如下图:
    在这里插入图片描述

1.2 实例说明

  • 以NTC温度转化为例,通过ADC采集到NTC的电压之后,计算出NTC的电阻值,之后采用查表的方案查询此NTC阻值所对应的温度

  • 本文已 TSM1A682J3952RZ 这颗NTC电阻为例,数据手册地址:NTC数据手册地址

  • 代码如下:

    • temperature 内记录了从数据手册内获取到的NTC从 -40 ~ 125℃ 所对应的阻值
    • sort_dichotomy 为二分法查找算法实现
#include <stdio.h>

/* ntc -40 ~ 125℃ 阻值 */
const float temperature[] = {
    249.76, 233.36, 218.16, 204.07, 190.98, 178.8, 167.47, 156.9, 147.06, 137.88,
    129.31, 121.31, 113.85, 106.88, 100.38, 94.3, 88.626, 83.325, 78.372, 73.743,
    69.417, 65.372, 61.589, 58.05, 54.738, 51.638, 48.735, 46.015, 43.466, 41.075,
    38.833, 36.729, 34.753, 32.897, 31.153, 29.513, 27.97, 26.518, 25.151, 23.863,
    22.649, 21.505, 20.426, 19.407, 18.445, 17.537, 16.679, 15.868, 15.101, 14.375,
    13.688, 13.039, 12.423, 11.84, 11.288, 10.765, 10.269, 9.7981, 9.3517, 8.9281,
    8.5261, 8.1445, 7.7821, 7.4379, 7.1108, 6.8, 6.5046, 6.2237, 5.9565, 5.7024,
    5.4606, 5.2305, 5.0115, 4.8029, 4.6043, 4.4151, 4.2348, 4.063, 3.8992, 3.743,
    3.594, 3.4519, 3.3163, 3.1869, 3.0633, 2.9453, 2.8326, 2.7249, 2.6219, 2.5235,
    2.4294, 2.3394, 2.2533, 2.1709, 2.0921, 2.0166, 1.9442, 1.8749, 1.8086, 1.7449,
    1.6839, 1.6254, 1.5693, 1.5154, 1.4637, 1.4141, 1.3664, 1.3207, 1.2767, 1.2344,
    1.1938, 1.1548, 1.1172, 1.0811, 1.0463, 1.0128, 0.98063, 0.94961, 0.91974, 0.89097,
    0.86325, 0.83654, 0.81079, 0.78596, 0.76202, 0.73894, 0.71667, 0.69518, 0.67444, 0.65443,
    0.63512, 0.61647, 0.59846, 0.58107, 0.56427, 0.54804, 0.53237, 0.51722, 0.50258, 0.48843,
    0.47475, 0.46153, 0.44875, 0.43639, 0.42443, 0.41288, 0.4017, 0.39089, 0.38043, 0.37031,
    0.36052, 0.35105, 0.34189, 0.33303, 0.32445, 0.31616, 0.30813, 0.30035, 0.29284, 0.28556,
    0.27852, 0.2717, 0.26511, 0.25873, 0.25255, 0.24658
};

/**
 * @brief 二分法查找算法
 * 
 * @param elem 待查找数据
 * @param table 数据表
 * @param table_size 数据表大小
 * @return int -1:参数错误 >=0:待查找元素所在表中位置
 */
int sort_dichotomy(float elem, const float *table, int table_size)
{
    int mid = 0, left = 0, right = 0;

    if (table == NULL || table_size == 0)
        return -1;

    left = 0;
    right = table_size - 1;
    mid = (left + right) / 2;

    if (elem > table[0])
    {
        return 0;
    }
    else if (elem < table[table_size - 1])
    {
        return right;
    }

    while (left < right)
    {
        if (elem > table[mid])
        {
            right = mid;
            mid = (left + right) / 2;
        }
        else if (elem < table[mid])
        {
            left = mid;
            mid = (left + right) / 2;
        }
        else if (elem == table[mid])
        {
            break;
        }

        if (left == mid)
        {
            break;
        }
        else if (right == mid)
        {
            mid += 1;
            break;
        }
    }

    printf("mid:%d left:%d right:%d\n", mid, left, right);

    return mid;
}

int main(int argc, char **argv)
{
    printf("*************************\n");
    printf("二分法排序\n");
    printf("*************************\n");

    int temp = 0;
    temp = sort_dichotomy(17.5f, temperature, sizeof(temperature));
    temp -= 40;
    printf("temperature is:%d\n", temp);

    return 0;
}

2. 插值查找(比例查找)

2.1 算法叙述

//TODO

2.2 实例说明

//TODO

3. 斐波那契查找(黄金分割法查找)

3.1 算法叙述

//TODO

3.2 实例说明

//TODO

4. 线性索引查找

4.1 算法叙述

//TODO

4.2 实例说明

//TODO


由于精力有限,因此本博文将分多次更新,感谢您的关注!

创作不易,转载请注明出处!

关注、点赞+收藏,可快速查看后续分享哦!

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

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

相关文章

【ML特征工程】第 8 章 :自动化特征化器:图像特征提取和深度学习

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

[2022-11-26]神经网络与深度学习第5章 - 循环神经网络(part 2)

contents循环神经网络(part 2) - 梯度爆炸实验写在开头解决方式概览梯度爆炸实验梯度打印函数思考&#xff1a;什么是范数、L2范数、为什么要打印梯度范数复现梯度爆炸现象使用梯度截断解决梯度爆炸问题思考&#xff1a;梯度截断解决梯度爆炸问题的原理&#xff1f;写在最后循环…

搭建MinIO容器

文章目录1 问题背景2 资源准备3 安装Docker服务4 关闭防火墙5 以Docker方式安装MinIO6 访问MinIO1 问题背景 玩一个前后端的项目&#xff0c;需要用到对象存储器&#xff0c;于是使用开源的MinIO。期间以Docker方式搭建遇到某些坑&#xff0c;此处仅以博客的方式记录下来 2 资源…

【通信原理课设--基于MATLAB/Simulink的2ASK数字带通传输系统建模与仿真】Simulink的使用介绍以及在本实验中的使用

目录 Simulink的简要介绍 Simulink的使用流程 进入Simulink 进入模型编辑窗口 ​ 建立一个新的文件 根据求需建立模型 对选择的模块进行参数设置 本次课程设计需要使用Simulink做ASK的仿真处理&#xff0c;那么下面就一起学习了解一下Simulink吧&#xff01; Simuli…

全球经济自由度1995-2021最新版绿色金融指数2001-2020

&#xff08;1&#xff09;全球经济自由度指数 1995-2021 1、数据来源&#xff1a;美国传统基金会 2、时间跨度&#xff1a;1995-2021 3、区域范围&#xff1a;全球 4、指标说明&#xff1a; 经济自由度指数&#xff0c;是由《华尔街日报》和美国传统基金会发布的年度报告…

爱站网关键词挖掘工具-长尾关键词挖掘站长工具

长尾词挖掘免费工具&#xff0c;为什么我们要使用长尾词挖掘免费工具&#xff0c;我们只要找准关键词就等于掌握了流量。 关键词可应用于任何平台&#xff1a;不管是网站、短视频、自媒体等&#xff01; 比如说用户A经常看体育领域的内容&#xff0c;平台就会给A打上体育领域标…

LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)

文章目录一、编程题&#xff1a;142. 环形链表 II&#xff08;双指针-快慢指针&#xff09;1.题目描述2.示例1&#xff1a;3.示例2&#xff1a;4.示例3&#xff1a;5.提示&#xff1a;6.进阶&#xff1a;二、解题思路1.思路2.复杂度分析&#xff1a;3.算法图解三、代码实现总结…

[附源码]计算机毕业设计springboot班级事务管理论文2022

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

MQTT协议

1.MQTT基础知识学习 MQTT协议基础知识视频学习资源:太极创客 太极创客的MQTT基础篇博文目录链接:零基础入门学用物联网 – MQTT基础篇 – 目录 备注:建议先学习一下MQTT的基础知识后再学习下面章节部分的内容。 2.MQTT服务器的搭建 MQTT服务器的搭建步骤如下: 使用docker pull…

【vue + echarts】图表自适应缩放(跟随浏览器的窗口缩放,项目侧边栏折叠后的窗口缩放),图表重绘

效果图: 先清楚两个东西,浏览器窗口的缩放和项目侧边栏折叠后窗口的缩放,这两个是不一样的 第一种,浏览器窗口缩放后,当前窗口会放大了或者缩小了,这时会走浏览器缩放的代码部分, 第二种,而项目侧边栏折叠后窗口的缩放,虽然项目里面的窗口缩放了,但是,浏览器的窗口并没有发生…

tACS恢复老年人认知控制能力的EEG功能和DTI结构网络机制

认知控制能力是大多数日常任务中的关键能力&#xff0c;与年龄相关的认知控制能力下降威胁到个人的独立性。作者之前在老年人和年轻人中都发现&#xff0c;经颅交流电刺激&#xff08;tACS&#xff09;可以改善认知控制&#xff0c;在远离受刺激部位和频率之外的神经区域观察到…

使用python玩转二维码!速学速用!⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; Python3◉技能提升系列&#xff1a;https://www.showmeai.tech/tutorials/56 &#x1f4d8; 本文地址&#xff1a;https://showmeai.tech/article-detail/398 &#x1f4e2; 声明&#xff1a;版权所有&#xff0c;…

前端开发如何做新手引导

通常&#xff0c;在产品发布新版本或者有新功能上线时&#xff0c;都会开发一个新手引导功能来引导用户了解应用的功能。在前端开发中&#xff0c;如何快速地开发新手引导功能呢&#xff0c;下面介绍几个开箱即用的新手引导组件库。 1&#xff0c;Intro.js Intro.js是一个使用…

外汇天眼:外汇杠杆的“诱惑”到底有多大,为何做外汇的人都那么上瘾?

近些年随着外汇保证金在中国的持续发展&#xff0c;中国的外汇保证金交易就像当初的股票市场一样&#xff0c;从无到有&#xff0c;不断的发展壮大&#xff0c;再加上国内金融市场对外开放步伐加快&#xff0c;在中国国内参与外汇市场的投资者也是连年上升&#xff0c;那么这个…

【EI会议2023】12.20之后ddl

csdn 摘出来上文中的一些ddl ICET 2023(成都 5月12日-5月15日) http://www.icet.net/track9.html 截稿时间2022.12.20 通知录用:2023.1.20 SEGRE 2023(长沙 4月21日-4月23日) http://www.icsegre.org/ 截稿时间2023.2.26 通知录用:2023.4.3 ICIBA 2023(重庆 5月26日-…

全同态加密:GSW

参考文献&#xff1a; Micciancio D, Peikert C. Trapdoors for lattices: Simpler, tighter, faster, smaller[C]//Annual International Conference on the Theory and Applications of Cryptographic Techniques. Springer, Berlin, Heidelberg, 2012: 700-718.Gentry C, S…

Mysql-解决Truncated incorrect DOUBLE value xxx

问题 出现这种问题一般来说就是多表操作的时候, 使用的字段类型不一致导致的(查询除外),我们来看下真实案例 在hd_user表中parentId是binint类型 而在hd_user_increment_copy1表中parentId是varchar类型, 如果只是查询的话那么是不会报错的,我把查询sql提出了运行是可以的 …

[附源码]计算机毕业设计springboot保护濒危动物公益网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java 编程性能调优

把 Java 性能调优分成 5 个层级&#xff1a;Java 编程、多线程、JVM 性能检测、设计模式、数据库性能&#xff0c;每个层级下都覆盖了最常见的优化问题。下面分别给你梳理一下&#xff1a; 可参考地址&#xff1a;Java性能调优全攻略来了_着火点的博客-CSDN博客_java性能调优 …

软件设计与体系结构编程题汇总

现在需要开发一款游戏软件&#xff0c;请以单例模式来设计其中的 Boss 角色。角色的属性和动作可以任意设计。 要求&#xff1a;该 Boss 类可以在多线程中使用。&#xff08; 8 分&#xff09; Public class Boss{Private static Boss instance; //(2 分&#xff09;Private …