La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 ALGORITHMIQUE AVANCEE IUT Vélizy – RT2 FA Laurent Marsan.

Présentations similaires


Présentation au sujet: "1 ALGORITHMIQUE AVANCEE IUT Vélizy – RT2 FA Laurent Marsan."— Transcription de la présentation:

1 1 ALGORITHMIQUE AVANCEE IUT Vélizy – RT2 FA Laurent Marsan

2 2 L’ALGORITHMIQUE, POUR QUOI FAIRE? Problème Solution Programme Algorithme

3 3 Quand? Avant de programmer Problème difficile, risque d’être trop couteux (temps, mémoire) Temps disponible, nécessité d’obtenir un programme efficace L’ALGORITHMIQUE, POUR QUOI FAIRE? Comment? Aspects techniques (langage de programmation, architecture de l’ordinateur) mis « de côté » Estimation du coût théorique (complexité) d’une solution en temps et en mémoire, afin de comparer deux solutions. Qu’est ce que je gagne? Pour votre cursus, bagage fondamental pour o comprendre le programme de quelqu’un d’autre o exprimer votre idée de solution o écrire ou contribuer à un programme Pour vous, l’algo apprend à organiser et à structurer sa réflexion

4 4 L’ALGORITHMIQUE, POUR QUOI FAIRE?

5 5 Nb entiers Tri naïf 400n.m. 4.0000.01 sec. 40.0001.59 sec. 400.0003 mn. 40 4.000.000Trop long! (~ 5 h.) 40.000.000Trop long! (~ 20 j.) « Quick sort » n.m. 0.03 sec. 0.32 sec. 3.64 sec. 36.7 sec. L’ALGORITHMIQUE, POUR QUOI FAIRE?

6 6 Bioinformatique Synthèse d’image

7 7 AU PROGRAMME… Hachage Pointeurs Listes chaînées Arbres Tris et recherches Récursivité

8 8 Variables o C’est de la mémoire o Statique: on connait les besoins avant de lancer le programme o Pas nécessairement nul à la déclaration (en C, mais pas en Java) o Possède forcément une valeur! (en C/Java, pas en Shell) o Variables locales, fonctions et pile o Typées (C, Java mais pas Shell) o Types simples ou complexes GENTILS RAPPELS

9 9 Tableaux statiques o Une ou plusieurs dimensions o D’un bloc mémoire! o Initialisation (pas toujours nécessaire) GENTILS RAPPELS // INITIALISATION à ZERO - 2D // Déclaration int tab[1000][500]; int ligne, colonne; // Initialisation For(ligne=0; ligne!=1000; ligne++) { for(colonne=0; colonne!=500; colonne++) { tab[ligne][colonne] = 0; } }

10 10 Tableaux statiques o Remplissage GENTILS RAPPELS // REMPLISSAGE 1 – NOMBRE DE VALEURS CONNU // Déclaration int tab[1000], i, val; // Lecture For(i=0; i!=1000; i++) { scanf("%d", &val); tab[i] = val; }

11 11 Tableaux statiques o Remplissage GENTILS RAPPELS // REMPLISSAGE 2 – NOMBRE DE VALEURS INCONNU // Déclaration int tab[1000], val; int nbval; // Nombre de valeurs ds le tableau // Lecture nbval=0; printf("Tapez vos entiers, -1 quand fini\n"); scanf("%d", &val); while(val!=-1 && nbval!=1000) { tab[nbval] = val; nbval++; scanf("%d", &val); } if(nbval==1000) printf("Fin du tableau atteinte\n"); printf("%d valeurs dans le tableau\n", nbval);

12 12 Ce mot signifie "adresse mémoire" Typé: pointeur sur… entier, flottant, caractère… En C, passage de paramètres par défaut: par valeur En Java, passage de paramètres par défaut: par référence = par pointeur POINTEURS int main() { int a=2; fonction(a); printf("%d", a); } void fonction(int a) { a=34; }

13 13 Pour modifier la variable passée en paramètre, il nous faut son adresse POINTEURS int main() { int a=2; fonction(&a); printf("%d", a); } void fonction(int *a) { *a=34; } &="adresse de la variable…" *= "valeur se trouvant à l'adresse…"

14 14 Le nom d'un tableau, c'est son adresse POINTEURS ET TABLEAUX int main() { int tab[10]; scanf("%d", tab+2); // écrit dans la case 2 }

15 15 CORREC EXO 1

16 16 CORREC EXO 2

17 17 CORREC EXO 2

18 18 CORREC EXO 5 : recherchePos

19 19 CORREC EXO 5 : main 34211914113

20 20 CORREC EXO 5 : insere

21 21 CORREC EXO 5 : version "avec des structures"

22 22 CORREC EXO 5 : insère, version "avec des structures"

23 23 Solution sale: boucles imbriquées EXO 6 : occurrences de nombres dans un intervalle donné 21271192834491…

24 24 Solution propre: tableau d'occurrences EXO 6 : occurrences de nombres dans un intervalle donné 21271192834491… 012345678 002000010…

25 25  Solution sale Pour un tableau de N nombres de 1 à 100, combien de lectures de chaque case? Réponse: 100N  Solution propre Pour un tableau de N nombres de 1 à 100, combien de lectures de chaque case? Réponse: N  Test grandeur nature EXO 6 : coût

26 26  Tableau statique Taille prédéfinie à la compilation int tab[100] Pas modifiable en cours d'exécution  Tableau dynamique Consiste à demander de la mémoire au système pendant l'exécution Appels système en Java: new Appels système en C: malloc, calloc, realloc, free ( ) TABLEAUX: statiques et dynamiques

27 27  malloc Fournit un espace mémoire sans l'initialiser malloc(taille demandée) Renvoie un pointeur sur la zone allouée, ou NULL si problème Ce pointeur doit être "casté" ALLOCATION DYNAMIQUE int *tab; tab=(int *) malloc(17*sizeof(int)); tab[5] = 9;

28 28  calloc Fournit un espace mémoire initialisé à zéro calloc(nombre de cellules, taille d'une cellule) Renvoie un pointeur sur la zone allouée, ou NULL si problème Ce pointeur doit être "casté" ALLOCATION DYNAMIQUE int *tab; tab=(int *) calloc(17, sizeof(int)); tab[5] = 9;

29 29  free Libère un espace mémoire alloué dynamiquement free(pointeur sur la zone allouée précédemment) En C, si pointeur perdu, zone perdue En Java, pointeur perdu entraîne libération de la zone (garbage collector) ALLOCATION DYNAMIQUE int *tab; tab=(int *) calloc(17, sizeof(int)); free(tab);

30 30  Realloc Permet d'augmenter ou de diminuer la taille d'un tableau alloué dynamiquement En pratique, étend la zone ou recopie la zone ailleurs realloc(pointeur sur zone allouée, nouvelle taille) Renvoie NULL si problème ATTENTION: le pointeur peut changer En C, si pointeur perdu, zone perdue En Java, pointeur perdu entraîne libération de la zone (garbage collector) ALLOCATION DYNAMIQUE float *tab; tab=(float *) malloc(100*sizeof(float)); tab=(float *) realloc(tab, 200*sizeof(float));

31 31  Vous pouvez désormais écrire ceci ALLOCATION DYNAMIQUE int nbval, i; float *tab; printf("combien de nombres voulez-vous saisir?\n"); scanf("%d", &nbval); tab=(float *) malloc(nbval*sizeof(float)); for(i=0;i!=nbval; i++) { printf("Case %d : ", i); scanf("%f", &(tab[i])); }

32 32 Dans un tableau de N cases, quel coût en temps pour…  …un accès direct (en M ème position) O(1)  … la recherche d'un élément O(N)  … l'insertion/suppression d'un élément déjà trouvé O(N) LES TABLEAUX: quel coût ? La complexité d'un algorithme indique à quoi le temps ou l'espace nécessaires à son exécution seront proportionnels. On étudie en général la complexité au pire des cas. Elle se note O(…). Dans un tableau de N cases, quel coût en espace pour…  …stocker tous les éléments O(N)

33 33 Idée: LES LISTES CHAINEES  Une structure plus souple pour les insertions/suppressions 12 66 41 2 56 70 NULL 8  Une structure également plus simple pour les réallocations: pourquoi?

34 34 LES LISTES CHAINEES  La conception d'une liste chaînée nécessite de définir une structure Cellule 12 typedef struct s_cellule { intval; struct s_cellule * suiv; } Cellule;  On dit que cette structure est récursive car elle fait appel à sa propre définition  Nécessité d'allouer dynamiquement chaque cellule Cellule * ptr; ptr = (Cellule *) malloc(sizeof(Cellule));


Télécharger ppt "1 ALGORITHMIQUE AVANCEE IUT Vélizy – RT2 FA Laurent Marsan."

Présentations similaires


Annonces Google