320 likes | 480 Views
TEMA I: Anàlisi del cost computacional. Anàlisi del cost computacional. Tema 1: Anàlisi de cost computacional L’eficiència dels algoritmes Mides asimptòtiques i ordres de complexitat Calcular l'eficiència d’un algoritme Anàlisi de recurrències Problemes per a resoldre.
E N D
Anàlisi del cost computacional • Tema 1: Anàlisi de cost computacional • L’eficiència dels algoritmes • Mides asimptòtiques i ordres de complexitat • Calcular l'eficiència d’un algoritme • Anàlisi de recurrències • Problemes per a resoldre
Anàlisi del cost computacional • L’eficiència dels algoritmes • Un bon algorisme no ha de dependre del sistema • Vector de 1000000 elements. PC 8 segons amb quicksort. • Vector de 1000000 elements. IBM Star 6 minuts amb bombolla. • Relació de velocitat: IMB Star / PC 3 GHz 160 • El programador es responsable de l’optimització independent de plataforma.
Anàlisi del cost computacional • L’eficiència dels algoritmes • Exemple: 1:per i des_de 1 fins_a n fer 2: pmin := i; 3:per j des_de i+1 fins_a n fer 4: si a[j] < a[pmin] llavors pmin := j fsi fper 5:intercanviar(a[i],a[pmin]); fper • Una manera de mesurar l’eficiència • ta: temps d’una assignació de sencers • tc: temps d’una comparació de sencers • ti: temps d’incrementar un sencer • tv: temps d’accés a un element d’un vector • Cost: • Instrucció 1: ta + (n - 1) ti + n tc • Instrucció 2: (n - 1) ta • Instrucció 3: (un i) ta + (n - i) ti + (n – i + 1) tc • Instrucció 4: (un i) Millor: (n - i) (2tv +tc) ; Pitjor: (n - i) (2tv + tc) + (n – i) ta • Instrucció 5: (n - 1) (2tv +3ta) • Total cas desfavorable:
Anàlisi del cost computacional • L’eficiència dels algoritmes. A l’exemple anterior: • El temps d’execució de l’algorisme depèn de 3 factors • La grandària del conjunt de dades d’entrada (n) • El contingut de les dades d’entrada: Oscil·la entre Tmin i Tmax • El codi generat per un compilador i un computador en concret • De forma simplificada: la fórmula de l’anàlisi total dona lloc a dos polinomis de la forma:
Anàlisi del cost computacional • L’eficiència dels algoritmes. En general: • Adoptarem el criteri d’estimar el cost computacional en el pitjor dels casos • En el cas mitjà de vegades es fa difícil conèixer la distribució que segueixen les dades d’entrada • Fent referència al tercer factor que influeix en el cost computacional, adoptarem el criteri d’ignorar-lo. Criteri Asimptòtic (constant multiplicativa) • En resum, l’important a considerar serà la dependència del segon factor. La grandària del conjunt de dades d’entrada (n)
Anàlisi del cost computacional • L’eficiència dels algoritmes. En general: • De vegades no es possible trobar un únic paràmetre per definir la grandària de les dades d’entrada: • Exemple: Cas d’una matriu quadrada amb les dues dimensions no relacionades • Dependències particulars: • Lineal: n • Quadràtica: n2 • D’altres: per exemple, • Advertència: Sempre hi sol haver una lluita entre l’optimització de temps i l’optimització d’espai.
Anàlisi del cost computacional • Mides Asimptòtiques • Denotarem per el conjunt dels nombres naturals i per el dels reals estrictament positius • Definició 1.1: • Sigui . El conjunt de les funcions de l’ordre de , denotat com , es defineix com: • Així mateix direm que una funció és de l’ordre de quan
Anàlisi del cost computacional • Mides Asimptòtiques • La definició anterior garanteix que una funció pertany al conjunt quan està fitada superiorment per per valors de n suficientment grossos • Direm que el conjunt defineix un ordre de complexitat • Escollirem com a representant de l’ordre a la funció més senzilla possible dins del mateix. • Ordre de complexitat lineal: • Ordre de complexitat quadràtica: • Constant: • etc.
Anàlisi del cost computacional • Mides Asimptòtiques. Relacions: • Relacions d’ordres de complexitat: • Si , llavors • sii • sii • Teorema del límit: • Jerarquia d’ordres de complexitat:
Anàlisi del cost computacional • Mides Asimptòtiques. Ordres de complexitat • La notació ens dóna una fita superior al temps d’execució d’un algoritme. • Sovint estarem interessats en la menor funció tal que . Per això trobarem la funció que sigui la menor fita superior, l’ínfim, de : • Sigui . El conjunt es defineix com:
Anàlisi del cost computacional • Mides Asimptòtiques. Ordres de complexitat • El conjunt llegit com ordre exacte de , es defineix com:
Anàlisi del cost computacional • Mides Asimptòtiques. Operacions entre ordres de complexitat (també per ) • Suma: • Producte:
Anàlisi del cost computacional • Mides Asimptòtiques. Operacions entre ordres de complexitat (també per ) • Regla de la suma: • Regla del producte: • Ambdues regles es poden generalitzar per un nombre k qualsevol d’ordres de complexitat, sempre que k no depengui de n.
Anàlisi del cost computacional Temps 2n 1010 n3 108 106 n2 104 n log n n 102 log n n 20 40 60 80 100 • Mides Asimptòtiques • Representació gràfica de les taxes de creixement més freqüents:
Anàlisi del cost computacional T(n) n = 100 n = 200 t = 1 h t = 2 h k3 n log n k6 2n k5 n3 k1 log n k2 n k4 n2 1 h 1 h 1 h 1 h 1 h 1 h 1,15 h 4 h 2,30 h 2 h 8 h 1,27 x1030 h n = 100 n = 100 n = 100 n = 100 n = 100 n = 100 n = 141 n = 126 n = 101 n = 178 n = 200 n = 10000 • Mides Asimptòtiques • Relació pràctica de les taxes de creixement més freqüents (un exemple pràctic):
Anàlisi del cost computacional • Mides Asimptòtiques. Regles pràctiques: • De la teoria exposada se poden extreure una sèrie de regles pràctiques que sovint són les que s’empren a la realitat, ja que els càlculs no es solen fer d’una forma tan detallada com la del exemple anterior: • Instruccions d’assignació, e/s i aritmètiques que no involucren variables estructurades ni que depenguin de n: • Composició seqüencial d’instruccions. S’aplica la regla de la suma:
Anàlisi del cost computacional • Mides Asimptòtiques. Regles pràctiques: • Continuació: • Instruccions condicionals: “ Si B llavors S1 sino S2fsi ”. El que farem serà tractar les cotes superiors i inferiors per separat: Siguin: • Pitjor cas: • Cas mitjà:
Anàlisi del cost computacional • Mides Asimptòtiques. Regles pràctiques: • Continuació: • Instruccions Iteratives: “ mentre B fer S fmentre ”. Aplicarem la regla del producte: Sigui el cost d'avaluar B més el d’executar S. Sigui el cost de fer n iteracions una funció de n, . Aleshores el cost total del bucle serà de: • Si el cost d’una iteració varia molt d’una iteració a una altra caldrà filar més prim. Aleshores haurem de realitzar una suma des de 1 a dels cost individuals.
Anàlisi del cost computacional • Mides Asimptòtiques. Regles pràctiques: • Exemple, ordenació per selecció: (1) per i des de 1 fins n fer // pmin serà la posició del mínim de a[1..n] (2) pmin = i; (3) per j des de i+1 fins n fer (4) si a[j] < a[pmin] llavors pmin = j fsi; fper; (5) intercanviar(a[i],a[pmin]); fper;
Anàlisi del cost computacional • Mides Asimptòtiques. Regles pràctiques: • Exemple, ordenació per selecció: • La instrucció més interna és una condicional simple amb una assignació, en conseqüència el cost és: . • L’avaluació del per més intern es també de . La funció que descriu el nombre d’iteracions és . En conseqüència el bucle intern presenta un ordre de complexitat de . • Les instruccions (2) i (5) juntament amb la condició de control externa presenten un cost de . • Per tan el cost total d’una iteració del bucle extern és de .
Anàlisi del cost computacional • Mides Asimptòtiques. Regles pràctiques: • Exemple, ordenació per selecció: • Així el cost total d’efectuar totes les iteracions del bucle extern seria de:
Anàlisi del cost computacional • Consideracions generals. 1: • El criteri asimptòtic és una eina molt útil per fer primeres aproximacions. • Cas concret: • A la pràctica l’algorisme 1 és millor que el 2 per valors
Anàlisi del cost computacional • Consideracions generals. 2: • La bondat teòrica d’alguns algoritmes amaga constants multiplicatives molt grans. Multiplicació de matrius. • Cal tenir en compte la balança entre l’eficiència i el cost de producció. • Cal tenir en compte la balança entre la memòria i el temps d’execució. EXPERIÈNCIA I LÒGICA
Anàlisi del cost computacional • Resolució de recurrències: • Algorismes recursius sovint impliquen funcions de cost recursives • Es tractarà de trobar una expressió no recursiva per expressar . Ignorar constants multiplicatives. • Exemple, factorial:
Anàlisi del cost computacional • Resolució de recurrències: • L’expressió del factorial es pot desdoblar donant lloc a: • En general els algoritmes recursius que decreixen a velocitat constant tenen per solució de la recurrència:
Anàlisi del cost computacional • Resolució de recurrències. Reducció per divisió: • L’expressió del factorial es pot desdoblar donant lloc a: • En general els algoritmes recursius que decreixen a velocitat exponencial tenen per solució de la recurrència:
Anàlisi del cost computacional Temari de l’assignatura • Bibliografia • Diseño de programas, formalismo y abstracción. Ricardo Peña. Ed: Prentice Hall. ISBN: 84-8322-003-2. • Diseño y verificación de algoritmos. F. Perales. Ed: UIB. ISBN: 84-7632-382-4. • Técnicas de diseño de algoritmos. Miquel Mascaró Portells. Ed: UIB. ISBN: 84-7632-383-2. • A Primer on Program Construction (Vol III). Albert Llamosí. Apunts interns UIB. • http://java.sun.com
Anàlisi del cost computacional EXERCICIS
Anàlisi del cost computacional • Exercicis d’ordre de complexitat: • Un algorisme tarda 100 ms en solucionar un problema de mida n=10 a un ordinador de 300 Mhz. Que tardarà per n=30 si el seu ordre de complexitat és: • (sol: 2.7 segons aprox.) • (sol: 29.127 hores aprox.) • (sol: 8.2 x 1017 mil·lenis aprox.) • Quant més ràpid ha de ser un ordinador per amb n=30 tardar el mateix que l’anterior per n=10. Mirar-ho en els tres casos. (Sol: Dividir temps nou per temps antic)
Anàlisi del cost computacional • Exercicis d’ordre de complexitat: • És possible que un algorisme d’ordre s’executi més ràpid que un d’ordre si: • n = 100 • S’executen a diferents màquines i podem triar a quina s’executa el primer • Es tracta del millor cas del primer algoritme • Variem el contingut de les dades d’entrada (Sol: raonar la resposta)
Anàlisi del cost computacional • Exercicis d’ordre de complexitat: • Desenvolupar un algorisme per que donada una seqüència n de números trobi la sub-seqüència {ni , ... , nj} que presenti una suma dels seus valors que sigui màxima. Per exemple de {-2, 10, 5, -3, 4, -6, -2, 7} la de màxima suma és {10, 5, -3, 4}. • Trobar-ne un d’ordre i un d’ordre • És possible obtenir-ne un d’ordre inferior als anteriors?