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

2021-10-09 21:33:44 字數 4008 閱讀 7707

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

先上順序查詢**:

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):if

isinstance

(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 -=

1def

find

(self, key)

: index = self.__hash(key)

temp = indexwhile self._list[index]

!= key:

index = self.__hash(index+1)

if index == temp:

return

false

return index

'''

'''class

hashtable

:def

__init__

(self)

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

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

self.size =

11 self.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]

isnone

: 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]

isnot

none

and \

self.slots[next_slot]

!= key:

next_slot = self.rehash(next_slot,

len(self.slots)

)if self.slots[next_slot]

isnone

: 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]

isnot

none

andnot found and

not stop:

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...