日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python實現跳表SkipList的示例代碼

瀏覽:30日期:2022-07-28 09:34:31
跳表

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

python實現跳表SkipList的示例代碼

可以發現,對于一個節點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 randomimport mkl_randomimport timeclass 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#用于生成添加節點時的隨機levelreturn class Node():def __init__(self,key,value,level): ’’’ :param level:每個node對應的nexts層數不同 ’’’ self.key=key self.value=value self.nexts=[None]*leveldef __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.__firstfor level in range(self.__level - 1,-1,-1): #在該層查找,key大于節點的key向前查找 while node.nexts[level] and node.nexts[level].key<key:node=node.nexts[level] if node.nexts[level] and node.nexts[level].key==key:#相等則找到,否則向下尋找return node.nexts[level].valuereturn None def put(self,key,value):’’’return:原來的value,原來不存在key則為空’’’self.keyCheck(key)prev=[None]*self.__levelnode=self.__firstfor i in range(self.__level - 1, -1, -1): while node.nexts[i] and node.nexts[i].key<key:node=node.nexts[i] if node.nexts[i] and node.nexts[i].key==key:oldValue=node.nexts[i].valuenode.nexts[i].value=valuereturn oldValue prev[i]=node#保存當前level小于key的nodenewLevel=self.randomLevel()newNode=SkipList.Node(key,value,newLevel)for i in range(newLevel): if i<self.__level:newNode.nexts[i]=prev[i].nexts[i]prev[i].nexts[i]=newNode else:self.__first.nexts[i]=newNodeself.__size+=1self.__level=max(self.__level, newLevel)return None def remove(self,key):’’’:return: 節點對應的value值,不存在則返回None’’’self.keyCheck(key)prev=[None]*self.__levelnode=self.__firstflag=False#該節點是否被查找到for i in range(self.__level - 1, -1, -1): while node.nexts[i] and node.nexts[i].key<key:node=node.nexts[i] if node.nexts[i].key==key:flag=True prev[i]=nodeif not flag: return NoneremovedNode=node.nexts[0]#需要被刪除的節點for i in range(len(removedNode.nexts)):#該nexts一定小于等于prev的長度 prev[i].next[i]=removedNode.nexts[i]self.__size-=1newLevel=self.__levelwhile newLevel>0 and not self.__first.nexts[newLevel - 1]: newLevel-=1self.__level=newLevelreturn 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=1while mkl_random.rand()<self.__p and level<self.MAX_LEVEL: level+=1return 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 * 3else: 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 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品一线| 日韩精品三区四区| 日本aⅴ免费视频一区二区三区| 亚洲神马久久| 国产欧洲在线| 亚洲综合在线电影| 精品女同一区二区三区在线观看| 亚洲欧美网站在线观看| 亚洲三级观看| 99国产精品视频免费观看一公开| 伊人久久亚洲热| 久久精品国内一区二区三区水蜜桃| 久久99蜜桃| 精品99在线| 麻豆精品久久| 日韩欧美一区二区三区在线视频 | 国产一区国产二区国产三区| 91偷拍一区二区三区精品| 日韩av一区二区三区| 国产精品久久| 麻豆视频一区| 日韩精品亚洲专区| 久久一区精品| 精品国产午夜肉伦伦影院| 日韩成人亚洲| 精品亚洲美女网站| 欧美在线综合| 中文字幕一区二区av| 亚洲精品女人| 久久超碰99| 精品黄色一级片| 久久久精品区| 久久成人高清| 国语精品一区| 国产日韩电影| 亚洲一级黄色| 妖精视频成人观看www| 蜜臀va亚洲va欧美va天堂| 亚洲精品日本| 国产精品久久久一区二区| 久久精品国产亚洲aⅴ| 特黄毛片在线观看| 亚洲影视一区二区三区| 欧美午夜网站| 91欧美在线| 蜜臀av一区二区三区| 日韩极品在线观看| 欧美www视频在线观看| 桃色av一区二区| 综合激情在线| 国产精品久久亚洲不卡| 国产精品流白浆在线观看| 久久国产亚洲| 日本综合视频| 麻豆成人综合网| 亚洲精品一区二区妖精| 欧美亚洲网站| 日韩中文欧美| 日韩一区二区三区四区五区| 欧美激情亚洲| 先锋影音国产一区| 国产日韩精品视频一区二区三区| 精品国产免费人成网站| 久久伦理在线| 久久av在线| 色综合五月天| 亚洲欧美成人综合| 久久精品色播| 亚洲激情国产| 97精品国产一区二区三区 | 日韩欧美国产精品综合嫩v| 在线亚洲欧美| 久久久久久色| 日韩一区电影| 日本午夜精品| 99精品美女| 日本在线不卡视频| 在线视频观看日韩| 国产精品第一| 亚洲精品日本| 欧美一级鲁丝片| 国产丝袜一区| 国产二区精品| av在线资源| 日产欧产美韩系列久久99| 人人草在线视频| 欧美激情亚洲| 一区二区三区国产盗摄| 久久精品欧美一区| 国产乱子精品一区二区在线观看| 偷拍欧美精品| 国产精品地址| 性色一区二区| 精精国产xxxx视频在线播放| 日韩国产在线一| 日韩视频在线一区二区三区 | 精品一区二区三区免费看 | 欧美一区激情| 亚洲日本免费电影| 日韩av福利| 福利视频一区| 日韩精品久久理论片| 久久精品国产68国产精品亚洲| 精品日产乱码久久久久久仙踪林| 免费在线观看日韩欧美| 欧美大黑bbbbbbbbb在线| 国产一区二区三区四区大秀| 国产高清视频一区二区| 亚洲一区二区三区久久久| 久久香蕉国产| 亚洲精品国产嫩草在线观看| 国产精品jk白丝蜜臀av小说| 欧美亚洲人成在线| 久热综合在线亚洲精品| 在线视频精品| 亚洲v在线看| 欧美日韩尤物久久| 欧美精品97| 18国产精品| 欧美日韩亚洲一区在线观看| 国产一区导航| 国产婷婷精品| 久久高清免费| 激情综合自拍| 亚洲国产欧美日本视频| 欧美一级鲁丝片| 精品国产午夜肉伦伦影院| 亚洲精品乱码久久久久久蜜桃麻豆 | av中文字幕在线观看第一页| 麻豆精品久久久| 国产精品探花在线观看| 国产毛片精品| 日韩在线a电影| 日韩中文字幕一区二区高清99| 性欧美长视频| 日韩成人一级| 97久久精品| 美女久久99| 捆绑调教美女网站视频一区| 国产一区二区三区亚洲| 免费视频一区二区三区在线观看 | 亚洲一二三区视频| 伊人久久亚洲影院| 亚洲精品99| 亚洲性视频h| 欧美日韩夜夜| 亚洲性色av| 一区免费在线| 欧美高清一区| 视频一区二区三区在线| 亚洲男女自偷自拍| 亚洲少妇自拍| 亚洲综合电影一区二区三区| 99成人超碰| 视频一区二区三区在线| 综合亚洲自拍| 日本伊人久久| 日韩va亚洲va欧美va久久| 欧美一级一区| 欧美91在线| 成人一二三区| 久久国产亚洲精品| 综合欧美亚洲| 日韩欧美精品一区二区综合视频| 久久精品午夜| 欧美freesex黑人又粗又大| 国产偷自视频区视频一区二区| 夜夜精品视频| 国产精品白丝av嫩草影院| 久久精品国产亚洲aⅴ| 国产高清视频一区二区| 999久久久国产精品| 欧美资源在线| 国产精品扒开腿做爽爽爽软件| 精品一区av| 婷婷亚洲五月| 亚洲精品黄色| 91亚洲国产高清| 91九色精品国产一区二区| 欧美日韩夜夜| 国产一区二区三区不卡视频网站 | 98精品视频| 亚洲深夜影院| 亚洲a成人v| 高清av一区| 欧美a级片一区| 久久国产日韩欧美精品| 精品一区91| 蜜桃91丨九色丨蝌蚪91桃色| 欧美日韩一区二区国产| 精品一区二区三区在线观看视频| 亚州av乱码久久精品蜜桃| 久久国产高清| 精品久久亚洲| 在线成人直播| 国产一区福利| 亚洲国产影院| 国产精品第十页| 一区二区三区视频免费观看| 国产精品对白久久久久粗|