【问题标题】:How a skip list is initialized?跳过列表是如何初始化的?
【发布时间】:2012-04-30 09:42:25
【问题描述】:

我正在阅读William Pugh's paper about skip-list。在初始化部分他说:

一个元素 NIL 被赋予一个大于任何合法键的键。所有级别 所有跳过列表都以 NIL 终止。一个新的列表被初始化 使得列表的级别等于 1 并且所有前向指针 列表头指向 NIL。

我不确定他说了什么。我认为他的意思是:让 n 成为每个节点的最大允许级别。所以构建一个 n 级别的标题。在第一步中,标题的每一级都指向 NIL。对吗?

现在,当第一个节点到达时,它将以概率的方式插入,因此它的级别应该是不可预测的。为什么他谈到 1 级列表?我错过了什么?

最好的问候

MC

【问题讨论】:

    标签: data-structures


    【解决方案1】:

    我无法阅读该文档,但如果我没记错的话,NIL 是列表中的一个元素,并且它的level 大于任何有效的level 以确保它是总是最后一项。假设您的级别从1 变为3,那么您将NIL 的级别设置为4。当您创建一个新的跳过列表时,它应该如下所示:

    H = Header
    N = Nil
       _    _
    4 |H|->|N| 
    3 |H|->|N| <- max for normal elements
    2 |H|->|N|
    1 |H|->|N|
    

    添加一些元素后,您将拥有:

       _                   _
    4 |H|---------------->|N| 
    3 |H|-------|B|------>|N|
    2 |H|-------|B|->|C|->|N|
    1 |H|->|A|->|B|->|C|->|N|
    

    【讨论】:

      【解决方案2】:

      空列表(新列表)应该有级别 1。在插入过程中根据需要添加更多级别(稍后会出现)。

      【讨论】:

      • 那么第一个插入的节点总是单层节点?
      • 是的!还可以查看来自 Wikipedia 的这张图片:en.wikipedia.org/wiki/File:Skip_list.svg 请注意,最右边的元素 (10) 只有一层,因为不需要“向前跳跃”。
      猜你喜欢
      • 2016-12-20
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多