ICC Semaine 3 Semaine 2 : algorithme / ingrédients de base

January 8, 2018 | Author: Anonymous | Category: Mathématiques
Share Embed Donate


Short Description

Download ICC Semaine 3 Semaine 2 : algorithme / ingrédients de base...

Description

ICC Semaine 3 Semaine 2 : algorithme / ingrédients de base / complexité Semaine 3 : Conception d’algorithmes : Récursivité et programmation dynamique Une approche fréquente pour résoudre un problème est de le décomposer en sousproblèmes, chacun plus simple à résoudre. Une classe particulière d’algorithmes qui fonctionnent sur ce principe sont les algorithmes récursifs : algo qui fait appel à lui-même Ex : calcul de la somme des n premiers nombres entiers VERSION ITERATIVE : Entrée : nombre entier positif n Sortie : S(n)=∑𝑛𝑖=1 𝑖 i0 Pour i allant de 1 à n xx+i Sortir x VERSION ALGO RECURSIF : Algo_rec Entrée : nombre entier positif n Sortie : S(n) Si n + 1, sortir 1 ≫≫ C’est la condition d’arrêt, OBLIGATOIRE ‼ Sortir n + algo_rec(n-1) ≫ Fait appel à lui même et test avec la valeur (n-1) Si n=3 > n ≠ 1 Sortir 3 + algo_rec (2) N≠1 Sortir 2 + algo_rec(1) N=1 donc sort 1 2+1 = 3 3+3=6 Recherche d’un élément dans une liste ordonnée Soit L une liste ordonnée : L = {-40, -12, 3, 17, 22, 40, 41, 57} x un nombre entier On aimerait savoir si x ∈ 𝐿 ? ALGO DE DICHOTOMIE  Prendre toute la liste, la diviser par 2 pour travailler sur une plus petite liste Entrée : liste L ordonnée, taille n, nombre x Sortie : x ∈ 𝐿 ? Si n = 1 { si x = L(1), sortir oui, sinon, sortir non} ≫ si la taille de ma liste est de 1 m = n/2 ≫ partie entière supérieure Si x ≤ L(n), sortir dichotomie (L(1 ; m), m, x) ≫L(1 ; m) est la première partie de la liste Sinon sortir dichotomie (L(m+1 ; n), (n-m) ; x)

ICC Semaine 3 ALGORITHMES DE TRI : Tri par insertion L = {2, 4, 6, 3, 51} ≫ si je vois un nombre qui est plus petit que le précédent (ici 3), je vais décaler L(i) jusqu’à sa bonne place Entrée : L liste non-triée, taille n Sortie : L triée (dans l’ordre croissant) Si n = 1, sortir L Pour i allant de 2 à n : si L(i) < L(i – 1), décale L(i) jusqu’à la position j telle que L(j-1) < L(i) ≤ L(j) Au pire, pour déplacer un nombre, on le déplacera n fois vers la droite ou la gauche, et cela n fois parce que ya n nombre Donc Complexité O(n2) Tri_fusion (algorithme récursif) Entrée : Liste L, taille n Sortie : Liste triée L Si n = 1, sortir L (≫ condition d’arret) m  n÷2 L1  tri_fusion(L(1:m) ; m ) L2  tri_fusion(L(m+1:n) ; n-m ) Fusionner L1 et L2 en une liste L’ Sortir L’ On ouvre pleins de boite qui sont de plus en plus petites du coup elles se trient au fur et à mesure puis quand on fusionne, la liste est triée. Complexité : O(nlog2n) < 𝒪 (n2) PROGRAMMATION dynamique Nombres de Fibonacci F(0) = 1, f(1)=1, f(n)=f(n-1) + f(n-2) ∀ n ≥2

Principe de la prog dynamique On ne fait jamais 2 fois le meme calcul

Fibo (n) Entrée : n Sortie : f(n) Si n=0 ou n=1 sortir 1 Sortir Fibo (n-1) + Fibo(n-2)

Fibo2 Entrée : n Sortie : f(n) Si n= 0 ou 1, sortir 1 Y  1, z 1 Pour i allant de 2 à n : {xy+z zy yx }

On peut monter qu’on aura f(k) fois la boite n-k  on doit ouvrir en tout cas f(n) boites (c’est à dire f(n) opérations)

Complexité O(n)

View more...

Comments

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF