婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python實現跳表SkipList的示例代碼

python實現跳表SkipList的示例代碼

熱門標簽:無錫智能外呼系統好用嗎 電梯新時達系統外呼顯示e 旅游廁所地圖標注怎么弄 成都呼叫中心外呼系統哪家強 南昌地圖標注 西青語音電銷機器人哪家好 宿州電話機器人哪家好 地圖標注與注銷 百應電話機器人總部

跳表

跳表,又叫做跳躍表、跳躍列表,在有序鏈表的基礎上增加了“跳躍”的功能,由William Pugh于1990年發布,設計的初衷是為了取代平衡樹(比如紅黑樹)。
Redis、LevelDB 都是著名的 Key-Value 數據庫,而Redis中 的 SortedSet、LevelDB 中的 MemTable 都用到了跳表。
對比平衡樹,跳表的實現和維護會更加簡單,跳表的搜索、刪除、添加的平均時間復雜度是 O(logn)。
跳表的結構如圖所示:

可以發現,對于一個節點Node,其含有多個next指針,不同索引的next分別代表不同層次的下一個節點,下次是節點類Node的python定義:

class Node():
     def __init__(self,key,value,level):
         '''
         :param level:每個node對應的nexts層數不同
         '''
         self.key=key
         self.value=value
         self.nexts=[None]*level#節點類型next指針,初始值為空

     def __str__(self):
         #return "[key:"+str(self.key)+", value:"+str(self.value)+" len:"+str(len(self.nexts))+"]"
         return "["+str(self.key)+","+str(self.value)+","+str(len(self.nexts))+"]"

關于添加、刪除、查找見一下完整代碼:

'''
跳表 Skip List ,其初衷是為了替代紅黑樹
'''
import random

import mkl_random
import time

class SkipList():
    def __init__(self):
        #頭節點不存儲任何數據
        self.MAX_LEVEL = 32  # 最大level層數
        self.__first=SkipList.Node(None, None, self.MAX_LEVEL)#頭節點
        self.__level=0#實際的level層數
        self.__size=0#Jiedian個數
        self.__p=0.25#用于生成添加節點時的隨機level
        return

    class Node():
        def __init__(self,key,value,level):
            '''
            :param level:每個node對應的nexts層數不同
            '''
            self.key=key
            self.value=value
            self.nexts=[None]*level

        def __str__(self):
            #return "[key:"+str(self.key)+", value:"+str(self.value)+" len:"+str(len(self.nexts))+"]"
            return "["+str(self.key)+","+str(self.value)+","+str(len(self.nexts))+"]"

    def get(self,key):
        '''
        :param key:
        :return: key對應的value
        '''
        self.keyCheck(key)
        node=self.__first
        for level in range(self.__level - 1,-1,-1):
            #在該層查找,key大于節點的key向前查找
            while node.nexts[level] and node.nexts[level].keykey:
                node=node.nexts[level]
            if node.nexts[level] and node.nexts[level].key==key:#相等則找到,否則向下尋找
                return node.nexts[level].value
        return None

    def put(self,key,value):
        '''
        return:原來的value,原來不存在key則為空
        '''
        self.keyCheck(key)
        prev=[None]*self.__level
        node=self.__first
        for i in range(self.__level - 1, -1, -1):
            while node.nexts[i] and node.nexts[i].keykey:
                node=node.nexts[i]
            if node.nexts[i] and node.nexts[i].key==key:
                oldValue=node.nexts[i].value
                node.nexts[i].value=value
                return oldValue
            prev[i]=node#保存當前level小于key的node

        newLevel=self.randomLevel()
        newNode=SkipList.Node(key,value,newLevel)
        for i in range(newLevel):
            if iself.__level:
                newNode.nexts[i]=prev[i].nexts[i]
                prev[i].nexts[i]=newNode
            else:
                self.__first.nexts[i]=newNode
        self.__size+=1
        self.__level=max(self.__level, newLevel)
        return None

    def remove(self,key):
        '''
        :return: 節點對應的value值,不存在則返回None
        '''
        self.keyCheck(key)
        prev=[None]*self.__level
        node=self.__first
        flag=False#該節點是否被查找到
        for i in range(self.__level - 1, -1, -1):
            while node.nexts[i] and node.nexts[i].keykey:
                node=node.nexts[i]
            if node.nexts[i].key==key:
                flag=True
            prev[i]=node
        if not flag:
            return None
        removedNode=node.nexts[0]#需要被刪除的節點
        for i in range(len(removedNode.nexts)):#該nexts一定小于等于prev的長度
            prev[i].next[i]=removedNode.nexts[i]
        self.__size-=1
        newLevel=self.__level
        while newLevel>0 and not self.__first.nexts[newLevel - 1]:
            newLevel-=1
        self.__level=newLevel
        return removedNode.value

    def keyCheck(self, key):
        '''
        限制傳入key不能為空
        '''
        if key!=0 and not key:
            raise AttributeError("key can not be None")

    def size(self):
        return self.__size

    def isEmpty(self):
        return self.__size == 0

    def randomLevel(self):#生成一個隨機的層數
        level=1
        while mkl_random.rand()self.__p and levelself.MAX_LEVEL:
            level+=1
        return level

    def __str__(self):
        result=""
        for i in range(self.__level - 1, -1, -1):
            result+=str(i)
            node = self.__first
            while node.nexts[i]:
                result+=str(node.nexts[i])
                node=node.nexts[i]
            result+='\n'
        print("level:"+str(self.__level))
        return result

    def showFirst(self):
        for item in self.__first.nexts:
            print(item,end=' ')
        print()

def timeCalculate(container, size:int):
    begin=time.time()
    for i in range(size):
        if isinstance(container,dict):
            container[i]= i * 3
        else:
            container.put(i, i * 3)
    error_count = 0
    for i in range(size):
        if container.get(i) != i * 3:
            #print("wrong " + str(i) + ":" + str(skipList.get(i)))
            error_count+=1
    end=time.time()
    print(type(container))
    print(f'error rate:{float(error_count) / size:0.5f}')
    print(f'time cost:{float(end-begin)*1000:0.3f} ms')


if __name__=='__main__':
    timeCalculate({},1000000)
    timeCalculate(SkipList(),10000)

到此這篇關于python實現跳表SkipList的文章就介紹到這了,更多相關python 跳表SkipList內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

標簽:渭南 濰坊 贛州 辛集 西安 許昌 雅安 七臺河

巨人網絡通訊聲明:本文標題《python實現跳表SkipList的示例代碼》,本文關鍵詞  python,實現,跳表,SkipList,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python實現跳表SkipList的示例代碼》相關的同類信息!
  • 本頁收集關于python實現跳表SkipList的示例代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91美女在线视频| 国产成人久久精品77777最新版本| 亚洲地区一二三色| 国v精品久久久网| 国产精品乡下勾搭老头1| 欧美一区二区三区不卡| 亚洲香肠在线观看| 欧美熟乱第一页| 亚洲永久免费av| 欧美一区二区三区小说| 亚洲精品国久久99热| 色综合久久综合网97色综合 | 亚洲色图19p| 色噜噜久久综合| 亚洲国产精品一区二区尤物区| 欧美亚洲高清一区| 性做久久久久久免费观看| 欧美一区二区三区四区在线观看| 精品在线播放午夜| 欧美国产精品一区| 欧美日韩视频不卡| 男人操女人的视频在线观看欧美| 91麻豆精品91久久久久久清纯| 久久av中文字幕片| 国产精品成人免费| 欧美日韩亚洲另类| 国产精品综合一区二区三区| √…a在线天堂一区| 欧美电影在哪看比较好| 粉嫩av亚洲一区二区图片| 一区二区视频免费在线观看| 精品日韩一区二区| 91麻豆swag| 国产一区二区三区观看| 亚洲一二三区在线观看| 久久婷婷久久一区二区三区| 不卡视频在线看| 免费成人你懂的| 国产精品久久二区二区| 日韩欧美一级片| 91网上在线视频| 久久97超碰国产精品超碰| |精品福利一区二区三区| 久久亚区不卡日本| 国产成人免费高清| 蜜臀va亚洲va欧美va天堂| 亚洲欧美自拍偷拍色图| 精品国精品自拍自在线| 欧美视频一区二区三区| 成人不卡免费av| 久久精品国产亚洲高清剧情介绍 | 精品久久久久久久人人人人传媒| 欧美自拍丝袜亚洲| 国产剧情一区二区| 美女诱惑一区二区| 亚洲午夜av在线| 国产精品萝li| 久久久综合精品| 日韩欧美亚洲另类制服综合在线 | 欧美一区二区三区四区高清| 国产精品自产自拍| 亚洲第一av色| 亚洲黄色小视频| 日韩美女视频19| 国产精品日日摸夜夜摸av| 国产日韩成人精品| av一区二区三区在线| 国产毛片精品视频| 麻豆精品一区二区三区| 性感美女极品91精品| 性做久久久久久| 亚洲成人tv网| 五月天激情小说综合| 亚洲国产精品综合小说图片区| 亚洲国产综合在线| 亚洲色图19p| 亚洲激情六月丁香| 亚洲一区二区综合| 亚洲一区二区三区四区五区中文| 亚洲一区在线视频| 亚洲成人激情综合网| 日韩av一区二区在线影视| 日本成人在线不卡视频| 久久国产精品99久久久久久老狼 | 亚洲欧美在线视频| 欧美三片在线视频观看| 欧美日韩欧美一区二区| 88在线观看91蜜桃国自产| 日韩一区二区三区免费看| 日韩视频永久免费| 欧美精品一区男女天堂| 中文字幕精品一区二区三区精品| 国产精品视频麻豆| 一区二区三区日韩| 日本网站在线观看一区二区三区| 国产在线播放一区| 亚洲欧美偷拍另类a∨色屁股| 亚洲在线成人精品| 久久99在线观看| 99久久精品免费看国产| 在线成人小视频| 亚洲国产精品黑人久久久| 亚洲欧美色图小说| 老汉av免费一区二区三区| 成人看片黄a免费看在线| 欧美视频中文字幕| 国产欧美综合在线| 天使萌一区二区三区免费观看| 国产毛片精品视频| 欧美日韩国产综合一区二区 | 亚洲国产精品精华液ab| 国产精品福利一区| 性感美女久久精品| 国产成人午夜电影网| 欧美色图12p| 久久久国际精品| 精品一区二区三区香蕉蜜桃| 一本色道久久综合精品竹菊| 91欧美激情一区二区三区成人| 欧美日韩一级视频| 国产婷婷色一区二区三区四区| 欧美午夜精品电影| 中文字幕高清一区| 麻豆一区二区三区| 欧美亚洲另类激情小说| 国产精品美女久久久久久久| 亚洲欧洲av另类| 大白屁股一区二区视频| 3751色影院一区二区三区| 亚洲欧美日韩成人高清在线一区| 亚洲精品一线二线三线无人区| 欧美国产一区二区在线观看| 日韩精品自拍偷拍| 国产综合成人久久大片91| 欧美中文字幕一区| 亚洲欧洲精品成人久久奇米网| 国产欧美日本一区视频| 久久精品噜噜噜成人88aⅴ| 欧美片网站yy| 亚洲国产一区二区视频| 91丨porny丨国产| 国产精品区一区二区三区| 成人三级在线视频| 国产精品久久久久一区| 亚洲午夜成aⅴ人片| 欧美亚洲一区三区| 亚洲精品日产精品乱码不卡| 色综合咪咪久久| 亚洲国产日韩在线一区模特| 在线国产电影不卡| 午夜亚洲福利老司机| 国产一区二区三区黄视频 | 欧美欧美午夜aⅴ在线观看| 亚洲激情欧美激情| 欧美日韩在线播放| 午夜久久久久久| 欧美不卡视频一区| 国产精品亚洲一区二区三区在线| 精品国产一二三区| 成人黄色在线网站| 亚洲女与黑人做爰| 欧美调教femdomvk| 久久国内精品自在自线400部| www久久久久| 91视频免费播放| 三级一区在线视频先锋 | 香港成人在线视频| 日韩精品一区二区三区视频在线观看 | 成人黄色片在线观看| |精品福利一区二区三区| 欧美日韩小视频| 国产麻豆精品95视频| 成人欧美一区二区三区小说| 欧洲生活片亚洲生活在线观看| 五月天一区二区三区| 日本一区二区三区四区在线视频| 色一情一伦一子一伦一区| 日韩成人免费在线| 国产精品美女一区二区三区| 欧美一区二区三区色| 成人免费视频国产在线观看| 亚洲午夜激情网站| 中文字幕免费观看一区| 日韩一级大片在线| 色综合天天综合给合国产| 蜜桃视频在线观看一区二区| 亚洲人123区| www一区二区| 这里只有精品视频在线观看| 视频一区二区欧美| 一区二区三区视频在线观看| 国产拍揄自揄精品视频麻豆| 制服.丝袜.亚洲.中文.综合| 99久久伊人精品| 国产成人在线观看| 蜜桃视频一区二区三区在线观看 | 亚洲精品写真福利| 国产日韩精品一区二区三区| 日韩一卡二卡三卡| 8v天堂国产在线一区二区|