数据结构
文章平均质量分 76
秋夫人
将军赶路不追野兔
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
冲突自由复制数据类型(Conflict-free Replicated Data Type, CRDT)
CRDT通过设计来自动解决分布式系统中的数据冲突。状态型CRDT通过合并状态来解决冲突,而操作型CRDT通过传播和应用操作来解决冲突。两种类型的CRDT都依赖于数学属性(如幂等性、交换性和结合性)来保证数据的最终一致性,从而简化了分布式数据同步和冲突解决的复杂性。原创 2024-10-18 09:50:17 · 1763 阅读 · 0 评论 -
G-Set(增长集合,Grow-Only Set)
由于 G-Set 是一个只增不减的集合,这意味着一旦标签被添加,它就会永久保留在集合中,适用于标签的累积和历史记录。当需要合并两个节点的计数器时,可以将两个 G-Set 的元素合并到一个新的 G-Set 中,这个新的 G-Set 包含了所有唯一的阅读事件。当需要同步或合并两个节点的在线用户集合时,可以简单地将两个 G-Set 的元素合并到一个新的 G-Set 中。当需要同步或合并两个节点的标签集合时,可以简单地将两个 G-Set 的元素合并到一个新的 G-Set 中。原创 2024-10-17 08:57:15 · 1730 阅读 · 0 评论 -
B+树(B+TREE)索引
InnoDB的B+树的阶(也就是树的分支因子)并不是一个固定的值,而是取决于几个因素,主要是页面(Page)的大小。总的来说,InnoDB的B+树通常是非常高阶的,这有助于减少树的高度,提高查询效率。例如,一个阶为4的B+树的每个节点最多有4个子节点。:B+树是一种多路平衡查找树,树的每个节点最多包含m个子节点(m是树的阶),除根节点和叶子节点外,其他每个节点至少有m/2个子节点。实际的B+树可能会有更多的关键字和层级,但查找原理是相同的:从根节点开始,根据关键字的大小逐层向下搜索,直到达到叶子节点,原创 2024-09-19 08:44:28 · 2873 阅读 · 0 评论 -
R树(R-tree索引)
R树由节点组成,每个节点可以包含多个条目,这些条目要么是指向子节点的指针(内部节点),要么是指向实际空间对象的指针(叶节点)。R树的节点之间通常没有直接的双向链表连接。实际上,叶1的MBR在插入对象D后并不需要扩展,因为D的MBR已经被叶1当前的MBR所包含。在这种情况下,由于条目D与两个种子合并后的增加面积相同,我们可以基于其他标准(如保持树的平衡)来选择分配条目D的节点。R树的分裂策略是在节点中的条目数超过了该节点的最大容量时使用的,目的是将一个满节点分裂成两个节点,并尽量保持树的平衡和查询效率。原创 2024-09-18 18:17:37 · 3652 阅读 · 0 评论 -
Count-Min Sketch 用于频率估计的数据结构
是一种概率型数据结构,用于大规模数据流中的频率估计问题,如计算一个元素在数据集中出现的次数。它由Cormode和Muthukrishnan在2005年提出。Count-Min Sketch可以在有限的内存空间内估计大量数据流中元素的频率,虽然它允许一定的误差,但这种误差是可控的。原创 2024-09-11 09:57:21 · 2032 阅读 · 0 评论 -
T树:T-TREE索引(非mysql索引)
在MySQL中,主要使用的索引类型是B-Tree索引和其变种,如B+Tree,这适用于大多数数据库查询和存储需求。MySQL还支持哈希索引、全文索引和空间索引等其他类型的索引,以满足特定的查询优化需求。尽管T-Tree索引在某些场景下可能非常有效,但它并不是MySQL支持的索引类型之一。原创 2024-09-11 08:54:34 · 1343 阅读 · 0 评论 -
常见哈希函数
选择合适的哈希函数需要根据具体的应用场景和需求来决定。对于需要高安全性的应用,如密码存储和数字签名,应选择如SHA-256或SHA-3这样的加密哈希函数。而对于性能要求高、安全性要求不那么严格的场景,如快速查找和数据校验,可以选择MurmurHash、xxHash等非加密哈希函数。原创 2024-08-31 09:22:17 · 2276 阅读 · 0 评论 -
哈希算法:xxHash
xxHash 是一种非常快速的哈希算法,用于生成非加密哈希值。它由 Yann Collet 设计,旨在提供高速的哈希计算,同时保持良好的分布性和碰撞抵抗能力。xxHash 主要用于哈希表、数据校验、快速数据比较和唯一标识符生成等场景,特别适用于需要处理大量数据的应用。原创 2024-08-31 09:21:53 · 2368 阅读 · 0 评论 -
CRC32
CRC32(循环冗余校验32位)是一种广泛使用的校验码(Checksum)算法,用于检测数据在存储或传输过程中是否发生变化或损坏。CRC32算法通过对数据块进行一系列的位运算,生成一个32位的整数(即CRC值),作为数据的校验码。当数据再次被读取或接收时,可以重新计算CRC值并与原始的CRC值进行比较,以验证数据的完整性。原创 2024-08-31 09:20:37 · 1785 阅读 · 0 评论 -
安全哈希算法:SHA系列
SHA系列提供了一系列加密哈希函数,用于确保数据的安全性和完整性。随着时间的推移,SHA系列经历了多次迭代和改进,以应对不断发展的安全威胁。在选择具体的SHA算法时,应考虑当前的安全建议和应用场景的特定需求。对于新的应用和系统,推荐使用SHA-2或SHA-3,因为它们提供了更高的安全性。原创 2024-08-31 09:16:54 · 957 阅读 · 0 评论 -
高性能哈希函数:CityHash、FarmHash
CityHash 和 FarmHash 都是由 Google 开发的高性能哈希函数库,主要用于处理非加密哈希场景,如哈希表、数据分布、快速数据比较等。它们都是设计用来在64位系统上高效运行,提供了对不同长度输入数据的良好支持,并能产生高质量的哈希值。原创 2024-08-31 09:04:40 · 1756 阅读 · 0 评论 -
加密哈希函数:MD5
MD5曾经是一种广泛使用的加密哈希函数,但由于存在安全漏洞,它不再适用于安全敏感的应用。尽管如此,MD5仍然在一些特定的、对安全要求不高的场景中有其应用价值。对于需要高度安全性的场景,应选择使用更加安全的哈希算法。原创 2024-08-31 09:10:41 · 803 阅读 · 0 评论 -
红黑树概念及其性质
红黑树相比AVL树,在维持平衡的严格程度上有所放松,这使得红黑树在插入和删除操作时的旋转次数通常少于AVL树,从而在某些应用场景下提供了更好的性能。然而,这种放松也意味着红黑树可能在某些极端情况下导致稍微不平衡的结构。原创 2024-08-31 08:40:30 · 1476 阅读 · 0 评论 -
数据结构可视化地址
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html数据结构可视化David Galles 旧金山大学计算机科学系当前,我们具有以下数据结构和算法的可视化:基本堆栈:数组实现堆栈:链表实现队列:数组实现队列:链表实现列表:数组实现(在Java版本中可用)列表:链接列表实现(在Java版本中可用)递归阶乘反转字符串N皇后问题索引编制二进制和线性搜索(排序列表)二叉搜索树AVL树(平衡二进制搜索树)原创 2020-10-29 22:20:15 · 265 阅读 · 0 评论 -
五十道编程小题目 --- 28 八大排序算法 java 之 01直接插入排序
1.插入排序—直接插入排序(Straight Insertion Sort)基本思想:将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。要点:设立哨兵,作为临时存储和判断数组边界之用。直接插入排序示例:如果碰见原创 2016-09-05 19:00:23 · 1294 阅读 · 0 评论 -
五十道编程小题目 --- 28 八大排序算法 java 之 02希尔排序
2. 插入排序—希尔排序(Shell`s Sort)希尔排序是1959 年由D.L.Shell 提出来的,相对直接排序有较大的改进。希尔排序又叫缩小增量排序基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。操作方法:选择一个增量序列t1,t2,…,tk,其中t原创 2016-09-05 19:01:52 · 1123 阅读 · 0 评论 -
五十道编程小题目 --- 28 八大排序算法 java 之 04堆排序
4.选择序—堆排序(Heap Sort)堆排序是一种树形选择排序,是对直接选择排序的有效改进。基本思想:堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足时称之为堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最小项(小顶堆)。若以一维数组存储一个堆(Java数组从0开始,i为0到n-1),则堆对应一棵完全二叉树,且所有非叶结点的原创 2016-09-05 19:05:12 · 933 阅读 · 0 评论 -
五十道编程小题目 --- 28 八大排序算法 java 之 06快速排序
6. 交换排序—快速排序(Quick Sort)快速排序算法介绍 快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个子数组排序即可原创 2016-09-06 13:14:41 · 1121 阅读 · 0 评论 -
五十道编程小题目 --- 28 八大排序算法 java 之 05冒泡排序
5. 交换排序—冒泡排序(Bubble Sort)基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。冒泡排序的示例: 算法的实现:import java.util.Random;publ原创 2016-09-06 13:16:09 · 1464 阅读 · 0 评论 -
五十道编程小题目 --- 28 八大排序算法 java 之 07归并排序
7. 归并排序(Merge Sort)基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序示例: 合并方法:设r[i…n]由两个有序子表r[i…m]和r[m+1…n]组成,两个子表长度分别为m+原创 2016-09-07 15:34:43 · 1151 阅读 · 0 评论 -
五十道编程小题目 --- 28 八大排序算法 java 00
【程序28】 题目:对10个数进行排序 1.程序分析:八大排序算法扩展:八大排序算法排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。原创 2016-08-26 15:09:13 · 3975 阅读 · 1 评论 -
五十道编程小题目 --- 28 八大排序算法 java 之 03简单选择排序
3. 选择排序—简单选择排序(Simple Selection Sort)基本思想:在要排序的一组数中,选出最小(或者最大)的一个数,用第1个位置的数与剩下的n-1个数进行比较,然后,用第2个位置的数与剩下的n-2个数进行比较,以此类推。简单选择排序的示例: 算法实现:[java] view plain cop原创 2016-09-05 19:02:42 · 770 阅读 · 0 评论
分享