順序查詢非常簡單,只是個開胃菜,今天主要練習的是雜湊查詢
先上順序查詢**:
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...