Différences
Ci-dessous, les différences entre deux révisions de la page.
| tc_info:td4-2018-2019 [2019/07/31 11:02] – créée edauce | tc_info:td4-2018-2019 [2019/07/31 11:03] (Version actuelle) – edauce | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | {{tc_info: | ||
| + | |||
| + | ===== Partie A ===== | ||
| + | <note tip> | ||
| + | Soit $U$ un “univers” dont les éléments sont appelés //clés//. Soit $E$ un ensemble de clés. On suppose que l'on a une fonction $h:U\to \{0,\ldots m-1\}$, dite //fonction de hachage// (ou // | ||
| + | </ | ||
| + | |||
| + | ==== Exercice 0 ==== | ||
| + | |||
| + | Donnez des algorithmes pour rechercher, insérer & supprimer un élément dans une table de hachage. Donnez leur complexité dans le cas le meilleur, le pire & en moyenne. | ||
| + | |||
| + | Déduisez-en la valeur optimale (en ordre de grandeur) de $m$ en fonction de $n$, ainsi qu'une contrainte sur la fonction de hachage. | ||
| + | |||
| + | ==== Exercice 1 ==== | ||
| + | On considère les deux fonctions de hachage suivantes : | ||
| + | * La //méthode de la division// : $h(x) = x \: \mathrm{mod}\: | ||
| + | * La //méthode de la multiplication// | ||
| + | * $A$ est un nombre de $[0\ldots1]$ | ||
| + | * $E$ est la partie entière & //Frac// la partie fractionnaire $(\mathrm{Frac}(x)=x-E(x))$ | ||
| + | Donnez, pour ces deux méthodes, des bonnes valeurs pour les paramètres $m$ & $A$. | ||
| + | |||
| + | ==== Exercice 2 ==== | ||
| + | Dans le //hachage cryptographique//, | ||
| + | |||
| + | ==== Exercice 3 ==== | ||
| + | Il arrive souvent que l'on ne sache pas à l' | ||
| + | Donnez une ``politique" | ||
| + | |||
| + | ==== Exercice 4 ==== | ||
| + | Soit $S$ un ensemble de nombres à trier, on répartit $S$ en une table de hachage tel que la fonction de hachage soit croissante ($x\leq y \Longrightarrow h(x) \leq h(y)$). On trie chaque paquet, puis on concatène. On appelle ce tri le //tri par paquets//. | ||
| + | * Donnez une fonction de hachage simple & croissante. | ||
| + | * Quelle est la complexité de cet algorithme dans le cas le meilleur, le pire & en moyenne. | ||
| + | |||
| + | ===== Partie B ===== | ||
| + | <note tip> | ||
| + | Un // | ||
| + | |||
| + | < | ||
| + | D = {clé_1: | ||
| + | </ | ||
| + | |||
| + | Les clés pouvant être de (presque) n' | ||
| + | * On accède à '' | ||
| + | * L' | ||
| + | * si '' | ||
| + | * si '' | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Exercice 5 ==== | ||
| + | Donnez une implémentation efficace des dictionnaires. Quelle est alors la complexité (dans le cas le meilleur, le pire & en moyenne) des fonctions de base (recherche, ajout d'un élément, | ||
| + | |||
| + | ==== Exercice 6 ==== | ||
| + | Utilisez un dictionnaire pour écrire un algorithme | ||
| + | |||
| + | ==== Exercice 7 ==== | ||
| + | Utilisez un dictionnaire pour écrire un algorithme | ||
| + | |||
| + | ===== Partie | ||
| + | ==== Exercice 8 ==== | ||
| + | ** Table d' | ||
| + | |||
| + | On considère un tableau $T$ de taille $n$ dans lequel | ||
| + | * $p<n$ cases sont occupées. Chaque donnée $d$ est indexée par l' | ||
| + | * On suppose de plus | ||
| + | * que la //table d' | ||
| + | < | ||
| + | B=0010010100100...01 | ||
| + | </ | ||
| + | * qu'il existe une fonction $f(B,i)$ donnant le i$^{eme}$ bit de $B$ ($f(B,i)$ vaut 1 si la i$^{eme}$ case de $T$ est occupée, & 0 si elle est libre). | ||
| + | |||
| + | Écrire un algorithme permettant d' | ||
| + | |||
| + | Peut-on faire mieux en appliquant un pré-traitement à $B$~? | ||
| + | |||
| + | |||
| + | |||
| + | [[tc_info: | ||