【数据结构】查找(顺序查找、二分查找、索引顺序查找、二叉排序树、平衡排序树、B树、B+树、哈希表)

目录

  • 数据结构——查找
    • 何为查找
      • 1. 查找表
      • 2. 关键字
      • 3. 查找方法效果评价指标——平均查找长度ASL(Average Search Length)
    • 静态查找表
      • 1.顺序查找
      • 2.二分查找
        • 二分查找判定树
      • 3.静态查找表—索引顺序表的查找
        • 索引顺序查找表的算法原理:
    • 动态查找树表
      • 1. 二叉排序树
        • 2. 二叉树的检索算法
        • 3. 二叉排序树的插入算法
        • 4. 二叉排序树的删除算法
        • 5. 最佳二叉排序树
      • 2.平衡二叉树
        • 平衡二叉树(AVL树)(平衡二叉排序树)
        • 平衡旋转技术
      • B-树 和B+树
    • 哈希表查找
      • 哈希表"冲突"现象——冲突处理
        • 1. 开放定址法
        • 2. 再哈希表法
        • 3. 链地址法
        • 4. 建立一个公共溢出区
      • 哈希表的查找
      • 哈希表的删除操作

数据结构——查找

何为查找

1. 查找表

  1. 查找表同一类型的数据元素(或记录)构成的集合

  2. 查找表的操作包括:

  1. 查询某个特定的数据元素是否在查找表中;
  2. 检索某个特定的数据元素的各种属性;
  3. 在查找表中插入一个数据元素;
  4. 从查找表中删去某个数据元素。
  1. 查找表的分类
  1. 静态查找表:只允许做查询和检索操作的查找表。
  2. 动态查找表:除查询和检索操作外,还允许进行插入和删除操作的查找表。

2. 关键字

关键字:是**数据元素(或记录)**中某个数据项的值,用以标识(识别)一个数据元素(或记录)

若此关键字可以识别唯一的一个记录,则称之谓**“主关键字”**
若此关键字能识别若干记录,则称之谓**“次关键字”**
查找表的查询和检索通常是根据关键字进行的

根据给定的值,在查找表中确定一个其关键字等于给定值的数据元素或记录

  1. 若查找表中存在这样一个记录(数据元素),则称查找成功。查找结果给出整个记录(数据元素)的信息,或指示该记录(数据元素)在查找表中的位置;
  2. 否则称此查找不成功。查找结果给出“空记录 ”或“空指针

3. 查找方法效果评价指标——平均查找长度ASL(Average Search Length)

查找速度:平均查找长度ASL(Average Search Length)-为确定记录在表中的位置,需要与给定值进行比较的次数的期望值叫查找算法的平均查找长度

静态查找表顺序查找性能分析:
查找成功的平均查找长度(查找成功的情况下,平均找一个数据元素需要的比较次数称为查找成功的平均查找(检索)长度):
A S L = ( 1 + 2 + … + n ) / n = ( n + 1 ) / 2 ASL=(1+2+…+n)/n=(n+1)/2 ASL=(1+2++n)/n=(n+1)/2
说明:假设每个数据元素查找的概率相同

查找一次的平均检索长度(成功,失败)(*)
A S L = ( n + 1 ) / 2 + ( 1 + 2 + … + n ) / ( 2 ∗ n ) = 3 ( n + 1 ) / 4 ASL=(n+1)/2+(1+2+…+n)/(2*n)=3(n+1)/4 ASL=(n+1)/2+(1+2++n)/(2n)=3(n+1)/4
说明:假设每个数据元素查找的概率相同,并且查找一次成功失败的概率也相同

静态查找表

1.顺序查找

查找方法:从表的一端顺序找到表的另一端 (以线性表表示静态查找表)

  1. 存储结构无特殊要求(数组或链表都可以的)
  2. 元素顺序无要求(有序无序都可以的 )
//顺序表定义
#define max 100
typedef struct{KeyType key; ;//说明:KeyType代表关键字的类型//……;
}ElemType typedef struct{ ElemType elem[max]; int length;
}SqList;
SqList L;

顺序查找:

int search(SqList L, KeyTypex){ //KeyType代表关键字的类型for(int i=0;i<L.length;i++)if(L.elem[i].key==x) return i+1;//找到数据的位置  +1为了方便表示第几个数据return 0;
}
//说明:返回0说明没找到;若找到,返回是x线性表的第几个数据元素

为提高查找速度,设置哨兵项;查找表组织成线性表,线性表的数据元素从下标为1的数组元素开始存放;下标为0的数组元素作为哨兵项(说明:哨兵可设在低端,也可以设在高端)
查找x,首先将x放在下标为0的数组元素(哨兵),从表尾开始比较。若在哨兵
处相等
,说明没找到,否则找到

int srearch(SqList L,KeyTypex)//KeyType代表关键字的类型
{ int k=L.length;L.elem[0].key=x;while(x!=L.elem[k].key)k--;return k;
}//L.elem[0]哨兵项
//说明:返回0说明没找到;若找到,返回是x线性表的第几个数据元素
//说明2:哨兵也可以设在线性表的表尾

静态查找表顺序查找性能分析:
查找成功的平均查找长度(查找成功的情况下,平均找一个数据元素需要的比较次数称为查找成功的平均查找(检索)长度):
A S L = ( 1 + 2 + … + n ) / n = ( n + 1 ) / 2 ASL=(1+2+…+n)/n=(n+1)/2 ASL=(1+2++n)/n=(n+1)/2
说明:假设每个数据元素查找的概率相同

查找一次的平均检索长度(成功,失败)(*)
A S L = ( n + 1 ) / 2 + ( 1 + 2 + … + n ) / ( 2 ∗ n ) = 3 ( n + 1 ) / 4 ASL=(n+1)/2+(1+2+…+n)/(2*n)=3(n+1)/4 ASL=(n+1)/2+(1+2++n)/(2n)=3(n+1)/4
说明:假设每个数据元素查找的概率相同,并且查找一次成功失败的概率也相同

2.二分查找

采用二分查找的要求:查找表组织成有序线性表(递增或递减),且采用顺序存储结构
特点:通过一次比较,将查找范围缩小一半

二分查找通用模板:

// 在单调递增序列a中查找>=x的数中最小的一个(即x或x的后继)
while (low < high)
{int mid = (low + high) / 2;if (a[mid] >= x)high = mid;elselow = mid + 1;
}// 在单调递增序列a中查找<=x的数中最大的一个(即x或x的前驱)
while (low < high)
{int mid = (low + high + 1) / 2;if (a[mid] <= x)low = mid;elsehigh = mid - 1;
}

二分查找算法原理:

//有序(递增或递减),顺序存储结构
int binaryS(SqList L, KeyType x){int low=0, high=L.length-1, m;while(low<=high){m=(low+high)/2;//if(L.elem[m].key==x) return m+1; //若找到,返回是x线性表的第几个数据元素if(L.elem[m].key>x) high=m-1; else low=m+1;} return 0;
}
//说明:返回0说明没找到;若找到,返回是x线性表的第几个数据元素

■ 二分查找的效率高,但是要将表按关键字排序。而排序本身是一种很费时的运算。既使采用高效率的排序方法也要花费 O ( n l o g n ) O(nlogn) O(nlogn)的时间。
■ 二分查找只适用顺序存储结构。为保持表的有序性,在顺序结构里插入和删除都必须移动大量的数据元素。因此,二分查找特别适用于那种一经建立就很少改动、而又经常需要查找的线性表。
■ 对那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找链表上无法实现二分查找。(*)
在这里插入图片描述
在这里插入图片描述

二分查找判定树

在这里插入图片描述

在这里插入图片描述

3.静态查找表—索引顺序表的查找

线性表分成若干块,每一块中的键值存储顺序任意的,块与块之间****按键值排序,即后一块中的所有记录的关键字的值均大于前一块中最大键值。

建立一个索引表,该表中的每一项对应于线性表中的一块,每一项由键域(存放相应块的最大键值)和链域(存放指向本块地一个结点的指针)组成。

适用条件:分块有序表

索引顺序表的查找:

■ 首先对索引表采用二分查找顺序查找方法查找,以确定待查记录所在的。 ■
在线性表查找k,若其在线性表中存在,且位于第i块,那么一定有:第i-1块的 最大键值 < k ≤ 第 i 块的最大键值 最大键值<k≤第i块的最大键值 最大键值<ki块的最大键值。 ■
然后在相应的块中进行顺序查找

数据结构(结构体):

typedef struct{    KeyType key;    //关键字域//…… ;                   // 其它域
}ElemType;//数据结构typedef struct{    ElemType *elem;   // 数据元素存储空间基址int length;    // 表的长度
}SSTable;//顺序表typedef struct{  KeyType MaxKey; //本块最大关键字int FirstLink; //本块第一个结点下标
}IndexTable;//索引表的类型
索引顺序查找表的算法原理:
int Seach_Index(SSTable ST,IndexTable IT[],int b,int n,KeyType k){  		int i=1,j;//b 为块儿数  Maxkey为每块儿中的最大值//索引表查找while((k>IT[i].MaxKey)&&(i<=b))  i++;if(i>b){  printf("\nNot found");  return(0); }j=IT[i].FirstLink;      //块儿内查找while((k!=ST.elem[j].key)&&(ST.elem[j].key<=IT[i].MaxKey)  &&(j<n))j++; //输出查找结果	if(k!=ST.elem[j].key){j=0; printf("\nNot found"); }return(j);
}

■ 表长为n的线性表,整个表分为b块,前 b-1块中的记录数为s=⎡n/b⎤,第b块中的记录数小于或等于s。

A S L = ( b + 1 ) / 2 + ( s + 1 ) / 2 ASL=(b+1)/2+(s+1)/2 ASL=(b+1)/2+(s+1)/2
(*)
■ 当 s = 根号n ,ASL最小 根号n +1

①索引表查找可使用何方法?①顺序、折半查找
块内查找可使用何方法? ②只能使用顺序查找
③数据可否用链式存储? ③可以使用链式存储
对那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找链表上无法实现二分查找。(*)

动态查找树表

1. 二叉排序树

  1. 二叉排序树定义:

二叉排序树或者是一棵空树;或者是具有如下特性的二叉树:

  1. 若它的左子树不空,则子树上所有结点的值均小于根结点的值;
  2. 若它的右子树不空,则子树上所有结点的值均大于根结点的值;
  3. 它的左、右子树也都分别是二叉排序树 (递归)
  1. 二叉排序树的中序遍历结果递增有序
    判断一棵二叉树是否为二叉排序树:看其中序遍历结果是否递增有序
    因此,一个无序序列,可通过构建一棵二叉排序树而成为有序序列

  2. 二叉排序树的主要作用与操作

■ 二叉排序树主要作用:检索,排序
■二叉排序树主要操作:检索,插入(建立),删除

检索:

■ 在二叉排序树中查找是否存在值为x的结点。
查找过程为
① 若二叉排序树为空,查找失败。
②否则,将x与二叉排序树的根结点关键字值比较:若相等,查找成功,结束;
否则,
a.若x小于根结点关键字,在左子树上继续进行,转①
b.若x大于根结点关键字,在右子树上继续进行,转①

  1. 二叉排序树的存储结构**(二叉链表)**

//二叉链表作为二叉排序树的存储结构
typedef struct NODE{int key;//数据元素的关键字//… ;//数据元素的其他数据项 struct NODE *lc,*rc;
}BiNode,*BiTree;
2. 二叉树的检索算法
//二叉排序树的检索算法
Bitree Search(BiNode *t, int x){ BiTree p; //p=t;while(p!=NULL){ //没找到就是返回空指针if (x==p->key)  //找到就返回return p; if (x < p->key) //左右搜索p=p->lc;else p=p->rc;
}
return p;
}//函数返回查找结果,没找到为空指针!

在这里插入图片描述

3. 二叉排序树的插入算法

向二叉排序树中插入x:
先要在二叉排序树中进行查找,若查找成功, 按二叉排序树定义,待插入数据已存在,不用插入;查找不成功时,则插入之。
新插入结点一定是作为叶子结点添加上去的。(*)

建立一棵二叉排序树则是逐个插入结点的过程。(*)
同一组数据,输入顺序不同所建二叉排序树不同

//int Insert(Bitree &t,int x)//二叉排序树的插入算法
{  BiTree q, p, s;q=NULL; p=t; ;//p为正在查看的节点,初始从根节点开始;q为p的双亲节点,根节点无双亲节点 			while(p!=NULL){ //查找if (x==p->key)      return 0;//在当前的二叉排序树中找到x,直接返回,不再做插入 q=p;//记录上一个位置if (x<p->key) p=p->lc; else p=p->rc;}//最后没找到的话 就是插入到 q的左孩子或右孩子处s=(BiTree)malloc(sizeof(Binode)) ;//没找到x,做插入:先申请节点空间 s->key=x; //初始化s->lc=NULL; s->rc=NULL ;//存放x,设为叶节点if(q==NULL)t=s;//若原先的二叉树是一棵空树,新插入的x对应的节点s为插入后二叉树的根节点//这个很重要 要不然空树 后面插入 就报错了。。。 else if(x<q->key) q->lc=s; ;//插入s为q的孩子else q->rc=s; return 1;
}
4. 二叉排序树的删除算法

从二叉排序树中删除一个结点之后,使其仍能保持二叉排序树的特性。

  1. 被删结点为叶结点,由于删去叶结点后不影响整棵树的特性,所以只需将被删结点的双亲结点相应指针域改为空指针
  2. 若被删结点只有右子树 pr只有左子树 pl,此时,只需将prpl替换被删结点即可。
  3. 若被删结点既有左子树 pl 又有右子树pr ,可按中序遍历保持有序进行调整。

左右孩子均存在
左子树中最大的结点q替换被删结点,再删"q" 右子树中最小的结点w替换被删结点,再删"w"
结点q (和w)的特点是最多只有一个孩子

左子树中最大结点的特点是 左子树的根节点一直向右下 直到p->rchild==NULL为真,此时p就是那个左子树中的最大结点。
右子树中最小结点的特点是右子树的根节点一直向左下,直到p->lchild==NULL为真,此时p就是那个右子树中的最小结点。

5. 最佳二叉排序树

二叉排序树查找过程与二分查找判定树相似

  1. n个数据元素按照不同的输入顺序构造的二叉排序树不同,其中平均查找性能最高的为最佳二叉排序树.

  2. 按照二分查找判定树的建立过程建立的二叉排序树为最佳二叉排序树

  3. 二叉排序树的查找速度一般比顺序查找快,但如果是单枝树则一样快。
    注意单枝树的情况

2.平衡二叉树

平衡二叉树(AVL树)(平衡二叉排序树)

希望所建的二叉排序树均为平衡二叉树 (AVL树)
注意需要时刻考虑到 空树 以及 单枝树 的情况

平衡二叉树:空树,或者是具有下列性质的二叉树:

  1. 左、右子树都是平衡二叉树 (递归)
  2. 左、右子树高度之差的绝对值不超过1
  3. 树中每个结点的左、右子树高度之差的绝对值不大于1

结点的平衡因子 B F = 结点的左子树深度 − 右子树深度 结点的平衡因子BF=结点的左子树深度-右子树深度 结点的平衡因子BF=结点的左子树深度右子树深度
平衡二叉树每个结点的平衡因子的绝对值不超过1

平衡旋转技术

如果在一棵AVL树中插入一个新结点,就有可能造成失衡,此时必须重新调整树的结构,使之恢复平衡。我们称调整平衡过程为平衡旋转

平衡旋转可以归纳为四类:

  1. LL平衡旋转–单向右旋
  2. RR平衡旋转–单向左旋
  3. LR平衡旋转–先左旋后右旋
  4. RL平衡旋转–先右旋后左旋

旋转操作特点

  1. 对不平衡的最小子树操作
  2. 旋转后子树根节点平衡因子为0
  3. 旋转后子树深度不变故不影响全树,也不影响插入路径上所有祖先结点的平衡度

平衡树查找的时间复杂度为O(logn)

LL型—单向右旋

在这里插入图片描述

RR型—单向左旋
在这里插入图片描述

LR型—先左旋后右旋:
在这里插入图片描述RL型—先右旋后左旋
在这里插入图片描述

平衡树上进行查找的过程和二叉排序树相同,因此,查找过程中和给定值进行比较的关键字的个数不超过平衡二叉树的深度
(*)
在这里插入图片描述

B-树 和B+树

动态查找表,允许:查找,插入和删除操作

B-树是一种平衡的多路查找树。

哈希表查找

不同的表示方法,其差别仅在于:关键字和给定值进行比较的顺序不同

哈希函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可

哈希表构造方法:

哈希表"冲突"现象——冲突处理

实际应用中不保证总能找到一个不产生冲突的哈希函数。一般情况下,只能选择恰当的哈希函数,使冲突尽可能少地产生。

冲突处理方法:

  1. 开放定址法
  2. 再哈希表法
  3. 链地址法
  4. 建立一个公共溢出区
1. 开放定址法

d i d_i di称为增量,有三种取法:

  1. 线性探测再散列: d i = i d_i = i di=i
  2. 平方(二次)探测再散列: d i = 1 2 , − 1 2 , 2 2 , − 2 2 , 3 2 , − 3 2 , … d_i = 1^2 ,-1^2, 2^2, -2^2, 3^2, -3^2 , … di=12,12,22,22,32,32,
  3. 随机探测再散列: d i d_i di 是一组伪随机数列

在这里插入图片描述
在这里插入图片描述
增量 d i d_i di 应具有“完备性”(*)
在这里插入图片描述

2. 再哈希表法
3. 链地址法

在这里插入图片描述

4. 建立一个公共溢出区

将发生冲突的数据元素顺序存放于一个公共的溢出区

哈希表的查找

查找过程和造表过程一致
哈希表饱和的程度,装载因子 α = n / m α=n/m α=n/m 值的大小(n—数据数,m—表的长度)

在这里插入图片描述

哈希表的删除操作

开放定址法:删除一个数据,为保证查找工作的正常进行不能真删----加删除标志
在这里插入图片描述

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

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

相关文章

06 Linux 设备驱动模型

1、Overview Linux-2.6 引入的新的设备管理机制 - kobject 降低设备多样性带来的 Linux 驱动开发的复杂度,以及设备热拔插处理、电源管理等将硬件设备归纳、分类,然后抽象出一套标准的数据结构和接口驱动的开发,就简化为对内核所规定的数据结构的填充和实现驱动模型是 Linu…

Go微服务: 分布式之通过本地消息实现最终一致性和最大努力通知方案

通过本地消息实现最终一致性 1 &#xff09;概述 我们的业务场景是可以允许我们一段时间有不一致的消息的状态的&#xff0c;并没有说必须特别高的这个消息的一致性比如说在TCC这个架构中&#xff0c;如果采用了消息的最终一致性&#xff0c;整体架构设计要轻松好多即便我们库…

获取东方财富网股票的实时数据股票的数据,并保存到Excel文件中

可以运行python文件获取东方财富网:【序号,代码,名称,最新价,涨跌幅,涨跌额,成交量,成交额,振幅,最高,最低,今开,昨收,量比,换手率,市盈率-动态,市净率,总市值,流通市值,涨速,5分钟涨跌,60日涨跌幅,年初至今涨跌幅,】数据,保存到Excel文件中。 import pandas as pd import re…

公司面试题总结(二)

7. 说说 JavaScript 中的数据类型&#xff1f;存储上的差别&#xff1f; • 基本类型&#xff1a; o Number o String o Boolean o Undefined o null o symbol • 引用类型 o Object o Array o Function • 声明变量时不同的内存地址分配&#xff1a; o 简单类型的…

嵌入式Linux系统编程 — 3.3 chown、fchown 和 lchown 函数更改文件属主

目录 1 文件属主 1.1 文件属主概念 1.2 如何查看文件属主 1.3 有效用户 ID 和有效组 ID 2 chown 函数 2.1 chown命令 2.2 chown函数 2.3 getuid 和 getgid函数 3 fchown函数 3.1 fchown函数简介 3.2 示例代码 4 lchown函数 1 文件属主 1.1 文件属主概念 Linux…

tkinter颜色选择器

tkinter颜色选择器 颜色选择器效果代码 颜色选择器 Tkinter 提供了一个简单易用的颜色选择器模块 colorchooser&#xff0c;通过调用 colorchooser.askcolor() 方法&#xff0c;我们可以轻松实现颜色选择功能。 效果 代码 import tkinter as tk from tkinter import colorch…

CSS函数: translate、translate3d的使用

translate()和translate3d()函数可以实现元素在指定轴的平移的功能。函数使用在CSS转换属性transform的属性值。实现转换的函数类型有&#xff1a; translate()&#xff1a;2D平面实现X轴、Y轴的平移translate3d()&#xff1a;3D空间实现位置的平移translateX()&#xff1a;实…

LLVM Cpu0 新后端4

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1V_tZkt9uvxo5bnUufhMQ_Q?…

向量数据库是什么?

向量数据库是什么&#xff1f; 随着人工智能和机器学习技术的迅猛发展&#xff0c;向量数据库作为一种新型数据库引起了广泛关注。向量数据库专门用于存储和查询高维向量数据&#xff0c;是在大规模数据检索和相似性搜索领域的重要工具。 向量数据库的定义 向量数据库是一种…

为下一波创新做准备:人工智能和元宇宙

人工智能和元宇宙的发展带来了独特的可能性和挑战。随着这些技术的发展&#xff0c;我们进入了一个沉浸式虚拟体验和智能系统的时代&#xff0c;我们正站在一个历史性的时刻。为迎接下一波创新&#xff0c;采取必要的措施是很重要的。 我们正在见证两项变革性技术的激动人心的发…

以sqlilabs靶场为例,讲解SQL注入攻击原理【54-65关】

【Less-54】 与前面的题目不同是&#xff0c;这里只能提交10次&#xff0c;一旦提交超过十次&#xff0c;数据会重新刷新&#xff0c;所有的步骤需要重来一次。 解题步骤&#xff1a; 根据测试&#xff0c;使用的是单引号闭合。 # 判断字段的数量 ?id1 order by 3 -- aaa# …

WPF视频学习-基础知识篇

1.简介WPF&#xff1a; C# 一套关于windows界面应用开发框架 2.WPF和winform的差别 &#xff0c;(WPF比较新) 创建新项目使用模板&#xff1a; WPF使用.xaml后缀&#xff0c;双击可查看操作界面和设置代码&#xff0c;其文件展开之后中有MainWindow.xaml.cs为程序交互逻辑。…

【Python】数据处理:文本文件操作

在Python中&#xff0c;处理文本文件是非常常见的任务。可以使用内置的open函数来打开、读取和写入文本文件。 打开文件 使用open函数打开文件。该函数有两个主要参数&#xff1a; open(file, moder, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, ope…

OmniGlue: Generalizable Feature Matching with Foundation Model Guidance

【引用格式】&#xff1a;Jiang H, Karpur A, Cao B, et al. OmniGlue: Generalizable Feature Matching with Foundation Model Guidance[J]. arXiv preprint arXiv:2405.12979, 2024. 【网址】&#xff1a;https://arxiv.org/pdf/2405.12979 【开源代码】&#xff1a;https…

Redis中的主从复制

分布式系统中的几种Redis部署方式 为了解决一个程序只部署在一个服务器上的单点问题&#xff1a; 可用性问题&#xff0c;如果这个机器挂了&#xff0c;就意味着服务就中断了 一个程序只部署在一台机器上&#xff0c;它的性能/支持的并发量也是有限的 所以&#xff0c;就引…

力扣 240.搜素矩阵II

题目描述&#xff1a; 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9…

openpose标定中棋盘格检测错误的解决方案

文章目录 1、openpose 棋盘格检测流程2、解决过程3、实测结果1、openpose 棋盘格检测流程 在opencv中通过调用cv::findChessboardCorners()函数,同时指定棋盘格内角点尺寸来检测画面中的棋盘格,结果将以一定顺序来保存结果。通常指定尺寸的两个纬度的值不能相同,例如当指定…

OpenCV 双目相机标定

文章目录 一、简介1.1单目相机标定1.2双目相机标定二、实现代码三、实现效果参考资料一、简介 1.1单目相机标定 与单目相机标定类似,双目标定的目的也是要找到从世界坐标转换为图像坐标所用到的投影P矩阵各个系数(即相机的内参与外参)。具体过程如下所述: 1、首先我们需要…

【STM32】ucOS-III多任务程序

【STM32】uc/OS-III多任务程序 文章目录 【STM32】uc/OS-III多任务程序STM32F103C8T6移植uC/OS-III基于HAL库超完整详细过程与相关实验实验任务实验过程一、 uC/OS-III源码下载二、 建立STM32CubeMX工程三、 复制uC/OS-III文件到工程文件夹四、 添加工程组件和头文件路径五、修…

数据结构之计数排序算法【图文详解】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;LiUEEEEE                        …