Python 实现跳跃表查找(Skip List Search)算法

Python 实现跳跃表查找(Skip List Search)算法

以下是用 Python 实现跳跃表查找(Skip List Search)算法的示例代码:

import random

class Node:
    def __init__(self, value, level):
        self.value = value
        self.forward = [None] * (level + 1)

class SkipList:
    def __init__(self, max_level):
        self.max_level = max_level
        self.head = Node(-1, max_level)
        self.level = 0

    def random_level(self):
        level = 0
        while random.random() < 0.5 and level < self.max_level:
            level += 1
        return level

    def insert(self, value):
        update = [None] * (self.max_level + 1)
        current = self.head

        for i in range(self.level, -1, -1):
            while current.forward[i] and current.forward[i].value < value:
                current = current.forward[i]
            update[i] = current

        lvl = self.random_level()
        if lvl > self.level:
            for i in range(self.level + 1, lvl + 1):
                update[i] = self.head
            self.level = lvl

        new_node = Node(value, lvl)
        for i in range(lvl + 1):
            new_node.forward[i] = update[i].forward[i]
            update[i].forward[i] = new_node

    def search(self, value):
        current = self.head
        for i in range(self.level, -1, -1):
            while current.forward[i] and current.forward[i].value < value:
                current = current.forward[i]
        current = current.forward[0]
        return current and current.value == value

# Test the SkipList implementation
skip_list = SkipList(16)
skip_list.insert(1)
skip_list.insert(3)
skip_list.insert(7)
skip_list.insert(8)
skip_list.insert(9)

print("Search for 3:", skip_list.search(3)) # Output: True
print("Search for 6:", skip_list.search(6)) # Output: False

这个 Python 实现包含了以下主要部分:

  1. Node 类:表示跳跃表中的节点,包含一个值和一个指针数组。
  2. SkipList 类:包含插入和查找方法,以及一个用于生成随机层级的 random_level 方法。
  3. random_level 方法:生成一个随机的层级,用于新节点。
  4. insert 方法:在跳跃表中插入一个值,更新相应的指针。
  5. search 方法:在跳跃表中查找一个值,返回一个布尔值表示是否找到。

这段代码展示了如何用 Python 实现跳跃表的插入和查找功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亚丁号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值