00:01
各位同学大家好,刚才呢,咱们演示了red里边的常用的类型哈希类型,那下面呢,给各位演示最后一个类型,就是里边这个有序集合z set,那z set到底是怎么样的,首先我们先做个介绍,然后咱们通过几个命令给各位详细演示一下,最后再介绍一下这个decide它的底层数据结构到底是怎么样的,那我们来看一下,这里写到第一个ready里边的有序集合z set跟普通集合set非常相似,它是一个没有重复元素这么一个字符串集合,另外它是有序的。注意,为什么是有序的呢?因为它里边啊,就是在有序集合中的每个成员都关联了一个叫评分的这么一个地方,叫扣,然后这个评分被用来从最低到最高方式进行排序结构中的成员,而机构中成员是唯一的,但是评分是可以逐步的,就是通过这个进行排序评分说的通俗点就是里边一个值,然后通过它可以进行相关的排序,这个叫做a set有序集合。
01:14
然后这site到底该怎么做,咱们下面给各位来详细演示一下里面这个操作,那我们来看一下啊,这里边有这些命令,咱们通过命令给各位详细演示一下,然后在演示过程中,各位应该能感受到这个z set到底是怎么样一个特点,那我们来操作一下啊,首先我先把它清空一下。我们来个可首先演示第一个命令,我们叫ZDD,就是向这个z set有序集合里边添加那种,那咱们看怎么做CAD,我们加上一个K,这个K呢,比如我起个名字,我叫这个top n,就是它的一个排名top n。
02:00
然后在套文里边我们怎么做呢?首先大家看啊,咱们需要加上一个评分,再加上你的值,比如现在我们就计算一下,就是当前我们这些编程圆一个排名,比如第一个我们写一个,那就来一个200,比如我们写一个就是Java,然后第二个我们写一个300,我们写一个这个就是C加加,比如说再来一个这个400,我们写一个买circle,然后再加上最后一个,咱来一个500,我给他写上一个,比如叫PP,这样的话,咱通过Z的添加了一个K,叫top n,然后里边有这些值,包括有它的评分,这是里边的第一个命令,叫Z的,就是这里写到将一个或者多个元素及其它的这个S扣评分加入到这个有序集合里面去。这个我们做到了,然后做到之后呢,咱可以从里边啊,把这值给它取出来,这个里边有个命令叫Z值,那我们来取一下。
03:03
我们叫top n,这边取它的最大值,最小值,咱们写一个零到负一,就是取出的所有内容,然后大家看啊,这里边把内容我是不是都取出来了,然后取来之后呢,其实这个内容呢,有一个排名,它的排名就是从小到大,你看啊,200是最小,500是最大,所以它里边是自动做了一个排序。然后在过程中呢,你注意它显示的只是你这个值,比如现在我想把它的评分也做显示,那怎么做呢?咱加上这么一个东西叫with Co。然后咱们再看一下,就是现在包含你的值是还有它的评分,这个就都显出来了,所以这是我们的这个命令叫利润值,通过它能返回有序机构中这个内容,然后你加一个叫with scores,能把它的评分一起进行返回,这个我们就做到了,然后做到之后来看下一个这个操作。
04:03
这个操作什么意思呢?就是现在我们在里边的用这个命令叫ZBI扣,可以把里边这个值就是从它的一个范围中取到,比如现在我想取这个排名评分到200~300之间的值,那咱们用这个命令可以做到,比如现在我们来试一下啊,用这个命令我们看一下Z润BY扣,我们叫top n,比如现在我取一下。300~500的值,是不是取出这么三个C,加加买circle,还有PP,如果说你想显示分数,咱们写一个叫with scores。现在既有值是不是有分数,300、400、500,这个都查出来了,所以这时候我们用的这么一个命令,然后除了它之外,大家看啊,就是我们现在这里边它自动帮我们做了一个排序,排序是从小到大排序,比如现在我让排序从大到小,就是500,第一个400,第二个再买第三个从大到小排序,那怎么做呢?在里边就是有这么一个命令,注意啊,Z rev是不是有转换意思,然后润值bicycle加上K加你的最大值,最小值,这样的话可以把它从大到小进行排序,那咱们来试一下这个操作啊。
05:27
比如现在我把它命令分过来。Z rev range by,扣后面加上咱这个top n,比如现在要查询这个500到这个200的值,然后大家看目前做了一个排序啊,包括咱把它那个分数也显出来,就是位子cos。大家看第一个500,最后一个是不是200,把它就按照从大到小的顺序做了一个排列,所以这是我们演示里边基本命令,然后演示之后呢,最后还有这么四个命令,都是针对它的一些其他操作,那我们看一下啊,第一个命令叫Z。
06:07
就是in可瑞,它可以把我们这个SCO这个值给它做一个增加的操作,然后里边咱们来测试一下这个命令。然后写下啊,Z因可瑞BY加上你的K,加上你要增加的值,比如说咱要增加这个50,然后加上你这个成员,比如咱们把这个Java增加50,这样的话就完成了,然后Java最开始是200,现在就变成了250,这是我们做的这个命令,然后除了它之外还有这个命令z rem,它可以删除指定值的这个元素,那我们来删一下啊。Zre加上你的key套N,比如现在我想删Java,那就直接输入Java,你想删PP,直接输入PP,把它就给删掉,我这就不删了啊,因为刚才好不容易加进去了,咱就不给它删掉了,用这个直接删掉。
07:04
然后除了这个之外呢,还有一个命令叫z count,做一个统计功能,那咱来测试一下啊,Z count加上你的K,比如说我统计200~300这个范围中有几个值,是不是有两个,就是里边的Java和这个C加加200到分外范围,这叫Z抗,然后里边还有最后一个叫这个z rank j z rank什么意思呢?就是返回机构中的它的排名,比如你排在第一位,排在第二位还是排在第三位,那咱来试一下啊,Z rank。我们加上top n,比如咱们查这个Java的排名。是排在第一位啊,它是以零开始,比如咱们再试一个啊,呃,包括咱先这么想,我们先把这个都查出来,这转指。Top n0到负一里边有这个顺序,包括咱把它那个就是。
08:02
分数也想出来,位置scope。然后现在我们这里边做个排名,Z RA top n,咱们找到这个买circle,大家看是不是二啊,就是排名第三位,这是第一个,这是第二个,这是第三个,因为它是从零开始的。所以这样的话呢,我就把这个这set里边的常用命令给大家就演出来了,通过演示大家也感受到了,里边是通过这个扣分数,然后进行相关的排名操作的,比如说是按照从小到大还是从大到小,包括里边的其操作,所以各位把这给他知道。然后在课件中的这里边有这么一道题目,其实就是刚才我做这个,比如说咱用data的实验一个文章访问量的排行榜,我刚才做的这个是不是就排行榜比你改成Java文章C加加的,买circle的,PP的,用它我们做一个实现。所以这些呢,就是关于z set有序集合的相关命令给各位,就最终也是完成了,大家把这些给他要掌握。
09:10
然后演示完成之后呢,我们再来看最后一部分啊,给大家介绍一下这个z site有序集合到底层的数据结构是怎么样的,那我们来看一下啊,我这里写到c site呢,这个结构很特别,它就是有多个部分组成,第一方面呢,你可以理解为它等价于咱们这个map机口,就是string double double,就咱的那个评分,然后它的每个元素Y轴中复制一个权重叫磁扣,它就利又类似于咱说那个tree site,所以它底层怎么样一个结构呢?给大家说一下啊,比如说给各位画一下。首先你可以理解为它的第一部分呢,是一个叫哈希,哈希就是咱说那个里边有两部分,一个叫field。然后一个叫value,这应该知道,就是它那个映射关系,然后在field的value中中,Field是咱的value值,然后那个Y6是我们的死扣,它通过这两部分建立起它们一个对应关系,那我写一下就是比如说我这是Java,然后它的磁扣就是这个100。
10:16
比如说我这是P10P,然后它的Y表,比如是200,所以它用这种方式进存储,它里边的疑问结构就是咱们之前说那个哈希结构,这咱刚才提过了,各位应该知道,然后除了这个结构之外呢,在这个z set中还有另外部分结构,它叫做跳跃表。跳跃表的目的就是为了快速找到你的某个元素,它在于给定元素Y表进行排序,根据此物范围能够快速获取到元素的列表,这个叫跳跃表。那跳跃表是怎么样的,给大家介绍一下啊,我这里写的很详细,咱们来看一遍。有序集合呢,在生活中很常见,比如说学生排名等等,而他的底层可以用到数组、数链表等等各种结构,而现在咱说的跳跃表就是它的结构更加简单而效率更高。那它是怎么样的呢?咱往下看啊,首先大家看第一个,这是一种普通的有序列表,而这列表中就是从一下一个节点是一下一个21依次类推,最终节点是空,比如说现在我在这个有序列表中,就在这个地方。
11:29
我想找到其中这个某一个元素,大家看它是怎么找的,给各位来分析一下啊,我把图画过来。大家看这是一个有序的这么一个链表形式,比如说咱们找一个,比如现在啊,我想找里面这个51的这个元素,那大家说怎么找。咱没有什么特别的方式,是不是只能一个去找,先找一找11 21 31 41 51,最终通过123456找六次,是不是才能找到咱最终这个51这个元素,所以这是有序的方特点,它找的话其实里边需要经过六次才能找到,但是跳跃表找的话,它的效率比例要高很多,然后各位看一下我里边的这张图,这张图呢,就是跳跃表的这么一种形式,然后在这张图中,咱们也是找一下51这个元素,看这个该怎么去找。
12:25
这就是跳一表的结构,给大家写一下。跳跃表。然后怎么找,咱们看一下啊,首先它里面分了三层,就是第零层,第一层,第二层,咱们找的话,从最上边,也就是第二层开始找,那比如说咱们现在想找这个51,大家看啊,那我找的话,首先找到是不是一这个节点,51比它是不是大呀,如果比它大的话,那就找它的下一个节点,如果比它小的话,找它的前一个节点,那现在51比它大,那找到21。
13:02
51:21是不是还大呀,那再找它的下一个节点,但是21的下一个节点是不是空了,所以他现在在第二层就找不到了,他就怎么做,放到了我们的第一层,那就找21的下一个节点是不是就是41,然后41找到之后发现51:41还要大,那往后找,找到61,但是51比它是不是要小,所以就是往下走,找到我们的第零层。在第零层中,51比它大,最终找到51的这么一个元素,所以这是跳跃表一个过程,我再说一遍啊,比如说现在我找51,它比一大,那找它的下一个节点比21还大,再找下一个,但是它的下一个等于空,所以第二层就找不到,最终来到第一层,第一层中21的下一根41比它大,找下一个,它比61要小,找它的前一个,所以他就找到第零层,因为在我们第二层,第一层经没有了,第零层中最终找到51的这么元素,所以这是跳跃表找的过程,最终呢,它经过四次查找就能找到我们这个元素,所以比它的效率肯定是更高。所以这是我们提到的关于这个z set的底层结构,给各位再读一遍啊,它有两部分结构,第一个结构,用咱们通俗说这个哈希经存储,它的field是咱们这个值。
14:30
Y6是它的磁扣,然后另外还有一部分用到跳跃表,用跳表的目的就能够快速找到你的元素,比如咱们用普通的链表找到效率比较低,你用跳跃表找可以快速找到你的元素,所以这是关于z set一个底层结构给各位做个说明啊,也就是到这里为止呢,咱们就把read里边常见的五大数据类型给各位都演示完成了,包括字符串,String列表、list集合、set,哈希,还有有序集合,各位把这几种结构,它的基本命令,包括它的底层结构是怎么样的,都要给他掌握,所以这些我们就演示完成了。
我来说两句