数据结构与算法
文章平均质量分 89
小哈龙
一颗勇往直前的心
展开
-
B+树
B+树中的所有数据均保存在叶子结点,且根结点和内部结点均只是充当控制查找记录的媒介,并不代表数据本身,所有的内部结点元素都同时存在于子结点中,是子节点元素中是最大(或最小)元素。并且此时91所在结点的兄弟节点无法给该节点提供关键字,因此该结点和兄弟结点合并,并且需要修改合并后的节点的父节点的关键字值,合并后的结点的关键字个数满足条件。在B+树中,叶节点包含信息,所有非叶节点仅起索引作用,非叶节点的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。(橙色为修改之后的)转载 2024-05-17 15:28:54 · 42 阅读 · 0 评论 -
常见的hash算法及其原理
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。转载 2024-05-17 11:47:20 · 88 阅读 · 0 评论 -
四叉树空间索引原理及其实现
四叉树索引的基本思想是将地理空间递归划分为不同层次的树结构。它将已知范围的空间等分成四个相等的子空间,如此递归下去,直至树的层次达到一定深度或者满足某种要求后停止分割。四叉树的结构比较简单,并且当空间数据对象分布比较均匀时,具有比较高的空间数据插入和查询效率,因此四叉树是GIS中常用的空间索引之一。常规四叉树的结构如图所示,地理空间对象都存储在叶子节点上,中间节点以及根节点不存储地理空间对象。四叉树示意图四叉树对于区域查询,效率比较高。但如果空间对象分布不均匀,随着地理空间对象的不..转载 2021-06-17 16:28:14 · 3146 阅读 · 0 评论 -
浅谈常见的七种加密算法及实现
本文转载自:https://blog.csdn.net/baidu_22254181/article/details/82594072前言数字签名、信息加密是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的签名加密算法来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。正文1. 数字签名数字签名,简单来说就是通过提供可鉴别的数字信息验...转载 2021-02-22 19:23:36 · 5425 阅读 · 0 评论 -
红黑树c++实现
红黑树的实现文件(RBTree.h)/** * C++ 语言: 红黑树 * * @author skywang * @date 2013/11/07 */#ifndef _RED_BLACK_TREE_HPP_#define _RED_BLACK_TREE_HPP_#include <iomanip>#include <iostream>using namespace std;enum RBTColor{RED, BLACK};template转载 2020-07-12 21:14:57 · 209 阅读 · 0 评论 -
二叉树的遍历方法总结与c++实现
概述:二叉树的遍历方式分为:深度遍历(前序,中序,后序)广度遍历(层次遍历)二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们平常所说的层次遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁,而对于广度遍历来说,需要其他数据结构的支撑,比如堆了。所以,对于一段代码来说,可读性有时候要比代码本身的效率要重要的多。四种主要的遍历思想为原创 2020-07-02 22:27:54 · 771 阅读 · 0 评论 -
哈夫曼树(二)之 C++详解
本文转载自:http://www.cnblogs.com/skywang12345/更多内容:数据结构与算法系列 目录哈夫曼树的介绍Huffman Tree,中文名是哈夫曼树或霍夫曼树,它是最优二叉树。定义:给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小,则这棵树被称为哈夫曼树。 这个定义里面涉及到了几个陌生的概念,下面就是一颗哈夫曼树,我们来看图解...转载 2020-04-08 14:44:35 · 466 阅读 · 0 评论 -
欧几里得算法(辗转相除法)
算法是程序的灵魂,不懂算法的程序员不是一个合格的程序员。源自LeetCode上的一道算法题,说实话,我已经忘记欧几里得算法是怎么实现的了。。。简介:欧几里得算法(又称辗转相除法),旨在解决求两个正整数的最大公约数的算法。计算公式gcd(a,b) = gcd(b,a mod b)编码实现:c语言(参考百度百科)/*欧几里德算法:辗转求余原理: gcd(a,b)=gc...原创 2020-03-13 12:01:55 · 666 阅读 · 0 评论 -
平衡二叉树
前言上篇文章里面,我们已经学习了二叉搜索树的相关内容,二叉搜索树有一个缺点,在插入数据是有序的序列(包括升序和降序),会导致二叉树退化成链表,从而导致在查找,删除,添加时的性能均从O(logN)降低为O(N),这是不能接受的。如下图:究其原因,是因为二叉搜索树退化成链表的时候,树的高度与节点的个数相等,也就是成正比,所以为了优化这种情况,就出现了具有平衡能力的二叉搜索树,其中AVL树是...转载 2019-11-11 16:48:32 · 2887 阅读 · 0 评论 -
算法的时间复杂度与空间复杂度
时间复杂度1.算法的效率虽然计算机能快速的完成运算处理,但实际上,它也需要根据输入数据的大小和算法效率来消耗一定的处理器资源。要想编写出能高效运行的程序,我们就需要考虑到算法的效率。算法的效率主要由以下两个复杂度来评估:时间复杂度:评估执行程序所需的时间。可以估算出程序对处理器的使用程度。空间复杂度:评估执行程序所需的存储空间。可以估算出程序对计算机内存的使用程度。设计算法时,...转载 2019-11-11 16:21:57 · 655 阅读 · 0 评论 -
完美二叉树, 完全二叉树和完满二叉树
树在数据结构中占有非常重要的地位。本文从树的基本概念入手,给出完美(Perfect)二叉树,完全(Complete)二叉树和完满(Full)二叉树的区别。如果学习过二叉树,但是对这三种二叉树并没有深入的理解,或者完全被国产数据结构教科书所误导(只听说过满二叉树和完全二叉树)的朋友不妨花点时间耐着性子将本文仔细阅读N(>=1)遍。1. 树(Tree)的基本概念1.1 树的定义A ...转载 2018-06-22 15:05:42 · 35268 阅读 · 9 评论 -
c++实现八大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间...转载 2018-06-07 14:29:14 · 1384 阅读 · 1 评论