P. 1
Estructura de datos Antologia

Estructura de datos Antologia

Ratings:

4.67

(3)
|Views: 21,069 |Likes:
Published by brenly

More info:

Published by: brenly on May 04, 2008
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

07/24/2013

pdf

text

original

 
Unidad 1.- Análisis de algoritmos
El Análisis de algoritmos es una parte importante de una Teoría de complejidad computacionalmás amplia, que provee estimaciones teóricas para los recursos que necesita cualquier algoritmoque resuelva un problema computacional dado. Estas estimaciones resultan ser bastante útiles enla búsqueda de algoritmos eficientes.A la hora de realizar un análisis teórico de algoritmos es corriente calcular su complejidad en un
sentido asintótico
, es decir, para una tamaño de entrada suficientemente grande. La cota superior asintótica, y las notaciones omega y theta se usan con esa finalidad. Por ejemplo, la búsqueda binaria decimos que se ejecuta en una cantidad de pasos proporcional a un logaritmo, enO(log(n)), coloquialmente "en tiempo logarítmico". Normalmente las estimaciones asintóticas seutilizan porque diferentes implementaciones del mismo algoritmo no tienen porque tener lamisma eficiencia. No obstante la eficiencia de dos implementaciones "razonables" cualesquierade un algoritmo dado están relacionadas por una constante multiplicativa llamada
constanteoculta
.La medida exacta (no asintótica) de la eficiencia a veces puede ser computada pero para ellosuele hacer falta aceptar supuestos acerca de la implementación concreta del algoritmo, llamadamodelo de computación. Un modelo de computación puede definirse en términos de unaordenador abstracto, como la Máquina de Turing, y/o postulando que ciertas operaciones seejecutan en una unidad de tiempo. Por ejemplo, si al conjunto ordenado al que aplicamos una búsqueda binaria tiene n elementos, y podemos garantizar que una única búsqueda binaria puederealizarse en un tiempo unitario, entonces se requieren como mucho log
2
N + 1 unidades detiempo para devolver una respuesta.Las medidas exactas de eficiencia son útiles para quienes verdaderamente implementan y usanalgoritmos, porque tienen más precisión y así les permite saber cuanto tiempo pueden suponer que tomará la ejecución. Para algunas personas, como los desarrolladores de videojuegos, unaconstante oculta puede significar la diferencia entre éxito y fracaso.Las estimaciones de tiempo dependen de cómo definamos un paso. Para que el análisis tengasentido, debemos garantizar que el tiempo requerido para realizar un paso esacotadosuperiormente por una constante. Hay que mantenerse precavido en este terreno; por ejemplo,algunos análisis cuentan con que la suma de dos números se hace en un paso. Este supuesto puede no estar garantizado en ciertos contextos. Si por ejemplo los números involucrados en lacomputación puedes ser arbitrariamente largos, dejamos de poder sumir que la adición requiereun tiempo contante (usando papel y lápiz, compara el tiemo que necesitas para sumar dos enterosde 2 dígitos cada uno y el necesario para hacerlo con enteros de 1000 dígitos).
 
1.1
Concepto de Complejidad de algoritmos.
El análisis de algoritmo es una parte muy importante de la ciencia de la computación, de modo quela medida de la eficiencia de u algoritmo será uno de los factores fundamentales. Por consiguientees importante poder analizar los requisitos de tiempo y espacio de u algoritmo para ver si existedentro de limites aceptables.Es difícil realizar un análisis simple de un algoritmo que determine la cantidad exacta de tiemporequerida para ejecutarlo. La primera complicación es que la cantidad exacta de tiempo dependeráde la implementación del algoritmo y de la maquina en que se ejecuta. El análisis normalmente debeser independiente del lenguaje o maquina que se utilice para implementar el algoritmo. El análisisdel algoritmo tratará de obtener el orden de magnitud de tiempo requerido para la ejecución delmismo y cada algoritmo tendrá un coste computacional diferente.La eficiencia es un criterio que se debe utilizar cuando se selecciona un algoritmo y suimplementación. Existe al menos tres dificultades fundamentales que son los siguientes:
¿Cómo se codifican los algoritmos?
¿Que computadoras utilizara?
¿Qué datos debe utilizar el programa?
El análisis del a eficiencia debe ser independiente de las implementación especificas de lacomputadora y de los datos específicos que se manipulan. Pero las consideraciones de eficienciafundamentales son: el tiempo y el espacio. La complejidad del espacio de un programa es lacantidad de memoria que se necesita para ejecutar hasta la compleción (terminación).La complejidad de el tiempo de un programa es la cantidad de tiempo de computadora que senecesita para ejecutar hasta la compleción al considerar estos dos aspectos podremos tener lamedida exacta de tiempo y espacio del cual necesitamos para realizar u buen análisis de algoritmos.Un algoritmo será mas eficiente comparado con otro, siempre que consuma menos recursos, comoel tiempo y espacio de memoria necesarios para ejecutarlo.
1.2 Aritmética de la notación O.
La notación O (también llamada O mayúscula), se utiliza para comparar la eficiencia de losalgoritmos.
Tipos de análisis de la Notacion O
Peor caso (usualmente)T(n) = Tiempo máximo necesario para un problema de tamaño n.Caso medio (a veces)T(n) = Tiempo esperado para un problema cualquiera de tamaño n.
Requiere establecer una distribución estadística
Mejor caso (engañoso)
 Análisis del peor caso
¿Cuál es el tiempo que necesitaría un algoritmo concreto?
o
Varía en función del ordenador que utilicemos.
 
o
Varía en función del compilador que seleccionemos.
o
Puede variar en función de nuestra habilidad como programadores.
IDEA:Ignorar las constantes dependientes del contexto.SOLUCIÓN:Fijarse en el crecimiento de T(n) cuando n ->∞
NOTACION “O” 
O(g(n)) = { f(n) | Ec,n0 constantes positivas tales que f (n) = c g(n) A n = n0 }En la práctica, se ignoran las constantes y los términos de menor peso:3n3 + 90n2 – 5n + 6046 = O (n3)Eficiencia asintóticaCuando n es lo suficientemente grande…Un algoritmo O (1), es más eficiente que un algoritmo O (log n),Un algoritmo O (log n), es más eficiente que un algoritmo O(n),Un algoritmo O(n), es más eficiente que un algoritmo O(n log n),Un algoritmo O(n log n), es mas eficiente que un algoritmo O (n2),Un algoritmo O (n2), es más eficiente que un algoritmo O(n3),Un algoritmo O (n3), es más eficiente que un algoritmo O (2n).NOTA:En ocasiones, un algoritmo más ineficiente puede resultar másadecuado para resolver unproblema real ya que, en a práctica, hay que tener en cuenta otros aspectos además de laeficiencia.
Propiedades de la notación O 
c O(f(n)) = O(f(n))O (f(n)+g(n)) = max {O (f(n)), O (g(n))}O (f(n)+g(n)) = O (f(n)+g(n))O (f(n)) O (g(n)) = O (f(n) g(n))O(O (f(n))) = O (f(n))1.3 Complejidad
El análisis de complejidad se basa en la comparación del tipo de ejecución de los algoritmosdesarrollados para resolver un problema.A partir del análisis de complejidad se han definido varias clases de problemas: los problemas quese resuelven en tiempo polinomial por una máquina determinista forman la clase P y los problemasque se resuelven en tiempo polinomial por una máquina no determinista forman la clase NP.En computación, al hablar de complejidad, no se está refiriendo a la dificultad que se tendría paradiseñar un programa, o a lo rebuscado de un algoritmo. La teoría de complejidad tiene que ver condos medidas de desempeño: tiempo y espacio.La complejidad computacional de un problema es una medida de los recursos computacionales(generalmente el tiempo) requeridos para resolver el problema.La complejidad temporal tiene que ver con el tiempo que tarda un programa para ejecutarse. Lacomplejidad espacial estudia la cantidad de espacio de almacenamiento que es necesario para unaoperación.

Activity (166)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
Angel Torres liked this
YoOtam HOuse liked this
Gonzalo Mardones liked this
davidrey29 liked this
hectorprz liked this
Eber Sanchez liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->