From 31e592be6ea5110f3ff89d9b4cb897cfee9be0c2 Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@pm.me> Date: Tue, 11 Jan 2022 16:54:16 +0100 Subject: [PATCH] formatting --- slides/cours_13.md | 74 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 65 insertions(+), 9 deletions(-) diff --git a/slides/cours_13.md b/slides/cours_13.md index d0a6720..45b0982 100644 --- a/slides/cours_13.md +++ b/slides/cours_13.md @@ -372,6 +372,10 @@ Dans ce qui suit la taille de la table est `table_size`. # La méthode séquentielle +\footnotesize + +## Comment ça marche? + * Quand l'index est déjà occupé on regarde sur la position suivante, jusqu'à en trouver une libre. @@ -392,6 +396,10 @@ table[index].state = OCCUPIED; # Méthode linéaire +\footnotesize + +## Comment ça marche? + * Comme la méthode séquentielle mais on "saute" de `k`. ```C @@ -413,6 +421,10 @@ Cette méthode répartit mieux les regroupements au travers de la table. # Méthode du double hashing +\footnotesize + +## Comment ça marche? + * Comme la méthode linéaire, mais `k = h2(key)` (variable). ```C @@ -434,16 +446,20 @@ h2(key) = (table_size - 2) - key % (table_size -2) # Méthode pseudo-aléatoire +\footnotesize + +## Comment ça marche? + * Comme la méthode linéaire mais on génère `k` pseudo-aléatoirement. -```C -index = h(key); -while (table[index].state == OCCUPIED && table[index].key != key) { - index = (index + random_number) % table_size; // attention à pas dépasser -} -table[index].key = key; -table[index].state = OCCUPIED; -``` + ```C + index = h(key); + while (table[index].state == OCCUPIED && table[index].key != key) { + index = (index + random_number) % table_size; + } + table[index].key = key; + table[index].state = OCCUPIED; + ``` ## Comment s'assurer qu'on va bien retrouver la bonne clé? @@ -461,6 +477,46 @@ table[index].state = OCCUPIED; # Méthode quadratique +* La fonction des indices de collision est de degré 2. +* Soit $J_0=h(key)$, les indices de collision se construisent comme: + + ```C + J_i = J_0 + i^2 % table_size, i > 0, + J_0 = 100, J_1 = 101, J_2 = 104, J_3 = 109, ... + ``` + +## Problème possible? + +. . . + +* Calculer le carré peut-être "lent". +* En fait on peut ruser un peu. + +# Méthode quadratique + +\footnotesize + +```C +J_i = J_0 + i^2 % table_size, i > 0, +J_0 = 100 + \ + d_0 = 1 + / \ +J_1 = 101 Delta = 2 + \ / + d_1 = 3 + / \ +J_2 = 104 Delta = 2 + \ / + d_2 = 5 + / \ +J_3 = 109 Delta = 2 + \ / + d_3 = 7 + / +J_4 = 116 +J_{i+1} = J_i + d_i, +d_{i+1} = d_i + Delta, d_0 = 1, i > 0. +``` -# Méthode de chaînage -- GitLab