Définition de file En informatique, on définit une file comme étant une structure de données où l’on peut insérer et extraire en fonctionnant selon le principe « premier arrivé, premier servi » ou First In First Out.
On voit des files tous les jours : file d’attente à l’hôpital, file à la cafétéria, etc. On peut voir un tunnel à une voie comme étant une file. En effet, le premier véhicule à pénétrer dans le tunnel sera toujours le premier à sortir. Exemple visuel d’une file
Pour implanter une file, il faut au minimum : Un espace pour contenir des données. Un compteur d’éléments. Implantation d’une file
Nous utiliserons un tableau de 5 cases pour contenir les données et une variable pour savoir combien il y a d’éléments dans la file. Au départ, la file ressemblera à ceci : Tab[0]Tab[1]Tab[2]Tab[3]Tab[4] Tab??? Nb. éléments0 Implantation d’une file
Pour avoir l’effet «premier arrivé, premier servi», nous ajouterons toujours la nouvelle donnée à droite et nous retirerons toujours la donnée de gauche, donc à l’indice 0. Malheureusement, cela nous forcera à décaler les éléments… Implantation d’une file
On enfile la valeur 40. On enfile la valeur 30. On enfile la valeur 20. On enfile la valeur 10. On défile un élément. Tab[0]Tab[1]Tab[2]Tab[3]Tab[4] Tab??? Nb. éléments0 Visualisation du fonctionnement
D’un point de vue efficacité, le décalage des données est totalement inacceptable. C’est beaucoup trop lent! Implantation d’une file
Pour éviter de décaler les éléments, nous allons conserver une autre information pour savoir où commence la file et nous ne retirerons pas toujours à l’indice 0. Tab[0]Tab[1]Tab[2]Tab[3]Tab[4] Tab??? Début0 Nb. éléments0 Implantation d’une meilleure file
On enfile la valeur 40. On enfile la valeur 30. On enfile la valeur 20. On enfile la valeur 10. On défile un élément. Tab[0]Tab[1]Tab[2]Tab[3]Tab[4] Tab??? Nb. éléments0 Début0 Visualisation du fonctionnement
Le défi consiste maintenant à savoir où ajouter une nouvelle donnée et comment déplacer l’indice de début lors d’un défilement. Si, par exemple, l’état de la file est le suivant : Tab[0]Tab[1]Tab[2]Tab[3]Tab[4] Tab23??? 1 Début4 Nb. éléments3 On sait qu’il reste de la place, mais comment déterminer où ajouter le nouvel élément ? Implantation d’une meilleure file
Pour savoir où insérer le nouvel élément, on utilisera le modulo ! Implantation d’une meilleure file
On définit le modulo comme étant le reste de la division entière. Voici quelques exemples : 13 modulo 3 = 1 (puisque 13 / 3 = 4 reste 1) 39 modulo 5 = 4 (puisque 39 / 5 = 7 reste 4) 7 modulo 10 = 7 (puisque 7 / 10 = 0 reste 7) -12 modulo 10 = 8 (puisque -12 / 10 = -2 reste 8) Rappel à propos du modulo
Pour savoir où ajouter, on utilisera le calcul suivant : (Début + Nb. éléments) modulo Taille_file Dans l’exemple ci-dessous, on ajoutera à l’indice (4 + 3) modulo 5 = 2. Tab[0]Tab[1]Tab[2]Tab[3]Tab[4] Tab23??? 1 Début4 Nb. éléments3 Fonctionnement de la meilleure file
Pour savoir où déplacer le début en cas de défilement, on utilisera le calcul suivant : (Début + 1) modulo Taille_file Dans l’exemple suivant, on retirera à l’indice 4 et début deviendra (4 + 1) modulo 5 = 0. Tab[0]Tab[1]Tab[2]Tab[3]Tab[4] Tab23??? 1 Début4 Nb. éléments3 Fonctionnement de la meilleure file
Autres applications du modulo Si nous sommes mercredi, quel jour de la semaine serons-nous dans 40 jours ? (2 + 40) modulo 7 = 0, nous serons donc lundi. Il est 13:00. Quelle heure sera-t-il dans 40 heures? ( ) modulo 24 = 5, il sera donc 5:00. LundiMardiMercrediJeudiVendrediSamediDimanche
Autres applications du modulo Quel sera l’angle t dans 10 minutes si le point P est initialement situé à 130 o et qu’il tourne à la vitesse de 60 o par minutes ? ( *60) modulo 360 = 10 Implémentation du déplacement de PacMan dans les corridors spéciaux… La morale de cette histoire ? Derrière chaque phénomène cyclique se cache un modulo.
Cryptographie à clé publique Où M est une portion du message d’origine et C est la portion du message codé. Information publique (clé d’encryptage) : n qui est le produit de deux grands nombres premiers : n = pq. e choisi tel que pgcd (e, (p -1)(q -1) ) = 1. Information secrète (clé de décryptage) : d qui est l’inverse de e modulo (p -1)(q -1). Le calcul de la puissance est fait à l’aide de l’algorithme Modular Exponentiation.
Cryptographie à clé publique Attention! Un espion qui réussirait à factoriser n pourrait calculer immédiatement la clé de décodage d. Tout ce système repose donc sur le fait qu’il est très difficile d’obtenir la décomposition en nombres premiers des grands nombres. Voir Discrete Mathematics and its Applications, 7 e édition, K. H. Rosen, page 299 de la section 4.6 ou le site RSA Laboratories.RSA Laboratories
Par Frédérick Henri et Geneviève Savard Merci aussi à Hugues Saulnier du Service des enseignements généraux