|NO.Z.00043|——————————|BigDataEnd|——|Hadoop&ElasticSearch.V43|——|ELK.v43|原理剖析|数据结构.V1|

一、SkipList应用
### --- 概述

~~~     假设某个索引字段中有sex,address字段,检索条件为:sex='female' and address='北京',
~~~     给定查询过滤条件 sex='female'的过程就是先从 term index 
~~~     找到 femal 在 term dictionary 的大概位置,
~~~     再从 term dictionary 里精确地找到 female 这个 term,
~~~     然后得到一个 posting list 或者一个指向 posting list位置的指针。
~~~     查询 address='北京' 的过程类似的。
~~~     得到一个 posting list 或者一个指向 posting list 位置的指针
~~~     需要计算出 sex='female' and address='北京' 就是把两个 posting list 做一个“与”的合并。
~~~     ES中使用 skip list 数据结构。同时遍历 sex和 address 的 posting list,互相 skip!!
二、有序集合计算交集
### --- 有序集合计算交集

~~~     # 有序集合
list1:{1,2,3,4,20,21,22,23,50,60,70}
list2:{50,70}
### --- 拉链法

~~~     两个指针指向首元素,比较元素的大小:
~~~     如果相同,放入结果集,随意移动一个指针
~~~     否则,移动值较小的一个指针,直到队尾
~~~     # 这种方法的优势是:
~~~     集合中的元素最多被比较一次,时间复杂度为O(n)
~~~     多个有序集合可以同时进行,

~~~     # 跳表SkipList
~~~     有序链表集合求交集,跳表是最常用的数据结构,
~~~     它可以将有序集合求交集的复杂度由O(n)降至O(log(n))如果使用拉链法,
~~~     会发现每个元素都要被比对但是其中有很多其实是无效比对,时间复杂度为O(n),
~~~     所谓跳表可以把时间复杂度优化至O(logn),就是因为使用跳表可以跳过很多无效比对!!

三、跳表实现(扩展)
### --- 搜索过程

~~~     从顶层链表的首元素开始,
~~~     从左往右搜索,直至找到一个大于或等于目标的元素,或者到达当前层链表的尾部
~~~     如果该元素等于目标元素,则表明该元素已被找到
~~~     如果该元素大于目标元素或已到达链表的尾部,
~~~     则退回到当前层的前一个元素,然后转入下一层进行搜索
四、添加元素:随机决定新添加元素的层数(抛硬币)
五、删除元素:注意修改跳表的有效层数

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(23)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示