【21天算法学习】索引查找

简介: 【21天算法学习】索引查找

作者简介:

🍀姓姜,字君竹。

🍁浅薄观点:科以载文,文以载道

🌱软件技术升计科,计划考研

🌾要有最朴素的生活和最遥远的梦想,即使明日,天寒地冻,路遥马亡


1.概念及介绍

 索引查找主要氛围基本索引查找和分块查找,核心思想是对于无序的数据集合,先建立所以表,是的索引表有序和或分块有序,结合顺序查找与索引查找的方法完成查找。

 基本索引查找是基于一个有序的索引表进行折半查找,然后再根据索引表与主数据表的关系确定数据所在位置的过程。所以只需要在折半查找后,从索引中取出该元素在主数据集合中对应的位置即可。

 使用分块查找时,主数据表必须满足该规律:按一定的区间长度进行分块后,前一块中的最大关键字小于后一块中的最小值,即后一块中的任意元素都大于前一块中的所有元素,关键字存储的就是这一块中足底啊的关键字的值。

在进行分块查找时易燃是先在索引表上进行折半查找,确定待查元素所在分块。由于分块内部的元素无序,所以分块内部(基于快索引表的快区间端点)再食用顺序查找确定元素的最终位置。


2.时间空间复杂度

2.1 基本索引查找:

 对于完整的索引查找,整个过程包含索引的建立和元素的查找两个步骤。对于索引表的建立可以使用不同的排序算法时效内,有可能有多种情况。索引表是一个有序的集合,先在此基础上进行折半查找,然后根据索引表中存储的信息提取出对应的位置,此处为常数级O(1)。所以对于查找部分,时间复杂度与折半查找为通过一下级别:O(log2n)。

 对于基本索引表,相当于是对主数据进行排序后完整的存储下来,因此除去一些临时变量外,主要需要对索引表分配额外的存储空间,与输入数据的量级相同:O(n)。

2.2 分块查找:

 对于分块查找,需要主数据表本身满足一定的规律,在此之上只需要指定一个合理的区间长度,就可以得到一个分块索引表,主要的消耗在于存储,所以分块查找可以看做是两次查找:分块的折半查找和分块内的顺序查找。时间复杂度不会超过O(n)。

 由于选定的区间长度不唯一,所以需要的存储空间也不确定,一班为n/a,a为常数,最多也不会超过O(n)。


3.图解

3.1 基本索引查找:

3.2 分块查找:

4. 代码实现

4.1 基本索引查找:

4.2分块查找:


又停电了,之后再补,烦死了。


学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。


目录
相关文章
|
27天前
|
存储 算法 关系型数据库
深入理解InnoDB索引数据结构和算法
1. **索引定义**:索引是提升查询速度的有序数据结构,帮助数据库系统快速找到数据。 2. **索引类型**:包括普通索引、唯一索引、主键索引、空间索引和全文索引,每种有特定应用场景。 3. **数据结构**:InnoDB使用B+树作为索引结构,确保所有节点按顺序排列,降低查询时的磁盘I/O。 4. **B+树特性**:所有数据都在叶子节点,非叶子节点仅存储索引,提供高效范围查询。 5. **索引优势**:通过减少查找数据所需的磁盘I/O次数,显著提高查询性能。 **总结:**InnoDB索引通过B+树结构,优化了数据访问,使得查询速度快,尤其适合大数据量的场景。
27 0
深入理解InnoDB索引数据结构和算法
|
2月前
|
机器学习/深度学习 数据采集 搜索推荐
Paper Digest | 突破个性化推荐数据稀疏性:长尾增强的图对比学习算法研究
本文提出了一种新的长尾增强的图对比学习方法(LAGCL),该方法促使模型同时兼顾头部节点与尾部节点之间的知识,并通过长尾增强技术来使模型产出更均匀更准确的节点表征,从而改进基于 GNN 的推荐任务。
|
2月前
|
算法 网络协议 Linux
【Cisco Packet Tracer】交换机的自学习算法
【Cisco Packet Tracer】交换机的自学习算法
54 0
|
3月前
|
算法 安全 数据安全/隐私保护
C/C++学习 -- RSA算法
C/C++学习 -- RSA算法
34 0
|
3月前
|
机器学习/深度学习 算法
机器学习 - [集成学习]Bagging算法的编程实现
机器学习 - [集成学习]Bagging算法的编程实现
32 1
|
9天前
|
机器学习/深度学习 算法 前端开发
Scikit-learn进阶:探索集成学习算法
【4月更文挑战第17天】本文介绍了Scikit-learn中的集成学习算法,包括Bagging(如RandomForest)、Boosting(AdaBoost、GradientBoosting)和Stacking。通过结合多个学习器,集成学习能提高模型性能,减少偏差和方差。文中展示了如何使用Scikit-learn实现这些算法,并提供示例代码,帮助读者理解和应用集成学习提升模型预测准确性。
|
9天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
19 0
|
16天前
|
算法
【算法学习--字符串】(不含KMP算法)
【算法学习--字符串】(不含KMP算法)
|
1月前
|
Rust Dart 算法
55.3k star!开源算法教程,附带动画图解,学习算法不再苦恼!
55.3k star!开源算法教程,附带动画图解,学习算法不再苦恼!
|
1月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法