aspglujalk查找


一、查找

  • 查找可以分为两个方面进行阐述。一是数据通过查找表的方式进行组织。二是查找方法的选择进行查找。
  • 对查找表可以进行查找、检索、插入、删除等操作。
  • 查找表可以分为静态查找表和动态查找表。静态查找表仅支持只读。动态查找表还支持插入、删除的操作。
  • 查找表通过关键字比较进行查找。

平均查找长度(比较查找效率)
ASL=p1c1+p2c2+…+pncn;
pi:第i个元素的概率
ci:第i个元素需要比较的次数

常见的查找算法
顺序查找
二分查找
索引查找
哈希查找

二、顺序查找

从表中指定位置开始将关键字与记录进行比较,若相等则查找成功。

int seqsearch(DataType R[], key) {
	int i = R.length;
	if (!R[0]){
		int tmp;
		tmp = R[0];
		R[0] = key;
		while (R[i] != key){
			i = i - 1;
		}
		R[0] = tmp;

	}else
	{
		R[0] = key;
		while (R[i] != key){
			i = i - 1;
		}
		R[0] = NULL;
	}
	return i;
}

算法评价
空间复杂度O(1)
时间复杂度:最好情况O(1),最坏情况O(n),平均情况O(n)

三.折半查找

折半查找要求表是有序表
只适用于顺序结构

将待查关键字与有序表中间位置的记录进行比较,若相等查找成功。否则根据大小情况到表的前后半部分进行比较查找
代码如下(示例):

int BinarySearch(DataType SL[], KeyType key, int n) {
	int low = 1;
	int high = n;
	while (low<=high){
		int mid = (low + high) / 2;
		if (key==SL[mid]){
			return mid;
		}
		else if (key>SL[mid]){
			low = mid + 1;
		}
		else{
			high = mid - 1;
		}
		return 0;
	}
}

算法评价:
折半查找效率高
平均查找性能与最坏情况接近
只适用于顺序结构

四.索引查找

对于那些数据量庞大且无序的记录通常使用索引查找配合顺序或折半查找来进行。

  • 建立索引
  • 快速定位
  • 顺序或折半查找

索引表的构建

  • 分块
  • 建立索引项:关键字项:记录该块中最大关键字值。指针项:记录该块第一个记录在表中的位置。
  • 所有索引项组成索引表
    在这里插入图片描述
    在这里插入图片描述
// 索引表结构
typedef struct IndexType {          
	KeyType key;
	int link;
};

//索引表顺序查找法
int IndexSequelSeach(IndexType ls[], DataType s[], int m, KeyType key) {
	int i = 0;
	while (i<m&&key>ls[i]){
		i++;
	}
	if (i==m){
		return -1;
	}
//表内
	else{
			int j = ls[i].link;
		while (key!=s[j]&&j<ls[i+1].link){
			j++;
		}
		if (key==s[j]){
			return j;
		}
		else {
			return - 1;
		}
	}
}

5.哈希查找

  1. 哈希查找是建立在哈希表的基础上进行的。
  2. 哈希表是根据设定的哈希函数再加上处理冲突的方法,将一组关键字映射到一个地址的连续地址空间上。
  3. 也就是说我们可以通过关键字+哈希函数,直接得到记录所存储的地址值。直接读取记录

5-1哈希函数

构造哈希函数方法:

直接哈希函数:取关键字本身或关键字的某个线性函数值作为哈希地址
数字分析法:选取关键字中某些位数上关键字均匀分布的数字组合起来作为哈希地址
平方取中法:取平方后的中间几位作为哈希地址
折叠法:针对关键字位数较长时,可将关键字分割成位数相等的几部分。取它们的叠加和(舍去高位的进位)作为哈希地址。
除留取余法:除p取余。p的选择很重要
随机数法

5-2字符串哈希查找

利用关键字ASCLL码的和+取余法来求得哈希地址

通过关键字位数转移和仔细地寻找关键字规律

5-3冲突处理

开放地址法
再哈希法
链地址法
公共溢出区法

1.开放地址法
H0=H(key)
Hi=(H(key)+di) %m i=1,2,3,4

{Hi为第i次冲突的地址;H(key)为hash函数值;m为Hash表长;di为增量序列;}

线性探测再散列di=c*i
平方探测再散列di=12,22,32
随即探测再散列di伪随机

2.再哈希法
将n个不同哈希函数排成一个序列,当发生冲突时,由RHi确定第i次冲突的地址Hi。
Hi=RHi(key) i=1,2,3…n
RHi为不同哈希函数

3.链地址法
在这里插入图片描述

4.公共溢出区法
在这里插入图片描述

5-4哈希表构建

Status SearchHash(HashTable H, KeyType key, int& p, int& c) {
	p = Hash(k);
	while (H.data[p].key!=NULL&&H.data[p].key!=key)
		collision(p, ++c);
	if (H.data[p].key==key)
	{
		return true;
	}
	else {
		return false
	}
}

Status InsertHash(HashTable& H, DataType e) {
	 c = 0;
	if (SearchHash(H,e.key,p,c)
		return false;
	else if(c<hashsize[H.sizeindex]/2)
	{
		H.data[p]=e;
		++H.count;
		return true;
	}
	else
	{
		RecreatHashTable(H);
		return true;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全流程的再造和全生命周期的管理服务。中国政府高度重视这一领域的发展,提出“数字中国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问题,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问题、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问题。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据中心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据中心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品流通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧流通管理系统和溯源管理系统提高流通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动中国农业现代化的重要途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值