skip-lists相关内容
在一些博客和 lucene 网站中,我知道 lucene 在倒排索引中使用数据结构“跳过列表".但我对此有些疑惑. 1:一般情况下,跳过列表可能会在内存中使用,但倒排索引存储在磁盘中.那么 lucene 在索引搜索时是如何使用它的呢?只是在磁盘上扫描或加载到内存中? 2:skip list的插入操作符经常使用random(0,1)来决定是否插入到下一级,但是在luncene的介绍中,似
..
ZADD 的 redis 文档 声明操作是 O(log N). 但是,当插入的元素位于排序顺序的开头或结尾时,有人知道 ZADD 是否比 O(log N) 更好? 例如对于某些实现,这可能是 O(1). 具体来说,redis 教程 指出: 排序集是通过双端口数据结构实现的,其中包含一个跳过列表和一个哈希表,所以每次我们添加一个元素Redis 执行 O(log(N)) 操作.
..
我最近遇到了称为跳过列表.它似乎与二叉搜索树具有非常相似的行为. 你为什么要在二叉搜索树上使用跳过列表? 解决方案 跳过列表更适合并发访问/修改.Herb Sutter 撰写了一篇关于并发环境中的数据结构的文章.它有更深入的信息. 二叉搜索树最常用的实现是红黑树.当树被修改时,并发问题就会出现,它通常需要重新平衡.重新平衡操作会影响树的大部分区域,这将需要对许多树节点进行互斥锁
..
在redis.h中,skipnode定义如下: typedef struct zskiplistNode {robj *obj;双倍积分;struct zskiplistNode *向后;结构 zskiplistLevel {struct zskiplistNode *forward;无符号整数跨度;} 等级[];} zskiplistNode; var span 是什么意思?这个 var 存
..
Redis文档如下: ZSET是使用两个数据结构来保存相同元素的有序集合为了使O(log(N))INSERT和REMOVE操作成一个排序数据结构. 将元素添加到哈希表,该哈希表将Redis对象映射到分数.同时将元素添加到跳过列表将分数映射到Redis对象(因此,对象按分数排序此“视图"). 我不太了解.有人可以给我详细的解释吗? 解决方案 Antirez说,请参见http
..
我听说过一种新的平衡BST数据结构,称为 zip树.什么是邮编树?如何运作? 解决方案 从总体上讲,一棵zip树是 随机平衡二叉搜索树, 这是将跳过列表编码为BST的一种方式,并且 使用一对称为 zipping 和 unzipping 的操作,而不是树的旋转. 第一个要点-zip树是随机的,平衡的BST-使人感觉到zip树在较高水平上可以实现.这是一种平衡的二叉搜索树,与挖
..
长话短说,我应该编写一个插入,删除,搜索和打印跳过列表中数字的代码,其中第一个节点为负无穷大,而最后一个节点为正无穷大(-inf>(。 。)> inf)。我从插入函数调用了搜索函数,以找到一个插入任何新节点的位置(仅在插入第三个节点之后),并且在主函数之外而不是在主函数内初始化或引用了我的节点(尽管我正在辩论)我是否应该选择后者)。但是,我的功能之一可能会陷入循环。 静态节点搜索(dou
..
请考虑一维的大量浮点间隔,例如 。 [1.0,2.5],1.0 | --------------- | 2.5 [1.5,3.6],1.5 | --------------------- | 3.6 .... 。 希望找到包含给定点的所有间隔。例如,给定点= 1.2,算法应返回第一个间隔,如果给定点= 2.0,则应返回上例中的前两个间隔。 我正在
..
ZADD的redis 文档表示操作为O(log N ). 但是,当插入的元素位于排序顺序的开头或结尾时,有人知道ZADD是否比O(log N )好吗? 例如对于某些实现,可能是O(1). 具体来说,redis 教程指出: 排序集是通过包含以下内容的双端口数据结构实现的: 跳过列表和哈希表,因此每次我们添加一个元素 Redis执行O(log( N ))操作. 似乎可以修
..
在一些博客和lucene网站上,我知道lucene使用倒排索引中的数据结构“跳过列表".但是我对此有些疑惑. 1:通常,跳过列表可能在内存中使用,但倒排索引存储在磁盘中.那么,在索引上进行搜索时,lucene如何使用它?只是在磁盘上扫描它或将其加载到内存中? 2:跳过列表的插入运算符通常使用random(0,1)来决定是否插入下一个级别,但是在伦琴演奏中,似乎每个术语的间隔都是固定的,
..
我最近遇到了称为 跳过列表 .它的行为似乎与二叉搜索树非常相似. 您为什么要在二进制搜索树上使用跳过列表? 解决方案 跳过列表更适合并发访问/修改. Herb Sutter撰写了关于并发环境中数据结构的文章.它具有更深入的信息. 二进制搜索树最常用的实现是红黑树 .修改树时,经常会出现并发问题,因此通常需要重新平衡.重新平衡操作可能会影响树的大部分,这将需要在许多树节点上使用互
..
我找到 Java Collection Framework中的ConcurrentSkipListSet ,它使用跳过列表进行备份。但Java中是否有跳过列表?一套在我的用例中不起作用。我需要一个支持重复的可索引列表。 解决方案 因为你已经提到了一个可以索引的List(我假设你想要的)快速检索)并且需要允许重复,我建议你去找一个带有LinkedList或ArrayList的自定义Set。
..
插入n个元素后跳过列表使用的预期空间是什么? 我预计在最坏的情况下,空间消耗可能会无限增长。 维基百科说“Space O 如何以这种方式证明? 解决方案 根据本论文,其中维基百科更可靠,维基百科错误。概率跳过列表是 Theta(nlogn)最坏情况的空间复杂度。 尽管事实上,平均来说,PSL表现相当不错,在最坏的情况下,它的Theta(n lg n)空间和Theta
..
我正在尝试使用最少额外的内存开销来实现与BST一样好的跳过列表,此刻即使不考虑任何内存限制,我的SkipList实现的性能远远不是一个非常幼稚的平衡BST实现 - 也就是说,手工制作的BTS :) - 作为参考,我使用的是William Pugh的原始论文 PUG89 和我在Sedgewick -13.5-中的C中的算法中找到的实现。我的代码是一个递归的实现,这里是插入和查找操作的线索:
..
我想知道有人是否曾经使用跳过列表。它看起来具有与平衡二叉树大致相同的优点,但是更容易实现。如果你有,你是否编写自己的,或者使用预先写的图书馆(如果是的话,它的名字是什么)? 解决方案几年前,我实现了自己的概率算法类。我不知道任何库实现,但是已经很久了。实现起来很简单我记得他们对大数据集有一些非常好的属性,并避免了一些重新平衡的问题。我认为实现也比二次尝试更简单。这里有一个很好的讨论和一些示例
..
我最近遇到了被称为跳过列表的数据结构。他们似乎与二叉搜索树有非常相似的行为...我的问题是 - 你为什么要在二叉搜索树上使用跳过列表? 解决方案 跳过列表更适合并发访问/修改。 Herb Sutter在并发环境中撰写了有关数据结构的文章。它有更多的深入信息。 二进制搜索树中最常用的实现是一个红黑树。当树被修改时,并发问题就会出现,它往往需要重新平衡。重新平衡操作可以影响树的大部分,这
..
有人知道任何无锁的滑雪者运动和/或研究论文支持排名操作(即找到第k个元素)?或者,任何人都知道为什么这样的操作永远不能工作? 奖励积分: 不假定垃圾收集的一个实现。这是我的经验相当一些研究论文忽略内存管理。 支持: 有关如何在常规skiplist中执行排名操作的说明:William Pugh的“A Skip List Cookbook” 免费滑雪者描述:Keir Fr
..
我试图实现一个跳过列表,执行与BST使用最小额外的内存开销一样好,目前,即使不考虑任何内存限制,我的跳过列表实现的性能是远离甚至非常朴素的平衡BST实现 - 也就是说,手工制作的BTS :) - 作为参考,我使用的原始论文从William Pugh PUG89 和执行我在Sedgewick -13.5-的C中的算法。我的代码是一个递归实现,这里是插入和查找操作的线索: sl_node
..
我最近一直念叨跳表。 我有执行防静电的数据集相当复杂的SQL查询的Web应用程序。 我想实现一个缓存系统,使我产生SQL查询的MD5哈希值,然后返回缓存的数据集查询,如果它存在于集合中。 哪些算法会更好,字典或SkipList?为什么呢? 的 http://msdn.microsoft.com/en-us/library/ms379573%28VS.80%29.aspx#d
..
我需要实现一个无锁跳跃列表。我试图寻找论文。不幸的是我所发现的是无锁单链表(许多种)。但是如何实现无锁跳跃列表? 解决方案 无锁的跳跃列表在书中有相关的讨论,在做题链接到文学和实现(不一定是无锁)的跳转列表与二叉树和跳转列表 - 使用过他们”? / A>。
..