数据结构与算法
数据结构与算法
Ryze丶
不积跬步无以至千里
展开
-
30张图带你彻底理解红黑树
30张图带你彻底理解红黑树写在前面当在10亿数据中只需要进行10几次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀! —— 学红黑树有感。终于,在学习了几天的红黑树相关的知识后,我想把我所学所想和所感分享给大家。红黑树是一种比较难的数据结构,要完全搞懂非常耗时耗力,红黑树怎么自平衡?什么时候需要左旋或右旋?插入和删除破坏了树的平衡后怎么处理?等等一连串的问题在学习前困扰着我。如果你在...转载 2020-03-17 15:55:23 · 447 阅读 · 0 评论 -
LRU算法实现
LRU算法实现以下是基于 双向链表 + HashMap 的 LRU 算法实现,对算法的解释如下:访问某个节点时,将其从原来的位置删除,并重新插入到链表头部。这样就能保证链表尾部存储的就是最近最久未使用的节点,当节点数量大于缓存最大空间时就淘汰链表尾部的节点。为了使删除操作时间复杂度为 O(1),就不能采用遍历的方式找到某个节点。HashMap 存储着 Key 到节点的映射,通过 Key 就能...转载 2019-12-04 13:48:33 · 283 阅读 · 0 评论 -
数据结构和算法(3)-向量,列表与序列
序列( Sequence),就是依次排列的多个对象。两种典型的序列:向量( Vector)和列表( List)。3.1 向量与数组通过[0, n-1]之间的每一个整数,都可以直接访问到唯一的元素 e,而这个整数就等于 S 中位于 e 之前的元素个数⎯⎯在此,我们称之为该元素的秩( Rank)。3.1.1 向量 ADT操作方法功能描述getSize():报告向量中的元素...原创 2018-09-26 23:37:18 · 3045 阅读 · 0 评论 -
数据结构和算法(2)-栈与队列
引言栈与队列两种实现方法:数组及链表。 数组实现采用“基于下标访问”( Index-based access)的模式,而链表实现则是基于“节点”( Node)或“位置”( Position)的概念。无论是哪种实现方式,栈与队列的每一基本操作都可以在常数时间内完成。栈ADTPOP:移除栈定元素 操作 描述 push(x) 将对象 x 压至栈顶...转载 2018-09-13 17:39:16 · 274 阅读 · 0 评论 -
数据结构与算法(1)-算法时间复杂度
1.算法时间复杂度:Ω-Θ-T(自下而上)大 O 记号 如果存在正常数 a、 N 和一个函数 f(n),使得对于任何 n > N,都有T(n) < a × f(n)我们就可以认为在 n 足够大之后, f(n)给出了 T(n)的一个上界。对于这种情况,我们记之为T(n) = O(f(n))这里的 O 称作“大 O 记号( Big-O notation)”。...原创 2018-09-04 10:27:37 · 250 阅读 · 0 评论 -
排序算法(1)-冒泡排序,选择排序,插入排序,希尔排序,快速排序
一些基本的排序算法:package tenSortingMethods;/** * @author zhangdi * @description 排序算法 * @Date 20180531 */public class Sort { public static void main(String[] args) { int[] arr = {6,1,2,...原创 2018-06-06 10:11:44 · 734 阅读 · 0 评论 -
排序算法(2)-冒泡排序及优化
1.冒泡排序之前写过一个排序算法(1),其中总结了冒泡排序 . 冒泡排序的思想,是把相邻的元素两两比较,根据大小来交换元素的位置,每经过一轮的扫描,就会确定出一个最大的元素,即是一个元素有序.原始的冒泡排序是稳定排序(如果一个数组中存在几个相同的元素,排序前后的相同元素的前后顺序不会发生变更,则认为排序是稳定的)。由于该排序算法的每一轮要遍历所有元素,轮转的次数和元素数量相当,所以时间复...原创 2018-07-18 21:29:24 · 258 阅读 · 0 评论 -
二分查找的时间复杂度
1.二分查找的时间复杂度 假使总共有n个元素,那么二分后每次查找的区间大小就是n,n/2,n/4,…,n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数。 最坏的情况是K次二分之后,每个区间的大小为1,找到想要的元素 令n/2^k=1, 可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn).2.算法的时间复杂度 定义: 存在常数 c...原创 2018-06-19 22:46:58 · 46622 阅读 · 0 评论