diff --git a/slides/cours_14.md b/slides/cours_14.md index b77b9c3b1870417c2d55274f141d689cad485b7c..5b1b4335f45a22c102dca185c8a6440232cf9753 100644 --- a/slides/cours_14.md +++ b/slides/cours_14.md @@ -572,184 +572,3 @@ Avantages: * On suppose que la table est initialement vide, de taille $n = 13$. * Utiliser la fonction $h1(k)= k \mod 13$ où k est la $k$-ème lettre de l'alphabet et un traitement séquentiel des collisions. -# Exercice 2 - -* Reprendre l'exercice 1 et utiliser la technique de double hachage pour traiter - les collisions avec - -\begin{align*} -h_1(k)&=k\mod 13,\\ -h_2(k)&=1+(k\mod 11). -\end{align*} -* La fonction de hachage est donc $h(k)=(h(k)+h_2(k)) \% 13$ en cas de - collision. - - -# Exercice 3 - -* Stocker les numéros de téléphones internes d'une entreprise suivants dans un -tableau de 10 positions. -* Les numéros sont compris entre 100 et 299. -* Soit $N$ le numéro de téléphone, la fonction de hachage est -$$ -h(N)=N\mod 10. -$$ -* La fonction de gestion des collisions est -$$ -C_1(N,i)=(h(N)+3\cdot i)\mod 10. -$$ -* Placer 145, 167, 110, 175, 210, 215 (mettre son état à occupé). -* Supprimer 175 (rechercher 175, et mettre son état à supprimé). -* Rechercher 35. -* Les cases ni supprimées, ni occupées sont vides. -* Expliquer se qui se passe si on utilise? -$$ -C_1(N,i)=(h(N)+5\cdot i)\mod 10. -$$ - -# Préambule - -\small - -* On considère pas le cas du chaînage en cas de collisions. -* L'insertion est construite avec une forme du type - - ```C - index = h(key); - while (table[index].state == OCCUPIED - && table[index].key != key) { - index = (index + k) % table_size; // attention à pas dépasser - } - table[index].key = key; - table[index].state = OCCUPIED; - ``` -\normalsize - -* Gestion de l'état d'une case *explicite* - - ```C - typedef enum {EMPTY, OCCUPIED, DELETED} state; - ``` - -# L'insertion - -## Pseudocode? - -. . . - -```C -insert(table, key, value) { - index = hash de la clé; - index = - si "index" est déjà "occupé" - et la clé correspondante n'est pas "key" - alors gérer la collision; - - changer l'état de la case "index" à "occupé"; - changer la valeur de la case "index" à "value"; -} -``` - -# La suppression - -## Pseudocode? - -. . . - -```C -value_t remove(table, key) { - index = hash de la clé; - tant que l'état de la case n'est pas "vide" - si "index" est "occupé" et la clé est "key" - changer l'état de la case à "supprimé" - sinon - index = rehash -} -``` - -# La recherche - -## Pseudocode? - -. . . - -```C -bool search(table, key, value) { - index = hash de la clé; - tant que l'état de la case n'est pas "vide" - si "index" est "occupé" et la clé est "key" - retourner vrai - sinon - index = rehash -} -``` - -# Écrivons le code! - -* Mais avant: - * Quelles sont les structures de données dont nous avons besoin? - * Y a-t-il des fonctions auxiliaires à écrire? - * Écrire les signatures des fonctions. - -. . . - -## Structures de données - -\footnotesize - -. . . - -```C -typedef enum {empty, deleted, occupied}; -typedef ... key_t; -typedef ... value_t; -typedef struct _cell_t { - key_t key; - value_t value; - state_t state; -} cell_t; -typedef struct _hm { - cell_t *table; - int capacity; - int size; -} hm; -``` - -# Écrivons le code! - -## Fonctions auxiliaires - -. . . - -```C -static int hash(key_t key); -static int rehash(int index, key_t key); -static int find_index(hm h, key_t key); -``` - -## Signature de l'API - -. . . - -```C -void hm_init(hm *h, int capacity); -void hm_destroy(hm *h); -bool hm_set(hm *h, key_t key, value_t *value); -bool hm_get(hm h, key_t key, value_t *value); -bool hm_remove(hm *h, key_t key, value_t *value); -bool hm_search(hm h, key_t key); -void hm_print(hm h); -``` - -# Live code session! - -0. Offered to you by ProtonVPN[^1]! - -. . . - -1. Like the video. -2. Subscribe to the channel. -3. Use our one time voucher for ProtonVPN: `PAULISAWESOME`. -4. Consider donating on our patreon. - -[^1]: The fastest way to connect to BBB! \ No newline at end of file diff --git a/slides/intro.md b/slides/intro.md index 3b3f7ad81bb28cf83e352c71ad85f9df8fedcebf..d3455655e0da5f8e18f4925fef501bbb996c3d5f 100644 --- a/slides/intro.md +++ b/slides/intro.md @@ -11,13 +11,12 @@ Paul Albuquerque paul.albuquerque@hesge.ch B410 Orestis Malaspinas orestis.malaspinas@hesge.ch A401 -------------------- ------------------------------ -------------------- -* Utilisez le libre service (l'horaire sera fixé prochainement). -* On va intensivement utiliser *Element*, installez le et utilisez le! - -* Espace de discussion [Matrix](https://matrix.to/#/!aKYVlcclmPGYXQFxAK:matrix.org?via=matrix.org), installez [element.io](https://element.io). +- Utilisez le libre service (l'horaire sera fixé prochainement). +- On va intensivement utiliser *Element*, installez le et utilisez le! +- Espace de discussion Matrix: <https://rb.gy/ku5es>, installez [element.io](https://element.io). {width=20%} -* Communauté lemmy: <https://lemmy.hepiapp.ch/c/algo> +- Communauté lemmy: <https://lemmy.hepiapp.ch/c/algo> # Cyberlearn @@ -34,7 +33,8 @@ Tout le contenu de ce qu'on raconte se trouve sur cyberlearn: # Organisation du module -* Cinq cours, 20% chacun. +## Cinq cours, 20% chacun. + 1. Algorithmes et structures de données (2 semestres): * 1er semestre: * bases de programmation en C jusqu'à Noël.