
数据结构
文章平均质量分 61
CSU_THU_SUT
THU研究僧,研究方向:AI安全 模糊测试 隐私计算。曾在滴滴国际化产品技术部,长亭科技云原生安全项目组实习。
关注我,一起变强!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【算法】生成分布式 ID 的雪花算法
ID 是数据的的标识,在查询数据库的数据时必须通过 ID 查询,在分布式环境下生成全局唯一的 ID 是一个重要问题。雪花算法(snowflake)是一种生成分布式环境下全局唯一 ID 的算法,该算法由 Twitter 发明,用于推文 ID 的生成。国内百度的 UidGenerator,美团的 Leaf 对雪花算法进行了优化,也都在 GitHub 上开源了。原创 2023-03-24 18:43:30 · 643 阅读 · 0 评论 -
动态规划专栏
动态规划专题,由道及术原创 2022-07-28 15:52:05 · 190 阅读 · 0 评论 -
LRU算法——从原理到手撕
背景—页面置换操作系统中对物理内存的管理采取分页、多级页表的方式。当CPU访问的页面不在物理内存时,便会产生一个缺页中断,请求操作系统将所缺页从磁盘调度到物理内存中。此时若物理内存已满,则需要从物理内存中选出一个页面,调度到磁盘中,然后将需要用到的页面放到物理内存中,实现页面置换。原创 2021-08-04 15:01:22 · 772 阅读 · 0 评论 -
KMP算法详解与Java实现
KMP算法是数据结构串部分最重要的算法。它由Knuth、Morris和Pratt共同提出,取首字母称为KMP算法。它相较于Brute-Force(暴力)算法有了很大的进步,主要是充分利用已经比较过的部分匹配信息。针对的问题—串的模式匹配设有两个串 t 和 p ,想在 t 中找到一个与 p 相等的子串。通常 t 称为目标串(target string),把 t 称为模式串(pattern string),因此这种查找也叫模式匹配。模式匹配成功则返回找到的 t 中子串首字符的索引值,不成功则 t .原创 2021-04-09 22:50:38 · 215 阅读 · 0 评论 -
快速排序(从固定基准值开始逐步优化)
快速排序的基本思想快速排序是对冒泡排序的升级,通过选取一个基准值,经一趟排序确定两个区间,一个区间全部比基准值小,另一个区间全部比基准值大。接着再选取一个基准值来进行排序,直到排序完成。关于基准值的选取是我们要讨论的第一个问题。选取基准值的三种方式一、固定基准值一般是选取数组的第一个或最后一个元素为基准值。以选择第一个元素为基准值为例public class QuickSort { public static void quicksort(int[] arr, int low, i原创 2021-03-08 13:15:50 · 592 阅读 · 0 评论 -
堆排序
优先队列可以用于以O(NlogN)时间复杂度的排序,基于该思想的算法叫做堆排序(heapsort)。二叉堆概念忘记的请看:优先队列的实现与应用思路与优化基本思路:建立N个元素的二叉堆,这个阶段花费O(N)时间,然后执行N次deleteMin操作,最小的元素先出堆(将其记录到第二个数组,因此需要O(N)的空间复杂度),最后得到N个元素的排序。每次deleteMin花费O(logN)时间,因此总时间复杂度为O(NlogN)。优化思路:基本思路的主要问题是空间复杂度,它使用了一个额外数组,存储需求原创 2021-02-19 23:30:25 · 122 阅读 · 0 评论 -
优先队列的实现与应用
前不久深信服面试问到了优先队列,好久之前看的都快忘了,重新学习记录一下~!二叉堆原理二叉堆(binary heap),以下简称堆(heap),使用它实现优先队列是一种不错且普遍的方式。以下讨论的对象是小顶堆,即根结点数值最小(优先级越小越高)。与之对应的有大顶堆,即根结点数值最大(优先级越大越高)。堆有两个性质:结构性质:堆是一棵完全二叉树。堆序性质:堆的根结点优先级最高,(除根节点外)任意节点X的父节点的值小于(等于)X的值,即父节点的优先级高于子节点。完全二叉树:假设一棵二叉树高为.原创 2021-02-18 14:40:52 · 191 阅读 · 0 评论 -
二叉树的层次遍历
前不久深信服一面问到了如何实现二叉树的层次遍历,在这里做个记录。什么是层次遍历说人话,就是按一层一层,从左到右的顺序遍历输出。以下图为例,层序遍历后输出的结果就是A-B-C-D-E-F-G-H-I-J实现层序遍历的思路先将根结点入队,在队列不空时循环。从队列中出列一个结点current,并访问它。若它有左孩子,将左孩子入队;若有右孩子,将右孩子入队。循环往复直至队列为空。Java实现import java.util.LinkedList;import java.util.Que.原创 2021-02-14 15:26:19 · 293 阅读 · 2 评论 -
HashMap源码逐行解读(看完吊打面试官)
前言:HashMap是面试中的常客,值得我们重点学习。其中对于源码的解读就是一个重要的学习环节,要做到“源码在我心中”。HashMap中的核心属性1、默认初始容量(DEFAULT_INITIAL_CAPACITY) /** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka .原创 2021-02-10 14:37:26 · 546 阅读 · 0 评论 -
谁说面试只问AVL树、B+树、红黑树?那你也得会BST吧!
初始BST二叉搜索树(Binary Search Tree,BST)又称二叉排序树,其定义为要么是空树,要么是满足二叉搜索树性质的二叉树。二叉搜索树性质(BST性质)如下:若根结点的左子树非空,则左子树的所有结点关键字均小于根结点关键字。若根结点的右子树非空,则右子树的所有结点关键字均大于根结点关键字。根结点的左右子树本身又各是一棵二叉搜索树。注:在实际应用中,可能出现关键字相同的情况,可以修改(1)中为小于等于,或(2)中为大于等于,甚至修改为左大右小。二叉排序树得名于它的一个重要性原创 2021-02-05 15:13:15 · 182 阅读 · 0 评论 -
B+树(从“为什么”到“是什么”再到“怎么用”)
有了BST和AVL树,为什么还需要B+树?我们在讨论BST、AVL树等等这些时基于这样一个假设 即可以把整个数据结构存储到计算机的主存中。 但是,当数据多到主存装不下时,那么就必须把数据结构放到磁盘上了,此时大O模型不再使用。大O分析基于的假设是所有操作耗时都是相等的。那又如何呢?还是不知道B+树有何用武之地。且慢,听我细细分解。举一个例子,一台500-MIPS机器每秒执行五亿条指令,因为它是电驱动的;而磁盘操作基于机械运动,一个7200RPM,即一分钟7200转,的磁盘,相当于1转1/120秒原创 2020-12-14 00:42:24 · 213 阅读 · 0 评论 -
AVL树的Java实现及面试相关
什么是AVL树AVL树,是最先发明的自平衡二叉树,得名于发明者Adelson-Velsky和Landis。他们在1962年的论文《An algorithm for the organization of information》中发表了它。AVL树应满足以下条件:1.首先它是一棵二叉搜索树(BST),即对于任意节点,左节点的值小于根结点的值,右节点的值大于根结点的值。2.它要么是一棵空树,要么对任意一个节点,其左右子树高度差的绝对值不超过1。3.对出现不平衡的节点根据不同情况进行旋转。左旋、右旋原创 2020-12-07 00:12:15 · 157 阅读 · 0 评论 -
数据结构(二)——哈夫曼压缩前传——哈夫曼树及哈夫曼编码(Java实现)
定义哈夫曼树(Huffman Tree)又称最优二叉树,是一类带权路径最短(即WPL最小)的树。哈夫曼编码就是利用哈夫曼树进行的一种可变字长的编码方式。注:带权路径长度(WPL)是设二叉树有n个叶结点,每个叶结点带有权值w,从根结点root到各个叶结点的路径长度为l,则所有叶结点带权路径长度之和为Σwl=WPL。引入哈哈哈相信大家看完定义肯定还是一头雾水,下面我以Huffman Tree最常应用的压缩领域的一个例子来由浅入深讲解哈夫曼树。CASE:有一段文本58个字符,由七种字符构成:a,e,i原创 2020-07-15 15:51:05 · 304 阅读 · 0 评论 -
数据结构(一)——链表实现多项式的加法乘法(C++实现)
前言作为日后必将成为大佬的 新手我来说,数据结构是一片崭新的领域,对它既有兴奋好奇,亦有担心疑虑。站在前人的肩膀上,他们告诉我,数据结构的意义=>link link昨天一位学长(前端方向)面了字节,在面经中提到一点是面试官最后对学长的评价:“觉得你可能太偏重于业务实现,或者把项目做出来就行了。或者你这个项目的深度根本就不够…需要去买书来系统性地学习下。比如说缓存,比如说跨域…是你必须...原创 2020-03-17 01:17:12 · 2522 阅读 · 0 评论