本文主要包括以下内容:并查集的概念并查集的操作并查集的实现和优化
Quick FindQuick Union基于size的优化基于rank的优化路径压缩优化并查集的时间复杂度并查集的概念在计算机科学中,并查集 是一种树形的数据结构,用于处理不交集的合并(union)及查询(find)问题。并查集 可用于查询 网络 中两个节点的状态, 这里的网络是一个抽象的概念, 不仅仅指互联网中的网络, 也
转载
2024-04-23 10:23:10
61阅读
我们来看看lua vm在解析下面源码并生成bytecode时的整个过程:1 foo = "bar"
2 local a, b = "a", "b"
3 foo = a首先我们先使用ChunkySpy这个工具来看看vm最终会具体生成什么样的vm instructions在这里,开头为[数字]的行是vm真正生成的字节码,我们看到一共生成了六行字节码。首先loadk将常量表中下标为1的常量即"bar"赋
预先知道算法的复杂度是一回事,了解其后的原理是另一件事情。不管你是计算机科班出身还是想有效解决最优化问题,如果想要用自己的知识解决实际问题,你都必须理解时间复杂度。先从简单直观的 O(1) 和 O(n) 复杂度说起。O(1) 表示一次操作即可直接取得目标元素(比如字典或哈希表),O(n) 意味着先要检查 n 个元素来搜索目标,但是 O(log n) 是什么意思呢?(总之括号里面的数字是几,我们的算
转载
2024-06-13 22:09:54
74阅读
谭淼跳跃表(skiplist)是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到指向其他节点的目的。在Redis中,有序集合是通过跳跃表和hash实现的。一、跳跃表为了更好的阅读下面的文章,建议先对跳跃表的基本概念进行学习,链接如下:...二、数据结构先看一下与跳跃表有关的数据结构。1、zskiplistNode zskiplistNode是跳跃表节点,用于
一 压缩列表压缩列表是List、Hash、SortSet的底层实现。 如果我们要查找定位第一个元素和最后一个元素,可以通过表头三个字段的长度直接定位,复杂度是 O(1)。而查找其他元素时,就没有这么高效了,只能逐个查找,此时的复杂度就是 O(N) 了。二 跳跃表跳表在链表的基础上,增加了多级索引,通过索引位置的几个跳转,实现数据的快速定位,如下图所示: 这个查找过程就是在多级索引上跳来跳去,最后定
转载
2024-03-11 10:35:08
74阅读
五种数据结构字符串哈希列表集合有序集合stringhashlistsetsortedset一、字符串stringredis中的字符串结构可以保存多种数据类型例如:简单的字符串、json、xml、二进制。但是其值的最大长度为512MB。1. 基本操作set1. set key value [ex] [px] [nx|xx]
ex : 秒级过期时间
px : 毫秒级过期时间
转载
2023-07-09 19:20:34
90阅读
数组数组是物理内存连续存储的数据结构,查找时通过下标计算地址:address = base_address + i * adrress_size (i为数组下标),所以时间复杂度是O(1)。二叉树二叉树每个节点只能有2个子节点,除了根节点外最多有一个父节点,普通二叉树最差情况的查找时间复杂度是O(n) 二叉查找树1 二叉查找树:(1)左子树所有节点都比父节点小,右子树所有节点都比父节点大
转载
2024-05-29 00:10:00
173阅读
二分查找 logn二叉树遍历 n快排,归并排序 nlogn...
原创
2022-11-19 10:08:55
46阅读
更新时间:2018-10-15Redis的特性速度快持久化(断电不丢数据)多种数据结构支持多种客户端语言功能丰富操作简单主从复制高可用,分布式Redis的通用命令keys:计算键key * # 遍历所有keykeys命令支持正则匹配,如keys h*表示便利店以h开头的所有key。因为redis是单线程,keys命令一般不在生产环境中使用。keys *怎么用?热备从节点scandbsize:计算k
转载
2024-03-05 08:49:29
47阅读
跳跃表1. 跳跃表的用处2. 跳跃表的具体示例跳跃表的查找跳跃表的具体实现本文重点 1. 跳跃表的用处有序集合(zset)的底层可以采用数组, 链表, 平衡树等结果来实现, 但是他们都有各自的缺点 . 数组方便查询, 但不便于插入和删除, 链表方便插入和删除, 但是不利于查找, 平衡树/红黑树效率高但是实现起来很复杂所以Redis自己实现了跳跃表来来当做有序集合(zset)的底层实现, 他的查询
转载
2024-04-08 10:57:33
26阅读
参考视频教程: 玩转算法面试Leetcode真题分门别类讲解 (http://www.notescloud.top/goods/detail/1386)当我们设计了一个算法以后,往往会从时间和空间这两个维度来评判这个算法的优劣。执行时间越短,占用内存空间越小的算法,我们认为是更优的算法。这篇文章的主题:复杂度分析就是用来分析算法时间和空间复杂
转载
2021-10-19 22:12:36
955阅读
点赞
HashMap的时间复杂度HashMap在jdk1.8之后引入了红黑树的概念,表示若桶中链表元素超过8时,会自动转化成红黑树;若桶中元素小于等于6时,树结构还原成链表形式。原因:红黑树的平均查找长度是log(n),长度为8,查找长度为log(8)=3,链表的平均查找长度为n/2,当长度为8时,平均查找长度为8/2=4,这才有转换成树的必要;链表长度如果是小于等于6,6/2=3,虽然速度也很快的,但
转载
2023-07-06 11:21:33
291阅读
当我们设计了一个算法以后,往往会从时间和空间这两个维度来评判这个算法的优劣。执行时间越短,占用内存空间越小的算法,我们认为是更优的算法。这篇文章的主题:复杂度分析就是用来分析算法时间和空间复杂度的。为什么需要复杂度分析你可能会有些疑惑,我把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。为什么还要做时间、空间复杂度分析呢?这种分析方法能比我实实在在跑一遍得到的数据更准确吗?首先
转载
2020-11-23 20:29:00
876阅读
2评论
一、跳跃表首选,思考,那种数据结构在插入、删除、查找等操作上性能比较优呢?我们知道,数组的优点是支持随机取值,但是如果是插入数据的话,首先需要查找到数据,考虑使用二分查找那么时间复杂度就是O(logn),找到数据以后进行插入因为数组的空间是连续的需要将数值进行移动,这个过程的时间复杂度就是O(n),所以总时间复杂度是O(n)链表的优点是插入很快速,对于插入操作时间复杂度是O(1),但是因为链表不支
转载
2023-09-25 04:29:00
95阅读
转:https://blog..net/zxm490484080/article/details/72210501 算法复杂度分为时间复杂度和空间复杂度。 其作用: 时间复杂度是指执行算法所需要的计算工作量; 而空间复杂度是指执行这个算法所需要的内存空间。 时间复杂度 计算时间复杂度的方法:
转载
2018-04-07 12:28:00
542阅读
2评论
dinic算法是网络流最大流的优化算法之一,每一步对原图进行分层,然后用DFS求增广路。时间复杂度是O(n^2*m)(n是点数,m是边数)层次图:把原图中的点按照到源的距离分“层”,只保留不同层之间的边的图。算法流程:1、根据残量网络计算层次图。2、在层次图中使用DFS进行增广直到不存在增广路。3、重复以上步骤直到无法增广。时间复杂度:因为在Dinic的执行过程中,每次重新分层,汇点所在的层次是严
转载
2024-06-24 05:16:31
103阅读
//------------------>摘自:https://blog.csdn.net/qq_41523096/article/details/82142747《一套图 搞懂“时间复杂度”》渐进时间复杂度比如算法A的相对时间是T(n)= 100n,算法B的相对时间是T(n)= 5n^2,这两个到底谁的运行时间更长一些?这就要看n的取值了。所以,这时候有了渐进时间复...
原创
2021-09-29 13:37:01
1923阅读
算法的复杂度分析主要包含两个方面:时间复杂度分析空间复杂度分析为什么要进行复杂度分
原创
2023-04-23 12:40:30
355阅读
时间复杂度:输入数据大小为N时,算法运行所需要的时间 空间复杂度:算法运行所需要的内存(暂存空间+输出空间) ...
转载
2021-09-08 10:34:00
461阅读
2评论
时间复杂度、空间复杂度算法复杂度分为时间复杂度和空间复杂度。其作用:时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。一、时间复杂度时间频度一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算
转载
2022-11-16 17:40:48
393阅读