LeetCode 分塊查詢(Python版)

2021-10-08 02:43:41 字數 1904 閱讀 9164

分塊查詢部需要進行整理排序,首先按照一定的取值範圍將數列分成數塊,塊內的元素是可以無序的,但塊必須是有序的,其中塊的有序表示為處於後面位置中的塊的最小元素都要比前面位置塊中的最大元素大。

# 第一次運算,key = [250,0]

# 從ilist裡面獲取資料,乙個個判斷是否在0-250之間

# 若滿足條件則將資料i儲存到sub字典當中

sub =

[i for i in ilist if i < key[0]

]# 將0-250區間的個數賦值給indexilist中key[1]

key[1]

=len

(sub)

sort += sub

# 刪除已經分塊的資料,為方便未分塊資料進行分塊

ilist =

list

(set

(ilist)

-set

(sort)

) ilist = sort

print()

return indexlist

defblocksearch

(ilist,key)

: right =

0 left =

0for num in indexlist:

# 如果未找到分塊的資料,會不斷往後累加字典分塊個數

left += right

right += num[1]

# 乙個區間乙個區間判斷,屬於該區間則跳出該for迴圈,繼續往下執行

if key< num[0]

:break

for i in

range

(left,right)

:if key == ilist[i]

:return i

return-1

if __name__ ==

"__main__"

:######建立20個1000以內的列表########

ilist = randomlist(20)

print

(ilist)

#分塊的字典列表,第二列資料為這個區域內的個數

indexlist =[[

250,0]

,[500,0]

,[750,0]

,[1000,0

]]divideblock(

)print

(ilist)

keys=

[random.choice(ilist)

,random.randrange(

min(ilist)

,max

(ilist))]

for key in keys:

num = blocksearch(ilist,key)

if(num>=0)

:print

("%d number is %d\n"

%(key,num)

)else

:print

("%d the key number is not find\n"

%key)

ElasticSearch查詢方法(python)

es.search index my index doc type test type 或者 body es.search index my index doc type test type body body term body 查詢name python 的所有資料 es.search inde...

查詢之分塊查詢

分塊查詢又稱索引順序查詢,吸取順序查詢和折半查詢的優點 基本思想 將查詢表分為若干個子塊。塊內的元素可以無序,但塊件是有序的,即第乙個塊中的最大關鍵字小於第二塊中的所有關鍵字,依次類推。再建乙個索引表,索引表中的元素含有各塊的最大關鍵字和各塊中第乙個元素的位址,索引表按關鍵字有序排列。示意圖 查詢分...

查詢演算法 分塊查詢

分塊查詢也稱為索引順序表查詢。分塊查詢就是將順序表 主表 分成若干個子表,然後為每個子表建立乙個索引表,利用索引在其中乙個子表中查詢。兩部分 索引表 儲存順序表的每個子表的開始索引和最大值。順序表 主表所有資料存放的位置。子表內可以是無序的,但是子表之前面的子表中每個元素必須小於後面子表中的每個元素...