python實現順序查詢和雜湊查詢

2022-05-21 10:34:33 字數 3543 閱讀 6552

順序查詢非常簡單,只是個開胃菜,今天主要練習的是雜湊查詢

先上順序查詢**:

def

sequence_search(array, num):

for i in

range(len(array)):

if array[i] ==num:

return

i

return

false

array_0 = [23, 43, 12, 54, 65, 48]

print(sequence_search(array_0, 12))

>>> 2

在來看hash查詢

演算法思想

雜湊的思路很簡單,如果所有的鍵都是整數,那麼就可以使用乙個簡單的無序陣列來實現:將鍵作為索引,值即為其對應的值,這樣就可以快速訪問任意鍵的值。這是對於簡單的鍵的情況,我們將其擴充套件到可以處理更加複雜的型別的鍵。

演算法流程

單純論查詢複雜度:對於無衝突的hash表而言,查詢複雜度為o(1)(注意,在查詢之前我們需要構建相應的hash表)。

class

hashsearch:

def__init__

(self, num):

ifisinstance(num, int):

self.num =abs(num)

self.empty =self.num

self._list = [none] *self.num

else

:

raise typeerror('

num must be a int number')

def__hash

(self, key):

return key %self.num

defput(self, key):

assert self.empty > 0, '

this array is full

'index = self.__hash

(key)

while

self._list[index]:

index = self.__hash(index+1)

self._list[index] =key

self.empty -= 1

deffind(self, key):

index = self.__hash

(key)

temp =index

while self._list[index] !=key:

index = self.__hash(index+1)

if index ==temp:

return

false

return index

class

hashtable:

def__init__

(self):

#雜湊表的初始大小已經被選擇為 11。儘管這是任意的,但是重要的是,

#大小是質數,使得衝突解決演算法可以盡可能高效。

self.size = 11self.slots = [none] *self.size

self.data = [none] *self.size

#hash 函式實現簡單的餘數方法

defhash(self, key, size):

return key %size

#衝突解決技術是 加1 rehash 函式的線性探測

defrehash(self, old_hash, size):

return (old_hash+1) %size

#假定最終將有乙個空槽,除非 key 已經存在於 self.slots 中。 它計算原始

#雜湊值,如果該槽不為空,則迭代 rehash 函式,直到出現空槽。如果非空槽已經包含 key,

#則舊資料值將替換為新資料值。

defput(self, key, data):

hash_value =self.hash(key, len(self.slots))

if self.slots[hash_value] is

none:

self.slots[hash_value] =key

self.data[hash_value] =data

else

:

if self.slots[hash_value] ==key:

self.data[hash_value] =data

else

: next_slot =self.rehash(hash_value, len(self.slots))

while self.slots[next_slot] is

not none and

\ self.slots[next_slot] !=key:

next_slot =self.rehash(next_slot, len(self.slots))

if self.slots[next_slot] is

none:

self.slots[next_slot] =key

self.data[next_slot] =data

else

: self.data[next_slot] =data

#從計算初始雜湊值開始。如果值不在初始槽中,則 rehash 用

#於定位下乙個可能的位置。

defget(self, key):

start_slot =self.hash(key, len(self.slots))

data =none

stop =false

found =false

pos =start_slot

while self.slots[pos] is

not none and

not found and

notstop:

if self.slots[pos] ==key:

found =true

data =self.data[pos]

else

: pos =self.rehash(pos, len(self.slots))

if pos ==start_slot:

stop =true

return

data

#我們過載 __getitem__ 和 __setitem__ 方法以允許使

#用 訪問。 這意味著一旦建立了hashtable,索引操作符將可用。

def__getitem__

(self, item):

return

self.get(item)

def__setitem__

(self, key, value):

self.put(key, value)

python實現順序查詢和雜湊查詢

順序查詢非常簡單,只是個開胃菜,今天主要練習的是雜湊查詢 先上順序查詢 def sequence search array,num for i in range len array if array i num return i return false array 0 23 43,12 54,65...

python實現順序查詢和折半查詢

1 順序查詢 特點 不需要內容有序,乙個乙個查詢 缺點 查詢效率低,不適合大資料 假設資料的總個數為n,則計算複雜度為n 2 下面的程式由三個函式組成,第乙個函式是裝飾器,作用是計算函式的 執行時間 第二個函式的作用是資料的輸入,為方便直接給列表裝載i 第三個函式的作用是實現順序查詢 coding ...

python實現簡單的雜湊查詢

雜湊簡單滴說就是把字串str 轉換成 一組數字,該組數字是唯一的 哎喲,太難說了,lol開了,詳細見 下面給出 實現 這裡我測試的字串是以前三位字母,最後一位數字為例,例如 bcd3 nhj4 gbd0 lis 0 for i in range 26 26 26 10 用於儲存得到的雜湊值 prin...