数据结构,算法
数据结构,算法
yi_wen
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构 -- 自适应基数树(ARTree)
一、背景 基数树在前面已经讲过了,将一个key划分成多段,每段作为树的一层,中间节点和叶子节点都存很多指针,中间节点的指针指向孩子节点,叶子节点的指针指向具体的value。 从上述描述可知,基数树的树高取决于key长。 但问题是:使用基数树的场景多数是稀疏的key(即:key可能比较离散,散列在树的很多地方),而基数树中间节点会按照当前段值存很多指针,导致内存开销较大。即:在性能(树高)和空间占用(内存开销)之间存在不可调和的矛盾。二、Adaptive Radix Tr...原创 2021-08-19 16:50:17 · 2460 阅读 · 0 评论 -
数据结构之radix(基数)树
分为中间节点和叶子节点,每个节点都可存n(一般为2的m次方)个slot(槽位)(也称分叉个数),叶子节点中每个slot指向真正存的信息(比如:文件管理中按8k Byte切分的偏移,内存管理中按1Byte切分的地址),然后将数字按m拆分一段一段从高到低(或者从低到高,或从中间某段开始到某段结束)拆分。然后结合实际业务,再来定义树高。比如:64位按6位拆分,则 m=6,n=2的6次方。49-64(此高位区用不上,先不管) 13-48(共36位,按6位一段段拆分,共拆分成6段(树高为6)) 0原创 2021-05-24 15:52:51 · 603 阅读 · 0 评论 -
算法学习之选择排序
一、总体思路分成两个区域:排好序区(数组前面部分,绿色部分) + 待排序区(数组后面部分,黑色部分)。不断从后面未排序区中选最小的出来放到排序区,使得已排序区不断扩大。 --- 插入排序是遍历已排序区,选择排序是遍历未排序区。A B C D E F G H 初始时刻:已排序区为空。每趟:从头到尾遍历未排序区,从中选出一个最小值出来,放入已排序去区。已排序区增加一个,未排序区减少一个,未排序区起始下标加1。二、优化 ...原创 2021-05-24 19:22:54 · 130 阅读 · 0 评论 -
算法学习之插入排序
分成两个区域:排好序区(数组前面部分,绿色部分) + 待排序区(数组后面部分,黑色部分)。不断将后面未排序区的数据往已排序区插入,使得已排序区不断扩大。A B C D E F G H 初始时刻:已排序区只有一个数。每趟:尝试将未排序区第一个元素插入已排序区,具体做法:从已排序区末尾元素开始往前遍历,若未排序区第一个元素比之小,则可以加入已排序区,且需从已排序区腾出一个位置出来。A B C D E ...原创 2021-05-22 20:46:03 · 183 阅读 · 0 评论 -
算法学习之冒泡排序
分成多趟,每趟:从头到尾两两比较,顺序不符合的交换一下位置。A B C D E F 基础算法: 每一趟:A位置和B位置比较,若满足条件,A和B位置的数进行交换;然后B位置和C位置做同样的操作;依次循环到数组末尾。 第一趟:将最大或最小的数交换到最后。 第二趟:将次大或次小的数交换到倒数第二位置。优化: 每一趟中,最后交换过的位置之后的数据都排好序了,下一趟只需要比较到这个位置即可。最终代码// 冒泡...原创 2021-05-22 18:21:48 · 154 阅读 · 0 评论
分享