`
hideto
  • 浏览: 2678935 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Skip List 跳表

阅读更多
跳表是个概率性的的数据结构,由William Pugh在1990年发明,列表基于平行的链接列表,效率相对二叉搜索树(对于大多数操作平均需要O(log n)时间)有显著改善

例子:
1
1-----4---6
1---3-4---6-----9
1-2-3-4-5-6-7-8-9-10


最底层为所有排好序的元素组成的链表
次底层为按概率1/p组成的排好序的链表
再次底层为1/p^2
直到顶层为首节点

可以看出层数为logpN,查找元素x时需要在每层中查找的步数为p,则总体查询代价为p*logpN
所以跳表查询的平均时间复杂度为Θ(logN),最好情况为1,最坏情况为N

跳表的ruby实现示例:
class Node
  attr_accessor :key, :next, :down
  def initialize(x)
    key = x
    next = nil
    down = nil
  end
end

class SkipList

  def search(x)
    return nil if head.nil?
    p = head
    while true
      while !p.next.nil? && p.next.key < x
        p = p.next
      end
      return p if p.down.nil?
      p = p.down
    end
  end

end

BTW:谁能帮我实现完整的insert和update方法啊?

Skip List PPT
分享到:
评论

相关推荐

    二叉搜索树 B树 Skiplist跳表 哈希表 大数据哈希表应用

    在详细讲解二叉搜索树、B树、Skiplist跳表和哈希表的过程中,我们首先需要了解数据结构的定义及其特性,然后针对不同数据结构在大数据环境下的应用进行探究。 1. 二叉搜索树(BST): 二叉搜索树是一种特殊的二叉树...

    skiplist跳表C++实现

    SkipList skipList; // 插入测试数据 for (int i = 1; i ; ++i) { skipList.insert(i); } // 查找测试 for (int i = 1; i ; ++i) { assert(skipList.search(i) != nullptr); } // 删除测试 for (int i ...

    Skip list 跳表模版

    ### Skip List (跳表)详解 #### 一、引言 在计算机科学中,数据结构的设计与选择对于算法效率有着至关重要的影响。其中,跳表(Skip List)是一种非传统但非常高效的数据结构,它结合了链表和二叉搜索树的优点,在...

    skiplist 跳表C++实现

    跳表(Skip List)是一种高效的查找数据结构,它利用了概率算法来提高查询效率,通常用于数据库和搜索引擎中。在C++中实现跳表,我们可以利用STL中的容器和算法库来简化工作,同时理解其背后的原理至关重要。 跳表...

    Go 语言中实现SkipList实现跳表.pdf

    2. **定义跳表结构体**:接着,定义一个`SkipList`结构体,它包含一个指向第一个节点的指针(Head)以及一个随机数生成器,用于确定跳表的高度。 ```go type SkipList struct { Head *Node Level int } ``` 3. *...

    跳表(skiplist)Java实现

    简单得实现跳表相关功能 SkipList&lt;Integer&gt; skipList = new SkipList(maxLevel); 提供insert和seach接口 删除接口可做类似操作

    SkipList_Java.rar_SkipList in Java_skiplist_skiplist java

    2. SkipList.java: 这是跳表的主要实现文件,可能包含了一个名为`SkipList`的类,实现了跳表的数据结构和相关的操作方法,如插入、删除、查找等。这个类可能包括了节点结构的设计,以及如何随机决定每个节点的层级等...

    skip list(跳表)1

    跳表是一种高效的数据结构,常用于数据库和搜索引擎的索引构建。它的主要优点在于查找、插入和删除操作的时间复杂度通常为O(logN),与平衡二叉搜索树类似,但实现更为简单,空间效率较高。 跳表的核心思想是通过...

    基于图形处理器的高性能跳表(Skiplist)数据结构.pdf

    1. 跳表(Skiplist)数据结构的基础知识: - 跳表是一种可以替代平衡二叉树的数据结构。 - 它的核心思想是利用随机化算法在概率上保证数据访问时间的平衡性。 - 跳表的数据不需要以树形结构存储,因此在进行并行...

    skiplist.h

    这个是跳表的头文件

    为啥 redis 使用跳表(skiplist)而不是使用 red-black?1

    在Redis中,跳表(Skip List)被用于实现有序集合(ZSET,Sorted Set),而不是使用红黑树。以下是对这一决策背后原因的详细分析: 1. **内存效率**: - 跳表在内存占用方面相对较低,可以通过调整节点层级的概率...

    skip list的java版实现

    通常,跳表的实现会包含一个 `SkipList` 类,其中包含 `Node` 类的定义,以及插入、删除、查找等方法的实现。源码分析可以帮助理解算法的具体实现和优化技巧。 7. **工具类与测试**: 在 `src` 文件夹中,可能包含...

    VB.net编写的SkipList 跳跃链表

    跳表(Skiplist)是一种高效的数据结构,它在实现上类似于多层索引的跳跃式访问,由Marc P. Lehmann在1990年提出。VB.NET是一种基于.NET Framework的面向对象的编程语言,它提供了丰富的库和工具,使得开发者能够...

    skipList.zip

    综上所述,"skipList.zip"项目提供了一个跳表的C++实现,通过对跳表的原理、数据结构、查找算法、插入和删除操作的理解,开发者可以学习到如何在实际编程中应用这一高效的数据结构。同时,通过对源代码的分析,还...

    Skiplist-CPP-master.zip

    在这个名为"Skiplist-CPP-master"的项目中,开发者使用C++语言实现了一个基于跳表的轻量级键值存储系统。下面我们将深入探讨跳表的基本原理、C++实现的关键点以及在键值存储中的应用。 1. 跳表基本原理: - 跳表是...

    SkipList.pptx

    跳跃表(Skiplist)技术分享 跳跃表(Skiplist)是一种高效的数据结构,能够快速查询一个有序连续元素的数据链表。它的平均查找和插入时间复杂度都是 O(log n) ,优于普通队列的 O(n) 。下面是跳跃表的详细知识点:...

    Skiplist-CPP:A tiny KV storage based on skiplist written in C++ language| 使用C++开发,基于跳表实现的轻量级键值数据库:fire::fire: :rocket:

    main.cpp 包含skiplist.h使用跳表进行数据操作 skiplist.h 跳表核心实现 README.md 中文介绍 README-en.md 英文介绍 bin 生成可执行文件目录 makefile 编译脚本 store 数据落盘的文件存放在这个文件夹 stress_test_...

    test_高级数据结构lab6skiplist_

    跳表是redis的一个核心组件,也同时被广泛地运用到了各种缓存地实现当中,它的主要优点,就是可以跟红黑树、AVL等平衡树一样,做到比较稳定地插入、查询与删除。理论插入查询删除的算法时间复杂度为O(logN)。

    week2_3_朱道冰_cpp_SkipLIst1

    class SkipList { private: Comparator const compare_; std::unique_ptr&lt;Node&gt; head_; Random rnd_; std::map, int&gt; heights; public: // 构造函数和析构函数 SkipList(); ~SkipList(); // 插入元素 ...

Global site tag (gtag.js) - Google Analytics