Estructura de Datos ISC Unidad 1

download Estructura de Datos ISC Unidad 1

of 67

Transcript of Estructura de Datos ISC Unidad 1

  • 1.1 Concepto de Complejidad de Algoritmos.

    1.2 Aritmtica de la notacin O.

    1.3 Complejidad.

    1.3.1 Tiempo de ejecucin de un algoritmo.

    1.3.2 Complejidad en espacio.

    1.4 Seleccin de un algoritmo.Unidad 1.- Anlisis de algoritmos.

  • Los datos a procesar por una computadora se clasifican en :

    a) Simples

    b) Estructurados Introduccin a la materia

  • Datos Simples:

    La principal caracterstica de los datos simples es que ocupan slo una casilla de memoria, por lo tanto una variable simple hace referencia a un nico valor a la vez.

    Dentro de este grupo de datos se encuentran: enteros, reales, caracteres, booleanos, enumerados y subrangos ( los dos ltimos no existen en algunos lenguajes de programacin.

  • TIPOS DE DATOS SIMPLESEs uno de los conceptos fundamentales de cualquier lenguaje de programacin. Estos definen los mtodos de almacenamiento disponibles para representar informacin, junto con la manera en que dicha informacin ha de ser interpretada.

    Para crear una variable (de un tipo simple) en memoria debe declararse indicando su tipo de variable y su identificador que la identificar de forma nica..

    Los simples son tipos nucleares que no se derivan de otros tipos, como los enteros, de coma flotante, booleanos y de carcter.

  • Definicin de bitUnidad mnima de informacin digital que puede ser tratada por una computadora. Proviene de la contraccin de la expresin binary digit (dgito binario), y puede tener dos estados "0" o "1".Definicin de byteSimboliza un carcter en una computadora (ej. una letra). . Conjunto significativo de ocho bits que representan un carcter, por ejemplo la letra "a", en un sistema informtico.Definicin de carcterCualquier signo tipogrfico. Puede ser una letra, un nmero, un signo de puntuacin o un espacio.Definicin de asciiAmerican Standard Code for Information Interchange. Estndar Americano para Intercambio de Informacin. La tabla bsica de caracteres ASCII est compuesta por 128 caracteres incluyendo smbolos y caracteres de control. Existe una versin extendida de 256. Conjunto de normas de codificacin de caracteres mediante caracteres numricos, de amplia utilizacin en informtica y telecomunicaciones.

  • b) Dato Estructurado o Abstracto:

    Los datos estructurados se caracterizan por el hecho de que con un nombre (identificador de variable estructurada) se hace referencia a un grupo de casillas de memoria. Es decir, un dato estructurado tiene varios componentes. Cada uno de los componentes bsicos puede ser a su vez un dato simple o estructurado. Sin embargo, los componentes bsicos (los de nivel ms bajo) de cualquier tipo estructurado son datos simples. Se ejemplifica un dato estructurado en la siguiente figura :

  • Las estructuras de datos constituyen un aspecto muy importante de la computacin. Muchos algoritmos, requieren una representacin apropiada de los datos para lograr ser eficientes. Esta representacin junto con las operaciones permitidas se llama estructura de datos. Definicin de Estructura de datos:Es una coleccin de datos organizados de un modo particular

  • Unidad 1 - Anlisis De AlgoritmosTipos de algoritmos segn su funcin

    Algoritmo de ordenamiento

    Es un algoritmo que pone elementos de una lista o un vector en una secuencia dada por una relacin de orden, es decir, el resultado de salida ha de ser una permutacin o reordenamiento de la entrada que satisfaga la relacin de orden dada.

    Algoritmo de bsqueda

    Es aquel que est diseado para localizar un elemento concreto dentro de una estructura de datos. Consiste en solucionar un problema booleano de existencia o no de un elemento determinado en un conjunto finito de elementos, es decir al finalizar el algoritmo este debe decir si el elemento en cuestin existe o no en ese conjunto (si pertenece o no a l), adems, en caso de existir, el algoritmo podra proporcionar la localizacin del elemento dentro del conjunto.

  • Concepto de complejidad de algoritmosAlgoritmo: Es una secuencia de operaciones o pasos perfectamente definidos que conducen a la solucin de un problema

    Complejidad de un algoritmo: es la funcin que da la eficiencia de un algoritmo (tiempo de respuesta)

  • Concepto de complejidad de algoritmosDado el nombre queremos conocer su numero de telfono.

    Bsqueda secuencial: Recorre cada elemento, uno a uno, hasta encontrar el nombre buscado y su telfono

    Bsqueda binaria: compara el nombre buscado con el que se encuentra en la mitad de la lista. Divide la lista en dos partes y determina en cual de las dos se encuentra el nombre buscado

    Es evidente que entre menos comparaciones se realicen menos tiempo de ejecucin tendr el algoritmo

  • Concepto Complejidad AlgoritmosLa resolucin prctica de un problema exige por una parte un algoritmo o mtodo de resolucin y por otra un programa o codificacin de aquel en un ordenador real.

    Ambos componentes tienen su importancia, pero la del algoritmo es absolutamente esencial, mientras que la codificacin puede muchas veces pasar a nivel de ancdota. A efectos prcticos o ingenieriles, nos deben preocupar los recursos fsicos necesarios para que un programa se ejecute. Aunque puede haber muchos parmetros, los mas usuales son el tiempo de ejecucin y la cantidad de memoria (espacio).

    Ocurre con frecuencia que ambos parmetros estn fijados por otras razones y se plantea la pregunta inversa: cual es el tamao del mayor problema que puedo resolver en T segundos y/o con M bytes de memoria?

    En lo que sigue nos centramos casi siempre en el parmetro tiempo de ejecucin, si bien las ideas desarrolladas son fcilmente aplicables a otro tipo de recursos.

  • Para cada problema determinaremos una medida N de su tamao (por nmero de datos) e intentaremos hallar respuestas en funcin de dicho N.

    El concepto exacto que mide N depende de la naturaleza del problema.

    As, para un vector se suele utizar como N su longitud; para una matriz, el nmero de elementos que la componen; para un grafo, puede ser el nmero de nodos (a veces es mas importante considerar el nmero de arcos, dependiendo del tipo de problema a resolver), en un archivo se suele usar el nmero de registros, etc.

    Es imposible dar una regla general, pues cada problema tiene su propia lgica de coste. Concepto Complejidad Algoritmos

  • Tiempo de Ejecucin Una medida que suele ser til conocer es el tiempo de ejecucin de un programa en funcin de N, lo que denominaremos T(N).

    Esta funcin se puede medir fsicamente (ejecutando el programa, reloj en mano), o calcularse sobre el cdigo contando instrucciones a ejecutar y multiplicando por el tiempo requerido por cada instruccin.

    As, un trozo sencillo de programa como: S1; for (int i= 0; i < N; i++) S2; requiere T(N)= t1 + t2*N siendo t1 el tiempo que lleve ejecutar la serie S1 de sentencias, y t2 el que lleve la serie S2.

    Prcticamente todos los programas reales incluyen alguna sentencia condicional, haciendo que las sentencias efectivamente ejecutadas dependan de los datos concretos que se le presenten. Concepto Complejidad Algoritmos

  • Esto hace que mas que un valor T(N) debamos hablar de un rango de valores Tmin(N) T(N) Tmax(N) los extremos son habitualmente conocidos como caso peor y caso mejor.

    Entre ambos se hallara algn caso promedio o ms frecuente.

    Cualquier frmula T(N) incluye referencias al parmetro N y a una serie de constantes Ti que dependen de factores externos al algoritmo como pueden ser la calidad del cdigo generado por el compilador y la velocidad de ejecucin de instrucciones del ordenador que lo ejecuta.

    Dado que es fcil cambiar de compilador y que la potencia de los ordenadores crece a un ritmo vertiginoso (en la actualidad, se duplica anualmente), intentaremos analizar los algoritmos con algn nivel de independencia de estos factores; es decir, buscaremos estimaciones generales ampliamente vlidas.Concepto Complejidad Algoritmos

  • Aritmtica de notacinExisten diversas formas para representar nuestros algoritmos y estas representaciones pueden ayudarnos en la comprensin de los mismos; as como poderlos trasladar a algn lenguaje de programacin.

  • Notaciones matemticasFuncin factorial: Es el producto de los n nmeros enteros positivos que van desde 1 hasta nEjemplo:n! 2!= 1.2=2 3!= 1.2.3=6 4!=1.2.3.4=24

    NOTACIONES:

  • NOTACIONES:Notaciones matemticasSimbolo de la suma (sumatorio)El simbolo sumatorio es

    Ejemplo:Sea la secuencia a1, a2, a3, a4,..an

    Las sumasa1+a2+a3+a4+ . +an = anJ=1

  • NOTACION INFIJA:Los operadores aparecen en medio de los operandos. A + B, A 1, E/F, A * C , A ^ B , A + B + C

    NOTACION PREFIJA:El operador aparece antes de los operandos. + AB, - A1, /EF, *AC, ^AB, ++ABC

    NOTACION POSTFIJA:El operador aparece al final de los operandos. AB+, A1-, EF/, AC*, AB^, AB+C+

    NOTACIONES:

  • Estructuras de controlLgica secuencial: se ejecuta en una secuencia obvia.

    Algoritmo Diagrama de flujo

    Modulo A

    Modulo B

    Modulo C

    Modulo AModulo BModulo C

  • Estructuras de controlLgica Selectiva: Utiliza un conjunto de condiciones que implica la ejecucin de alguna alternativa entre varias. Este tipo de estructuras reciben el nombre de estructura condicionadas

    Alternativa simpleAlternativa dobleAlternativa mltiple

  • Estructuras de controlAlternativa simple: si condicin, entonces: [Modulo A] [Final de la estructura condicional]

    Alternativa doble: si condicin, entonces: [Modulo B] [Fin de la estructura condicional]

  • Estructuras de controlAlternativa doble: si condicion(1), entonces: [Modulo A1] si No Si condicion(2), entonces: [Modulo A2] si No Si condicion(M), entonces: [Modulo AM] si No: [Modulo B] [Final de la estructura condicional]

  • Estructuras de controlLgica iterativa (flujo repetitivo): ciclos

    Ciclo Repetir-MientrasRepetir-Mientras condicin:[Modulo][Fin del ciclo]

  • Ejemplo de un Algoritmo con bsqueda secuencial.[inicializar]. K:=1 y LUG:=0Repetir paso 3 y 4 mientras LUG=0 y K
  • ComplejidadAnalizar algoritmos es la tarea mas costosa en el diseo de los algoritmos.

    Por que ? LegibilidadCosto en mantenimientoSe tienen que aportar criterios que midan la eficiencia

  • Factores que miden la eficiencia de un algoritmoPor el tiempo de ejecucin (ordenacin o bsqueda)

    Por el espacio (memoria)

  • Relacin espacio-tiempoTenemos un archivo con datos de nombres seguro social etc.Si se desea encontrar un nombre cual es el mejor mtodo? la busqueda binariaSi lo que conocemos es el numero de seguro que mtodo es mejor?La busqueda secuencial , Pero implica mayor tiempoComo solucionarlo:

  • Como seleccionamos un algoritmo?

  • AlgoritmosQu es un algoritmo?es un conjunto finito de instrucciones o pasos que sirven para ejecutar una tarea o resolver un problema dado.

  • Caractersticas de los algoritmos:Precisin:los pasos se enuncian con precisin.2. Entrada:el algoritmo recibe una entrada de datos3. Salida:el algoritmo produce una salida de informacinAlgoritmos

  • Anlisis de algoritmos

    IntroduccinEs difcil determinar la cantidad exacta de ejecucin de un algoritmo ya que esto depende de:

    Como se codifico el programa Que computadora se utilizara Que datos debe utilizar el programa

  • Anlisis de algoritmos

    Introduccin: Tasa de crecimientoA medida que crece un elemento del programa, generalmente crece el tiempo de ejecucin del mismo.

    Esto es que el tiempo de ejecucin varia segn el tamao de la entrada.

    Observando estas variaciones se puede determinar la tasa de crecimiento del programa.

    Tasa de crecimiento: Es una medida importante de la eficiencia de un programa ya que predice cuanto tiempo se requerir para entradas muy grandes de un determinado problema.

  • Anlisis de algoritmos

    Para determinar la eficiencia de un programa debemos de considerar:

    El tiempoEl espacio

    La complejidad del espacio de un programa.- Es la cantidad de memoria que se necesita para ejecutar hasta la complecin (terminacin)

    La complejidad del tiempo de un programa.- Es la cantidad de tiempo de computadora que se necesita para Ejecutar hasta la complecin (terminacin)Introduccin: Consideraciones de eficiencia

  • Cmo decidir cul de los algoritmos es mejor (tiempo de ejecucin y espacio de memoria)? En ocasiones pueden existir varios algoritmos para resolver una aplicacin particular (A1, A2, ,An). Solucin 1 (a posteriori, medida experimental). La solucin ms sencilla parece ser implementar los algoritmos en algn lenguaje de programacin y medir el tiempo de ejecucin que cada uno de ellos requiere para resolver el problema.Solucin 2 (a priori, medida terica). Estableciendo una medida de calidad de los algoritmos, que nos permita compararlos sin necesidad de implementarlos.Anlisis de algoritmosIntroduccin

  • En la solucin 1, resulta muy costoso (por no decir imposible), implementar todos los algoritmos para poder realizar la comparacin de los tiempos de ejecucin.Factores que influyen en el tiempo de ejecucin:La velocidad de operacin de la computadora en que se ejecuta. Es diferente ejecutar el programa en un micro 80386, que en un pentium de 1.83 Ghz.El compilador utilizado (calidad del cdigo generado). Cada compilador utiliza diferentes estrategias de optimizacin, siendo algunas ms efectivas que otras.La estructura del algoritmo para resolver el problema.Anlisis de algoritmosIntroduccin

  • En la solucin 2, lo ideal, al hacer la evaluacin de la eficiencia del algoritmo, sera encontrar una funcin matemtica que describiera de manera exacta el tiempo que dura el algoritmo al ejecutarse, con una entrada de n datos - TA(n) En muchos casos, el clculo de la funcin matemtica no se puede realizar, ya que depende de la calidad o contenido de la entrada, se ilustra a continuacin: for (int i=0; i < N && V[i]!=busca; i++);existe=i
  • TA(n)= 11Anlisis de algoritmosEsto implica que, por ms que se conozca el tamao de los datos de entrada, es imposible (para muchos problemas) determinar el tiempo de ejecucin para cada una de las posibles entradas.Introduccin

    VbuscaOperacionesTiempo Mseg5 6 7 8 9 109i=00

  • Anlisis de AlgoritmosUsualmente el anlisis de un algoritmo incluye: Un caso medio Un caso pesimista Un caso optimistaque tan cerca al caso promedio trabaja el algoritmo, Notacin (theta)peor casomejor casoNotacin O (big-oh)Notacin (big-omega)Nosotros trabajaremos con el TA(n) en el peor de los casos (O), ya que es mucho ms fcil definir cul es el peor de los casos, que considerarlos todos o incluso que considerar el caso promedio.TA(n)=tiempo que se demora el algoritmo A, en el peor de los casos, para encontrar una solucin a un problema de tamao n.Introduccin

  • Anlisis de AlgoritmosConcepto de complejidad:Es tratar de encontrar un funcin f(n), que acote el crecimiento de la funcin tiempo, para poder decir:Que en ningn caso TA(n) se comporta peor que f al aumentar el tamao del problema.As sea T(n) el tiempo de ejecucin de algn programa, medido por una funcin de la entrada de tamao n, esta funcin supondr que:

    El argumento n es un entero no negativoT(n) es no negativo para todos los argumentos nComplejidadTA (n) es un O(f(n)), ledo como O de f(n), si existe una constante positiva c, tales que, TA(n)

  • nAnlisis de AlgoritmosAl afirmar que un algoritmo es O (f(n)), se est diciendo que al aumentar el nmero de datos que debe procesar, el tiempo del algoritmo va a crecer a como crece f en relacin a nComplejidadTA(n) ms comunes

    O(1)constanteO(log n)logartmicoO(n)linealO(n log n)Casi-lineal

    O(n2)cuadrticoO(na)Polinomial a>2O(an)Exponencial, a>2O(n!)factorial

  • ComplejidadAnlisis de Algoritmos O(n) es mas eficiente que el O(n2) O(log n) es mas rpido que O(n log n) y a su vez es mas rpido que O(n2)

    O(1)Significa que la mayora de las instrucciones se ejecutan una vez o muy pocas

    O(log n)El programa es ms lento cuanto ms crezca N,

    O(n2)Suele ser habitual cuando se tratan pares de elementos de datos, como por ejemplo un bucle anidado doble. Si N se duplica, el tiempo de ejecucin aumenta cuatro veces.

  • Anlisis de Algoritmos

    Logaritmo de un numero: Es el exponente a que hay que elevar otro nmero llamado base para obtener el numero dadoBase: cualquier numero positivo

    5=15=55=255=125

    Siendo la base el 5 el logaritmo de

    Log 1 es 0 , y cero es el exponente al que hay que elevar la base 5Log 5 es 1Log 25 es 2

    Logaritmo

  • Los algoritmos de tipo polinmico (O(n)) no son una maravilla, y se enfrentan con dificultad a problemas de tamao creciente. Mientras complejidades del orden O(n2) y O(n3) suelen ser efectivamente abordables, prcticamente nadie acepta algoritmos de orden O(n100), por muy polinmicos que sean. ComplejidadAnlisis de Algoritmos

  • Aritmtica en notacin OAnlisis de AlgoritmosPara facilitar el clculo de la complejidad de un algoritmo es necesario desarrollar aritmtica en notacin O, de tal manera que sea posible dividir el algoritmo y, a partir del estudio de sus partes, establecer el clculo global.Teorema 1:Si TA(n) es O( k f(n) ) TA(n) es O( f(n) ) Este teorema expresa una de las bases del anlisis de algoritmos: lo importante no es el valor exacto de la funcin que ocota el tiempo, sino su forma. Esto permite eliminar todos los Factores constantes de la funcin cota.Ejemplo: un algoritmo que es O(2n) tambin es O(n)un algoritmo que es O(6n2+2) tambin es O(n2)un algoritmo que es O(5+3n+2) tambin es O(n)

  • Aritmtica en notacin OAnlisis de AlgoritmosTeorema 2:Si A1 y A2 son segmentos de un algoritmo, tales que TA1(n) es O(f1(n)) y TA2(n) es O(f2(n)), el tiempo empleado para ejecutarse A1 seguido de A2 es O(max(f1(n), f2(n))).Esto quiere decir que la complejidad del programa resultante es igual a la complejidad del bloque ms costoso.Ejemplo:a=1;b=1;c=1;O(1)Una asignacin que no tiene llamadas a funciones se ejecuta en un tiempo constante, sin depender del nmero de datos del problema.TA(n) es O(max(1,1,1))

  • Aritmtica en notacin OAnlisis de AlgoritmosTeorema 3Sea A un algoritmo que se forma:Tal que TA2 es O(f2(n)) y TA1 es O(f1(n)),

  • Aritmtica en notacin OAnlisis de Algoritmosfor(i=0; i
  • El tiempo de ejecucin va a depender, del tamao del N.Aritmtica en notacin OAnlisis de AlgoritmosSi el tamao N aparece como lmite de iteraciones ... for (int i= 0; i < N; i++) { algo_de_O(1) }N * O(1) = O(n)for (int i= 0; i < N; i++) { for (int j= 0; j < N; j++) { algo_de_O(1) } } N * N * O(1) =O(n2)Ciclos anidadosfor (int i= 0; i < N; i++) { for (int j= 0; j < M; j++) { algo_de_O(1) } } N * M * O(1) =O(n*m)

  • for (int i= 0; i < N; i++) { for (int j= 0; j < i; j++) { algo_de_O(1) }} el bucle exterior se realiza N veces, mientras que el interior se realiza 1, 2, 3, ... N veces respectivamente. En total, 1 + 2 + 3 + ... + N = N*(N+1)/2 -> O(n2) El caso peor es cuando j se ejecuta N vecesAritmtica en notacin OAnlisis de Algoritmos

  • Bucles con la variable de control no lineal (while)c= 1;while (c < N) { algo_de_O(1) c= 2*c;} El valor inicial de c es 1. Al final del ciclo c tiene el valor de 2k donde k es el nmero de iteracionesEl nmero de iteraciones es tal que 2k k Log2 (N)Y por tanto la complejidad del bucle es O(log n)El problema se reduce a encontrar una funcin que acote el nmero de iteraciones del ciclo, ya que nunca va entrar n veces al ciclo.Pero dado que en cada iteracin se reduce 2*c, es mejor como cota del nmero de iteraciones una funcin 2k.Aritmtica en notacin OAnlisis de AlgoritmosA 4 iteracionesIteraccion1 c = 2*1 = 2Iteraccion2 c = 2*2 = 4Iteraccion3 c = 2*4 = 8Iteraccion4 c = 2*8 = 16BASE =2 LOG 4 = 16

  • Aritmtica en notacin OAnlisis de AlgoritmosifEl tiempo de ejecucin del if se puede acotar con el tiempo de evaluacin de la condicin y el tiempo de ejecucin ms demorado (de la parte cierta o parte falsa) de la estructura condicional. If (n
  • int Buscar(int [] a, int c){ int j; j=0; WHILE (j < n && a[j]< c) { j=j+1; } if ( j < n ) return j; else return -1; }Tiempo de ejecucinCalcular la complejidad:

    Anlisis de AlgoritmosTA(n)=O(max(1,n,1)=O(n)

  • int Buscar(int [] a, int c){ int j; j=0; (* 1 *) WHILE (a[j]< c && j < n) (* 2 *) { j=j+1; (* 3 *) } if ( a[j]==c ) (* 5 *) return j; (* 6 *) else return -1; (* 7 *)}Para determinar el tiempo de ejecucin, calcularemos primero el nmero de operaciones elementales (OE) que se realizan: En la lnea (1) se ejecuta 1 OE (una asignacin). En la lnea (2) se efecta la condicin del bucle, con un total de 4 OE (dos comparaciones, un acceso al vector, y un &&). La lnea (3) est compuesta por un incremento y una asignacin (2 OE). La lnea (5) est formada por una condicin y un acceso al vector (2 OE). La lnea (6) contiene un RETURN (1 OE) si la condicin se cumple. La lnea (7) contiene un RETURN (1 OE), cuando la condicin del IF anterior es falsa.Tiempo de ejecucin, calculando el numer de operacionesAnlisis de Algoritmos

  • En el caso peor:Tiempo de ejecucinAnlisis de Algoritmos se efecta la lnea (1), el bucle se repite n veces hasta que se cumple la segunda condicin, despus se efecta la condicin de la lnea (5) y el mtodo acaba al ejecutarse la lnea (7). Cada iteracin del bucle est compuesta por las lneas (2) y (3), junto con una ejecucin adicional de la lnea (2) que es la que ocasiona la salida del bucle. Por tanto el tiempo de ejecucin es:

    adicional nT(n) = 1+ (( (4 + 2) +4 ) +2 + 1 = 1+4n+2n+4+2+1 =6n+8=O(n) i=1

  • Tiempo de ejecucin: calcular la complejidad directa y con operaciones OEAnlisis de Algoritmosfor( i=0; i
  • Tiempo de ejecucinAnlisis de Algoritmosint PosMenor(int vec[ ], int desde, int N) { int i,menor=desde; for(i=desde+1 ; i
  • void ordenar(int vec[], int N){ int i, temp, pos; for(i=0 ; i< N-1 ; i++) { pos=PosMenor(vec,i,N); temp=vec[i]; vec[i]=vec[j]; vec[j]=temp; }}Tiempo de ejecucinAnlisis de AlgoritmosO(max(n,1,1,1)) = O(n)N*O(n)=O(n2)i=1nTA(n)=1+(4+ 1+(1+2+ (3+3+1)+3+1) + 5)+4=i=1nTA(n)=1+ (4+1+( 7n + 7)+5)+4=i=1n= 7n2+17n+5=O(n2)Llamada posmenor1+4n+n+7n2+7n+5n+4

  • Tiempo de ejecucinAnlisis de AlgoritmosCalcular la complejidad del siguiente mtodo ( n es un entero positivo).void misterio (int N){ int k,i; i=1; while (k
  • Tiempo de ejecucinAnlisis de AlgoritmosCalcular la complejidad del siguiente mtodo ( n es un entero positivo).void misterio (int N){ int k,i; i=1; while (k
  • Calcular la complejidad del siguiente mtodo ( n es un entero positivo).void misterio (int N){ int k,i,t; i=1; while (i
  • Calcular la complejidad del siguiente mtodo ( n es un entero positivo).void misterio (int N){ int k,i,t; i=1; O(1) while (i
  • Complejidad en espacioAnlisis de AlgoritmosEl clculo de la complejidad en espacio de un algoritmo es un proceso sencillo que se realiza mediante el estudio de las estructuras de datos y su relacin con el tamao del problema.Decir que un programa es de O(n) en espacio significa que sus requerimientos de memoria aumentan proporcionalmente con el tamao del problema.Ejemplo: int v []=new int[N];Para un programa con complejidad O(n2) en espacio, la cantidad de memoria que se necesita para almacenar lo datos crece con el cuadrado del tamao del problema.Ejemplo: int v []=new int[N*N];

  • Seleccin de un algoritmoAnlisis de AlgoritmosFactores que se deben tener en cuenta para la seleccin de un algoritmo: La complejidad en tiempo del algoritmoEs una primera medida de calidad, y establece su comportamiento cuando el nmero de datos a procesar es muy grande. La complejidad en espacio del algoritmoEs una medida de la cantidad de espacio que necesita el algoritmo para representar la informacin. Slo cuando esa complejidad resulta razonable es posible utilizar este algoritmo con seguridad. Si las necesidades de memoria crecen desmesuradamente con respecto al tamao del problema, el rango de utilidad del algoritmo es bajo y se debe descartar.

  • Seleccin de un algoritmoAnlisis de Algoritmos El valor de la constante asociada con la funcin de complejidadSi hay dos algoritmos A1 y A2 de complejidad O(f(n)), el estudio de la funcin cota debe de hacerse de una manera ms profunda y precisa en ambos casos, para tratar de establecer la que tanga menos constantes.

  • Seleccin De Un AlgoritmoUna de las caractersticas primordiales en la seleccin de un algoritmo es que este sea sencillo de entender calcular codificar y depurar, as mismo que utilice eficientemente los recursos del ordenador y se ejecute con la mayor rapidez posible con un eficaz uso de memoria dinmica y esttica. Tambin para seleccionar correctamente el mejor algoritmo es necesario realizar estas preguntas: Qu grado de orden tendr la informacin que vas a manejar? Si la informacin va a estar casi ordenada y no quieres complicarte, un algoritmo sencillo como el ordenamiento burbuja ser suficiente. Si por el contrario los datos van a estar muy desordenados, un algoritmo poderoso como Quicksort puede ser el ms indicado. Y si no puedes hacer una presuncin sobre el grado de orden de la informacin, lo mejor ser elegir un algoritmo que se comporte de manera similar en cualquiera de estos dos casos extremos.

  • Qu cantidad de datos vas a manipular? Si la cantidad es pequea, no es necesario utilizar un algoritmo complejo, y es preferible uno de fcil implementacin. Una cantidad muy grande puede hacer prohibitivo utilizar un algoritmo que requiera de mucha memoria adicional. Qu tipo de datos quieres ordenar? Algunos algoritmos slo funcionan con un tipo especfico de datos (enteros, enteros positivos, etc.) y otros son generales, es decir, aplicables a cualquier tipo de dato. Qu tamao tienen los registros de tu lista? Algunos algoritmos realizan mltiples intercambios (burbuja, insercin). Si los registros son de gran tamao estos intercambios son ms lentos.