DVOP PIT
Bc. Matěj Cajthaml — SSPŠ
©
Proč neukládáme data do pole a vyhledáváme obyčejně?
$P = \{0, 1, \ldots, 9\}$
$h(v) = v \mod 10$
$U = \mathbb{N}$
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
12 92 32 |
4 1024 |
17 | 999 |
prakticky náhodné
$h(v) = (a \cdot v) \mod m$
Proč musí být $a$ a $m$ nesoudělná?
Zjistěte, co tato funkce dělá.
Po posloupnosti existují speciální hešovací funkce, např. skalární součin či polyonomiální součet.
$P = \{0, 1, \ldots, 9\}$
$h(v) = v \mod 10$
$U = \mathbb{N}$
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
12 92 32 |
4 1024 |
17 | 999 |
Implementujme řetízkování v hešovací tabulce.
find(key):
for i = 0 to m - 1:
j = h(key, i)
if T[j] == key:
return j
else if T[j] == undefined:
return undefined
return undefined
Komplikované, protože může dojít k tomu, že smazáním prvku se ztratí cesta k jinému prvku v pořadí. Místo smazání se proto nastaví na speciální hodnotu $\dagger$.
delete(key):
for i = 0 to m - 1:
j = h(key, i)
if T[j] == key:
T[j] = †
return
else if T[j] == undefined:
return
insert(key):
if find(key) != undefined:
return
for i = 0 to m - 1:
j = h(key, i)
if T[j] == undefined or T[j] = †
T[j] = key
throw table overflow
Co udělat, když se tabulka
zaplní $\dagger$?
Zjistěte, jak funguje dvojité hašování.