程序员必知8大排序3大查找(三)

数据结构算法学习-1. 查找(Search)概论与种顺序查找算法 写在前面 这个新的类别主要是将平时学的数据结构的识概念与数据结构引发的各种算法进行一个整理总结。这一个类别参考的资料是《话数据结构》。由于PDF是扫描版,所以主要内容都是手打,比较麻烦,会耗费一些时间。所以主要是要提纲挈领,将要点整理出来,以便在做题的时候,能将这些识融会贯通一下。毕竟不能当个只会复制粘贴的码农,还是要花费时间与精力来提升一下自己的识水平。 数据结构算法的学习我不会按照 阅读详情

前两篇

程序员必知8大排序3大查找(一)

程序员必知8大排序3大查找(二)


三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表(以后谈)




一、顺序查找的基本思想:

从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关键字与a相等,则查找成功;若扫描结束后,仍未找到关键字等于a的结点,则查找失败。

 

说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不到就失败。很明显的缺点就是查找效率低。

 

适用于线性表的顺序存储结构和链式存储结构。




计算平均查找长度。

例如上表,查找1,需要1次,查找2需要2次,依次往下推,可知查找16需要16次,

可以看出,我们只要将这些查找次数求和(我们初中学的,上底加下底乘以高除以2),然后除以结点数,即为平均查找长度。

n=节点数

平均查找长度=n+1/2

 

二、二分法查找(折半查找)的基本思想:


前提:

1)确定该区间的中点位置:mid=low+high/2    

min代表区间中间的结点的位置,low代表区间最左结点位置,high代表区间最右结点位置

2)将待查a值与结点mid的关键字(下面用R[mid].key)比较,若相等,则查找成功,否则确定新的查找区间:

如果R[mid].key>a,则由表的有序性可知,R[mid].key右侧的值都大于a,所以等于a的关键字如果存在,必然在R[mid].key左边的表中。这时high=mid-1

如果R[mid].key<a,则等于a的关键字如果存在,必然在R[mid].key右边的表中。这时low=mid

如果R[mid].key=a,则查找成功。

3)下一次查找针对新的查找区间,重复步骤(1)和(2

4)在查找过程中,low逐步增加,high逐步减少,如果high<low,则查找失败。



平均查找长度=Log2(n+1)-1

 

注:虽然二分法查找的效率高,但是要将表按关键字排序。而排序本身是一种很费时的运算,所以二分法比较适用于顺序存储结构。为保持表的有序性,在顺序结构中插入和删除都必须移动大量的结点。因此,二分查找特别适用于那种一经建立就很少改动而又经常需要查找的线性表。

 

三、分块查找的基本思想:


二分查找表使分块有序的线性表和索引表(抽取各块中的最大关键字及其起始位置构成索引表

)组成,由于表是分块有序的,所以索引表是一个递增有序表,因此采用顺序或二分查找索引表,以确定待查结点在哪一块,由于块内无序,只能用顺序查找。




设表共n个结点,分b块,s=n/b

(分块查找索引表)平均查找长度=Log2n/s+1+s/2

(顺序查找索引表)平均查找长度=(S2+2S+n)/(2S)

 

 

注:分块查找的优点是在表中插入或删除一个记录时,只要找到该记录所属块,就在该块中进行插入或删除运算(因块内无序,所以不需要大量移动记录)。它主要代价是增加一个辅助数组的存储控件和将初始表分块排序的运算。

 

它的性能介于顺序查找和二分查找之间。


四、最近比较忙,后续找个时间还会谈谈散列表(哈希表)技术,希望大家关注!

散列表查找技术不同于顺序查找、二分查找、分块查找。它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,无须任何比较就可以找到待查关键字,查找的期望时间为O(1)。

前两篇

程序员必知8大排序3大查找(一)

程序员必知8大排序3大查找(二)

 


感谢大家的支持,无论是顶的,还是踩的,都谢谢你们,希望大家互相关注,共同进步。



使用 MATLAB/Simulink 对基于同步发电机的双机系统进行建模,并对其在短路故障条件下的暂态稳定性进行仿真和分析 双机系统(Two-Machine System)是电力系统中用于研究动态稳定性和控制策略的一个典型模型。它由两台同步发电机通过输电网络相互连接,模拟实际电网中的互联操作。当发生短路故障时,系统的暂态稳定性会受到挑战,可能导致发电机失步或电压崩溃。本教程将带你使用 MATLAB/Simulink 对基于同步发电机的双机系统进行建模,并对其在短路故障条件下的暂态稳定性进行仿真和分析。 阅读详情

相关推荐

LeRobot 机器人学习(Robot Learning)入门教程(一)

本文介绍了现代机器人学习领域的发展现状与关键技术。随着机器学习进步和规模机器人数据的普及,机器人技术正从传统基于模型的方法转向数据驱动的学习范式。HuggingFace开发的开源库lerobot实现了端到端集成,支持多种机器人平台和先进算法(强化学习、行为克隆等)。核心创新包括LeRobotDataset标准化格式,统一处理多模态时间序列数据,并支持高效批处理和流式访问。教程涵盖经典机器人学基础、强化学习原理、模仿学习技术和通用模型开发,结合代码示例展示如何构建适应多样化任务的机器人系统。该资源旨在为研究

2506_90492529的博客 1941

算法查找

1. 无序链表 无序链表中的顺序查找 在含有N对键值基于无序链表的符号表中,未命中的查找和插入操作都需要N次比较。命中的查找在最坏情况下需要N次比较,向一个空表中插入N个不同的键需要N^2/2次。 在表中查找一个不存在的键时,我们会将表中的每个键和给定的键比较。因为不允许出现重复的键,每次插入操作之前我们都需要这样查找一遍。 2. 有序数组 有序数组的二分查找 在N个键的有序数组中进行二分查找最多...

weixin_43928720的博客 747

UL 499-14-2025 高清.pdf

UL 499-14-2025 高清.pdf

查找算法

查找算法 1. 问题 写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0. 2. 解析 顺序查找:就是遍历数组的过程。 二分查找:假设有一个升序排列的数组 arr,在该数组中查找元素 key。首先找出该数组中最中间的元素,然后将最中间的元素mid 与所要查找的元素 key 进行比较,如果相等则返回该元素的下标。如果 mid &gt...

weixin_43750332的博客 506

【数据结构】查找1——线性表的查找(顺序查找、折半查找、分块查找

【数据结构】查找1——线性表的查找(顺序查找、折半查找、分块查找

FishC的博客 4356

C++ 数组查找

算法思想同二分查找#include &lt;bits/stdc++.h&gt; #define MaxSize 10000 using namespace std; /* * Created by HarvestWu on 2018/07/05. */ //数组查找 int find(int A[], int n,int k) { int l, lmid, rmid, r; l = 0;...

HarvestWu的博客 2291

查找算法:顺序查找

1.原理简介 最坏情况须比较n+1次,时间复杂度:O(n) 。平均查找长度为ASL=1/n(1+2+3+…+n)=(n+1)/2 2.C++代码实现 (1)数组法实现 int SequenceSearch(int a[], int value, int n)//数组查找 { int i; for(i=0; i<n; i++) ...

no_heart2019的博客 531

数据结构与算法st13程序员常用的十种算法

文章目录二分查找算法(非递归版)分治算法动态规划算法暴力匹配算法 二分查找算法(非递归版) 分治算法 动态规划算法 暴力匹配算法

qq_39227541的博客 2686

作业333

作业3

qq_49076034的博客 202

给定数组A[0..n-1],试设计一个算法,在最坏情况下用n+logn次比较找出A[0..n-1]中元素的最值和次

实验目的 (1)掌握顺序统计算法的设计思想; 实验内容 给定数组A[0…n-1],试设计一个算法,在最坏情况下用n+logn次比较找出A[0…n-1]中元素的最值和次值。 具体思路 顺序统计算法其实就是锦标赛算法,即两两比较得出两者之中最优, 再将该最优值与其他组的最优值进行比较, 得出最终的最优解。 分析: 例如这n(n=8)个数分别是:8 7 9 2 3 6 10 12 第一轮比赛:(8,...

qq_42818329的博客 5656

数据结构算法-----查找的那些事

查找:是在由一组记录组成的集合中寻找关键字值等于给定值的某个记录,或是寻找属性值符合特定条件的某些记录

S_yyuan的博客 1471
上一篇: 程序员必知8大排序3大查找(二)
下一篇: 如果程序员没了手!
shan9liang
博客等级 码龄16年 3230粉丝 309原创
评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值