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

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

python實現跳表SkipList的示例代碼

瀏覽:32日期: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久久,三上悠亚国产精品一区二区三区
九九综合九九| 欧美一区三区| 日韩高清一区| 午夜电影一区| 日本亚洲最大的色成网站www| 亚洲日本三级| 日本不卡视频一二三区| 日韩一区二区三区在线看| 日韩在线网址| 久久国产免费看| 久久精品理论片| 国产suv精品一区| 日韩免费小视频| 在线日韩电影| 免费国产自线拍一欧美视频| 91成人网在线观看| 三级欧美在线一区| 日韩av黄色在线| 老色鬼精品视频在线观看播放| 国产一区二区亚洲| 久久国产免费| 美国三级日本三级久久99| 日韩二区三区四区| 免费精品一区| 久久久久午夜电影| 免费欧美在线视频| 国产精品17p| 亚洲高清激情| 日韩中文字幕视频网| 精品成av人一区二区三区 | 青青久久av| 99国产成+人+综合+亚洲欧美| 日本成人在线不卡视频| 久久久国产精品网站| 91精品一区二区三区综合| 美女黄网久久| 国产福利亚洲| 欧美 日韩 国产一区二区在线视频| 亚洲资源网站| 高潮久久久久久久久久久久久久| 五月婷婷亚洲| 国产美女亚洲精品7777| 日韩国产在线| 日韩中文av| 麻豆久久久久久| 五月天久久网站| 国产精品久久久一区二区| 99久久久久国产精品| 日本91福利区| 国产日韩一区| 日本va欧美va瓶| 综合国产视频| 国产v日韩v欧美v| 国产亚洲高清视频| 国产极品久久久久久久久波多结野| 成人片免费看| 日韩精品视频在线看| 桃色av一区二区| 日本亚洲三级在线| 精品91福利视频| 亚洲视频二区| 色偷偷偷在线视频播放| 免费人成黄页网站在线一区二区| 国内精品伊人| 亚洲精品九九| 久久精品国产大片免费观看| 国产精品视频一区视频二区| 日韩一区二区久久| 国产96在线亚洲| 日本亚洲视频| 激情欧美国产欧美| 成人国产精品| 欧美亚洲福利| 麻豆精品91| 日韩a一区二区| 久久国产日韩欧美精品| 红桃视频国产一区| 精品国产成人| 欧美一级一区| 久久亚洲国产精品一区二区| 高清av不卡| 久久超级碰碰| 日韩精品导航| 91精品福利| 日韩免费在线| 久久精品系列| 欧美影院视频| 亚洲精品中文字幕99999| 亚洲精品91| 精品久久91| 国产日产高清欧美一区二区三区| 美女尤物久久精品| 亚洲黄色影院| 91精品国产自产在线观看永久∴| 久久女人天堂| 欧美黄色一区| 国产精品最新| 欧美精品三级在线| 日本欧美一区二区| 综合亚洲视频| 日韩专区在线视频| 免费欧美日韩| 亚洲一区日本| 亚洲激情欧美| 99成人在线视频| 精精国产xxxx视频在线野外| 高潮久久久久久久久久久久久久| 国产激情精品一区二区三区| 欧美日韩夜夜| 日韩高清在线不卡| 综合一区av| 亚洲啊v在线免费视频| 亚洲丝袜啪啪| 日本在线不卡视频一二三区| 亚洲狼人精品一区二区三区| 免费人成黄页网站在线一区二区| 亚洲欧洲一区二区天堂久久| 欧美日韩四区| aa亚洲婷婷| 久久精品高清| 黄色不卡一区| 亚洲激精日韩激精欧美精品| 亚洲在线国产日韩欧美| 视频一区视频二区中文字幕| 亚洲伊人精品酒店| 蜜桃视频一区二区| 国产欧美日韩免费观看| 亚洲精品第一| 亚洲在线久久| 综合激情网站| 奇米色欧美一区二区三区| 日韩美女精品| 国产亚洲人成a在线v网站| 国产精品黄色| 麻豆精品视频在线| 精品视频久久| 日韩av在线中文字幕| 日韩亚洲一区在线| 欧美+亚洲+精品+三区| 先锋影音久久久| 综合激情一区| 国产亚洲人成a在线v网站 | 国产精品普通话对白| 水野朝阳av一区二区三区| 一区二区不卡| 久久国产精品免费一区二区三区| 久久99国产精品视频| 亚洲精品88| 99久久99视频只有精品| 亚洲专区欧美专区| 日韩精品一区二区三区中文| 国产福利一区二区精品秒拍| 成人亚洲一区| 午夜欧美精品久久久久久久| 亚洲三级在线| 国产精品欧美日韩一区| 日韩av在线播放网址| 欧美特黄一级大片| 亚洲美女91| 国产一区二区三区91| 免费不卡中文字幕在线| 亚洲精品成人一区| 麻豆精品蜜桃视频网站| a日韩av网址| 久久夜色精品| 国产精品宾馆| 久久久久国产精品一区二区| 丝袜脚交一区二区| 久久伊人国产| 欧美日韩国产一区二区三区不卡| 亚洲精品亚洲人成在线观看| 你懂的网址国产 欧美| 国产精品亚洲一区二区三区在线观看| 欧美专区18| 久久久久伊人| 亚洲欧美日韩国产一区二区| 国产精品毛片久久久| 激情综合激情| 日韩欧美中文字幕电影| 日韩在线观看一区| 日韩中文字幕在线一区| 日韩欧美中文| 91午夜精品| 国产中文一区| 国产精品夜夜夜| 欧美在线影院| 久久久91麻豆精品国产一区| 国产精品婷婷| 国产一区国产二区国产三区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产精品一线| 免费观看久久av| 青草国产精品久久久久久| 99久久亚洲精品蜜臀| 国产精品一卡| 亚洲一区二区三区久久久| 日韩免费在线| 国产精品一页| 蜜桃视频一区二区三区在线观看| 日韩成人精品一区|