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→{0,…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)=xmodm. | ||
+ | * La //méthode de la multiplication// | ||
+ | * A est un nombre de [0…1] | ||
+ | * E est la partie entière & //Frac// la partie fractionnaire (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≤y⟹h(x)≤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 ieme bit de B (f(B,i) vaut 1 si la ieme 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: |