Professional Documents
Culture Documents
BITCORA 8B
Un algoritmo es una sucesin finita de instrucciones precisas, para realizar una tarea. Tal que, cada instruccin es clara y no ambigua, ejecutable en un tiempo finito. La sucesin de la secuencia de pasos est claramente definida. Y por ltimo, el proceso termina en un nmero finito de pasos. PROPIEDADES DE UN ALGORITMO Input: Datos de entrada. (Son elementos de un conjunto especificado) Output: Datos de salida. (Son los valores de salida) Definicin: Pasos definidos con precisin. Correccin: Salidas correctas para cada conjunto de valores de entrada. Duracin finita: Proceso finito para cualquier conjunto de valores de entrada. Efectividad: Exactitud en los pasos del algoritmo, y que se efecte en un intervalo finito de tiempo. Generalidad: El procedimiento, el algoritmo debe ser aplicable a todos los problemas.
Algoritmos de bsqueda
Lineal o secuencial:
Bsqueda elemento por elemento para encontrar el valor. {1,2,3,5,6,7,8,10,12,13,15,16,18,19,20,22} Buscar el nmero 19Divide la sucesin de nmeros cogiendo el valor ms alto y atendiendo a 19>X siendo X el valor ms alto.
Binaria:
David Chaves Fraga Aleixo Cambeiro Barreiro Complejidad de algoritmos La complejidad de un algoritmo puede medirse respecto a dos parmetros: el tiempo y el espacio. -Complejidad en tiempo (tiempo que tarda en ser ejecutado): 1.- Complejidad del mximo de una sucesin de nmeros enteros: Se van comparando los trminos de dos en dos y se asigna de cada vez el mximo provisional al mayor, hasta que no quede ninguno por comparar. Esto significa que se haran operaciones en total. n entradas Complejidad O(n)
2.- Complejidad de la bsqueda lineal: Se compara x con los elementos de la lista y se comprueba si es el ltimo elemento de la lista. sera, por lo tanto, el nmero total de operaciones. n entradas Complejidad O(n)
3.- Complejidad de la bsqueda binaria: Suponemos que en la lista de n elementos, (lo que quiere decir que ). Por cada particin se daran dos pasos, que son el de dividir en dos la lista y el de comparar, lo que quiere decir que ser el nmero total de operaciones realizadas. n entradas Complejidad O( ) , pero
Desde el punto de vista computacional, las funciones tienen que ser trabajaremos con . Definicin: Sean f, g: | | que: |
. Se dice que f es O(g(x)) si existen dos constantes c y k tales | siempre que . Por ejemplo: es O( | | | )
| siempre que
David Chaves Fraga Aleixo Cambeiro Barreiro Lo explicaremos con un ejemplo: Si tomamos f(x)= resultado obtenido es: | grfica: | | , necesitamos encontrar un c y un k tal que x>k. El | para
y = x2
Polinomios de grado n:
es O(
Tabla de complejidad de los algoritmos: O(1) O( O(n) O( O( O( ) ) ) ) Complejidad constante Complejidad logartmica Complejidad lineal polinmica de grado uno Complejidad Complejidad polinmica de grado b (siempre que Complejidad exponencial Complejidad factorial )
O( )
11/10/11
BITCORA 9
MATEMTICA DISCRETA
n la clase de hoy nos vamos a centrar en la complejidad de algoritmos, mirando especialmente en una de sus dos partes ms importantes (tiempo y espacio), la complejidad temporal. Explicando algunos de los diferentes tipos de complejidad que nos podemos encontrar. As como tambin hablaremos sobre el crecimiento de funciones. COMPLEJIDAD DE ALGORITMOS Para estudiar la complejidad en tiempo de los algoritmos debemos ponernos siempre en el peor de los casos posibles, pese a que existan tambin otro tipo de estudios de la complejidad como el promedio. Ejemplos: Vamos a estudiar la complejidad de los tres algoritmos vistos en la clase anterior, es decir, mximo de una sucesin de enteros, bsqueda lineal y bsqueda binaria. 1. Mximo de una sucesin de enteros max(a1,,an) max:=a1 Para i = 2 hasta n Si max <ai, entonces max:= ai. En este caso se hacen 2(n-1)+1 operaciones, o lo que es igual 2n 1. Por lo tanto la complejidad de este algoritmo ser lineal. n entradas ------------------------------------> 2n-1 ------------------------------------------> O(n) 2. Bsqueda lineal busca linear (x; a1,, an) i:= 1 mientras i n y x ai i=i+1 Si i n, entonces pos:= i en otro caso pos:=0 En este segundo caso se hacen 2n+2 comparaciones en el peor de los casos, en el mejor solo se haran 3. La complejidad de este algoritmo vuelve a ser lineal. n entradas ------------------------------------> 2n+2 ------------------------------------------> O(n)
11/10/11
K pasos en total
Por cada clculo del punto intermedio se hacen dos operaciones: comparar y dividir. Al finalizar la ejecucin se habrn hecho 2K+ 2 operaciones. La complejidad de este ultimo algoritmo es una potencia de dos n = 2K => log2n = K, es decir la complejidad ser logartmica. n entradas ------------------------------> 2K + 2 => (2log2n + 2) ------------------------------------> O(log n)
CRECIMIENTO DE FUNCIONES Sean f y g dos funciones del conjunto de los enteros o de los reales en el conjunto de los nmeros reales. Decimos que f(x) es O(g(x)) si existen dos constantes C y k tales que |f(x)| C |g(x)| siempre que x > k (Esto se puede leer como f(x) es O mayscula de g(x) o f(x) es una O mayscula de g(x)).
Ejemplo: Comprobar que f(x) = x2 + 2x + 1 es O(x2) |x2 + 2x + 1| C |x2| |x2+2x+1| 4 x2 x>1 x2 es O(x2+2x+1) La parte de la grfica de f(x)=x2 + 2x + 1 que satisface f(x) < 4x2 se muestra ms gruesa.
x>k
Orden de complejidad para polinomios de grado n Para un polinomio f(x)=an xn + an-1 xn-1 + ... + a1 x + a0 f es O(xn). La complejidad de un polinomio viene determinada por el exponente de mayor grado. O(xn) para un polinomio de orden n.
11/10/11
Grfica del crecimiento de las funciones utilizadas comnmente en las estimaciones con la notacin O.
Tabla de complejidad de algoritmos O(1) O(log(n)) O(n) O(n*log(n)) O(nb) (b>1) O(bn) O(n!) -> -> -> -> -> -> -> Complejidad constante Complejidad logartmica Complejidad polinmica de grado 1 o lineal Complejidad sublineal Complejidad polinmica de grado b Complejidad exponencial Complejidad factorial
Hasta complejidad polinmica un algoritmo es eficiente temporalmente. Los algoritmos con complejidad exponencial o factorial son demasiado costosos temporalmente como se refleja en la siguiente grfica. NOTA: Los tipos de complejidad superiores a la lnea son los que podemos calcular actualmente con los ordenadores existentes.