数据结构-查找-线性结构(顺序、折半、分块)查找

news2024/9/22 13:42:27

目录

一、顺序查找

*查找效率分析

二、折半查找

*查找效率分析

三、分块查找

*查找效率分析


一、顺序查找

有称线性查找,

算法思想:从头到尾挨个查找(反过来也行)

typedef struct{
    int *elem;                        //数据
    int TableLen;                     //长度
}SSTable;
int Search_Seq(SSTable ST,int key){
    int i;
    for(i=0;i<ST.TableLen && ST.elem[i]!=key; ++i); //从前往后找
    return i==St.TableLen ? -1 : i ;    //成功返回i,不成功 -1
}

*查找效率分析

        查找成功

                n个数据,每个数据查找成功概率为\tiny C_i=\frac{1}{n},第一(\tiny P_1)给数据对比1次为\tiny 1\times \frac{1}{n},第二(\tiny P_2)个对比2次为\tiny 2\times \frac{1}{n},依次类推,第n(\tiny P_n)位\tiny n\times \frac{1}{n},累加为\tiny ASL=\sum_{i=1}^{n}P_iC_i=\frac{1+2+3+...+n}{n}=\frac{n+1}{2}

        查找失败: n+1

对有序表

 一个成功结点查找长度=自身所在层数

一个失败结点查找长度=其父结点所在层数

二、折半查找

折半查找只适用有序的顺序表

typedef struct{
    int *elem;        //数据
    int TableLen;     //长度
}SSTable;
int Binary_Search(SSTable L,int key){
    int low=0,high=L.TableLen-1,mid;
    while(low<=high){
        mid=(low+high)/2;        //取中间位置
        if(L[mid]==key)          
            return mid;          //成功查找位置
        else if(L[mid]<key)
            high=mid-1;          //前部分继续查找
        else
            low=low+1;           //后部分继续查找
    }
    return -1;
}

*查找效率分析

查找成功

        成功=(第几层*每层成功结点树)累和/总成功结点数

        \tiny ASL=(1*1+2*2+3*4+4*4)/11=3

查找失败

        失败=(失败的层*每层数量)累和/总失败结点数

        \tiny ASL=(3*4+4*8)/12=11/3

判定树的构造

        右子树结点数-左子树结点树=0或1,且只有最后一层不满,高度就是二叉树树高\tiny \left \lfloor log_2n \right \rfloor+1

        失败结点数量为 n+1

三、分块查找

 ①:在索引表中确定待查记录所属的分块(可顺序,可折半)

②:在块间顺序查找

*查找效率分析

查找成功

        共14个元素;每个被查概率为\tiny \frac{1}{14}\tiny ASL=\sum_{i=1}^{n}P_iC_i

若索引表采用顺序查找,则查7:2次、10:3次、13:3次...  \tiny ASL=\frac{b+1}{2}+\frac{s+1}{2},当\tiny s=\sqrt{n},ASL=\sqrt{n}+1

若索引表采用折半查找,则查30:4次、27:3次...      \tiny ASL=\left \lceil log_2(n+1) \right \rceil+\frac{s+1}{2} n块,s个元素

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

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

相关文章

MySQL原理(六):日志

前言 上一篇介绍了 MySQL 的锁&#xff0c;这一篇将介绍日志相关的内容。 MySQL 中最常见的日志有三类&#xff1a; undo log&#xff08;回滚日志&#xff09;&#xff1a;是 Innodb 存储引擎层生成的日志&#xff0c;实现了事务中的原子性&#xff0c;主要用于事务回滚和 …

MATLAB程序在设备端部署实例

背景介绍 MATLAB广泛应用于物理系统建模、测量测试、系统控制以及深度学习等&#xff0c;在工程实践中具有非常重要的地位&#xff0c;具体如图1所示。调研发现&#xff0c;科研人员能够编写各种matlab代码&#xff0c;通过建模仿真来更好的认识世界。近年来&#xff0c;随着物…

《LeetCode》—— 摆动序列

今天&#xff0c;我们要讲解的是 “摆动序列” 这道题目。对于这道题目&#xff0c;我们可以从贪心的思想去解决&#xff0c;也可以使用动态规划的方法。接下来&#xff0c;我通过这两种方法的讲解让你轻松拿捏它&#xff01; 目录 &#xff08;一&#xff09;贪心算法 1、上下…

跑在笔记本里的大语言模型 - GPT4All

何为GPT4All GPT4All 官网给自己的定义是&#xff1a;一款免费使用、本地运行、隐私感知的聊天机器人&#xff0c;无需GPU或互联网。 从官网可以得知其主要特点是&#xff1a; 本地运行&#xff08;可包装成自主知识产权&#x1f436;&#xff09;无需GPU&#xff08;穷人适配…

sort、uniq、tr、cut的使用

管理文件内容的使用 一、sort命令二、uniq命令三、tr命令四、cut命令 一、sort命令 sort命令是以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序&#xff0c;比较原则是从首字符向后&#xff0c;依次按ASCII码进行比较&#xff0c;最后将他们按升序输…

Linux:rpm查询安装 yum安装

环境&#xff1a; 需要插入安装镜像 镜像内有所需的安装库 我这里使用的虚拟机直接连接光盘 连接的光盘挂载在/dev/cdrom 由于我们无法直接进入&#xff0c;所以选择把/dev/cdrom挂载到别的地方即可 mount /dev/cdrom /123 将/dev/cdrom 挂载到 /123 目录下 Packages下就是…

C++笔记—— 第十七篇 智能指针 C++11来了(下)

目录 1. 为什么需要智能指针 2. 内存泄漏 2.1 什么是内存泄漏&#xff0c;内存泄漏的危害 2.2 内存泄漏分类 2.3如何避免内存泄漏 3.智能指针的使用及原理 3.1 RAII 3.2 智能指针的原理 3.3 std::auto_ptr 3.4 std::unique_ptr 3.5 std::shared_ptr shared_ptr的线…

JVM性能调优

一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范&#xff0c;JVM将内存划分为&#xff1a; New&#xff08;年轻代&#xff09; Tenured&#xff08;年老代&#xff09; 永久代&#xff08;Perm&#xff09; 其中New和Tenured属于堆内存&#xff0c;堆内存会从JVM启动参…

【牛客刷题专栏】0x28:JZ30 包含min函数的栈(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录 前言问…

【神经网络】tensorflow实验9--分类问题

1. 实验目的 ①掌握逻辑回归的基本原理&#xff0c;实现分类器&#xff0c;完成多分类任务&#xff1b; ②掌握逻辑回归中的平方损失函数、交叉熵损失函数以及平均交叉熵损失函数。 2. 实验内容 ①能够使用TensorFlow计算Sigmoid函数、准确率、交叉熵损失函数等&#xff0c…

(浙大陈越版)数据结构 第二章 线性结构 2.4 多项式的加法和乘法运算实现

目录 2.4.1多项式的加法运算实现 如何设计一个函数分别求两个一元多项式的和&#xff1f; 算法思路&#xff1a;两个指针p1&#xff0c;p2分别指向两个多项式的第一个结点&#xff08;最高项&#xff09;并循环 循环&#xff1a; 2.4.2 多项式的乘积 1.多项式的表示 2.程…

IPsec VPN IKE方式协商密钥

实验拓扑 要求pc1与pc2两个网络访问走ipsec隧道互访。 前言&#xff1a; ipsecs 隧道两端的acl规则定义的协议类型要一致&#xff0c;如果一端是ip协议&#xff0c;另一端也必须是ip协议 配置acl的原因是&#xff1a;1&#xff0c;通过acl&#xff08;permit&#xff09;指定需…

Metalama released Crack

Metalama released Crack Metalama是一个面向C#的元编程框架。它可以帮助您提高代码质量和生产力。使用Metalama&#xff0c;您可以通过在编译过程中动态生成样板文件来减少样板文件。您的源代码仍然非常清晰。根据体系结构、模式和约定实时验证代码。无需等待代码评审。通过定…

React从入门到实战 - React初体验

文章目录 特点相关JS库步骤准备步骤操作步骤 关于虚拟DOMJSX语法规则函数式组件常见的几种错误正确写法 类式组件 特点 采用组件化模式&#xff0c;声明式编程&#xff0c;提高开发效率及组件复用率在React Native 中使用React语法进行移动端开发使用虚拟DOM优秀的Diffing算法…

Java8 map.getOrDefault()你真的了解吗

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 map.getOrDefault()方法 在Java编程中&#xff0c;Map是一种非常常用的数据结构。Map通常用于存储键值对&#xff0c;其中每个键映射到一个值。当我们尝试访问一个不…

文件一直处于修改状态 git checkout 无法还原的问题解决方法

问题描述 最近在 RT-Thread 时&#xff0c;使用 Git 回退版本验证问题&#xff0c;后来 git pull 拉取最新代码后&#xff0c;发现里面有几个文件&#xff0c;一直为【修改】状态&#xff0c;并且无法还原&#xff0c;git checkout xxx git reset --hard 都用了&#xff0c;依旧…

基于AT89C51单片机的温度控制系统报警器

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87771724?spm1001.2014.3001.5503 源码获取 单片机读取温度传感器当前的温度值并在LCD液晶显示屏上的第一行显示当前的温度值&#xff0c;单片机读取按键状态并通过…

Flask框架之异常处理、请求钩子、上下文的使用

Flask框架之异常处理、请求钩子、上下文的使用 异常处理捕获指定异常状态码捕获指定异常类型抛出HTTP Exception 请求钩子概述基本使用 请求上下文概述应用上下文current_app对象g对象 请求上下文request对象session对象 异常处理 捕获指定异常状态码 可以使用app.errorhandle…

Github的使用

1.基本概念&#xff1a; 仓库&#xff08;Repository&#xff09;:仓库用来存放项目代码&#xff0c;每个项目对应一个仓库&#xff0c;多个开源项目则有多个仓库 收藏&#xff08;Star&#xff09;:收藏项目&#xff0c;方便下次查看 复制克隆项目:&#xff08;Fork&#x…

JVM类加载、类变量初始化顺序

题目 先来看一个题目&#xff0c;以下程序的输出结果是什么 运行结果 关于类加载机制 关于JVM的类加载 《深入理解Java虚拟机》中关于类加载是这样说的&#xff1a; Java虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#x…