Вы находитесь на странице: 1из 6

PEDRO TALLÓN CASTRO SERGIO SUÁREZ LIÑARES

BITÁCORA 8B

Un algoritmo es una sucesión finita de instrucciones precisas, para realizar una tarea. Tal que, cada instrucción es clara y no ambigua, ejecutable en un tiempo finito. La sucesión de la secuencia de pasos está claramente definida. Y por último, el proceso termina en un número 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) Definición: Pasos definidos con precisión. Corrección: Salidas correctas para cada conjunto de valores de entrada. Duración finita: Proceso finito para cualquier conjunto de valores de entrada. Efectividad: Exactitud en los pasos del algoritmo, y que se efectúe en un intervalo finito de tiempo. Generalidad: El procedimiento, el algoritmo debe ser aplicable a todos los problemas.

Ejemplo:

Algoritmo en Maple para el cálculo del máximo:

Algoritmos de búsqueda

Lineal o secuencial:

Búsqueda elemento por elemento para encontrar el valor.

 

{1,2,3,5,6,7,8,10,12,13,15,16,18,19,20,22}

Binaria:

Buscar el número 19Divide la sucesión de números cogiendo el valor más alto y atendiendo a 19>X siendo X el valor más alto.

Ejemplo de algoritmo de búsqueda binaria:

Buscar el número 19 en esta sucesión de números:

19=19
19=19

{1,2,3,5,6,7,8,10]12,13,15,16]18,19]20,22}

19>10 19>16
19>10
19>16

David Chaves Fraga Aleixo Cambeiro Barreiro

Complejidad de algoritmos

·La complejidad de un algoritmo puede medirse respecto a dos parámetros: el tiempo y el espacio.

-Complejidad en tiempo (tiempo que tarda en ser ejecutado):

1.- Complejidad del máximo de una sucesión de números enteros:

Se van comparando los términos

de dos en dos y se asigna de

cada vez el máximo provisional al mayor, hasta que no quede ninguno por comparar.

Esto significa que se harían

operaciones en total.

n entradas

Complejidad

O(n)

2.- Complejidad de la búsqueda lineal:

Se compara x con los elementos es el último elemento de la lista. operaciones.

de la lista y se comprueba si sería, por lo tanto, el número total de

n entradas

Complejidad

O(n)

3.- Complejidad de la búsqueda binaria:

Suponemos que en la lista

de n elementos,

(lo que

quiere decir que

dividir en dos la lista y el de comparar, lo que quiere decir que

total de operaciones realizadas.

). Por cada partición se darían dos pasos, que son el de

será el número

n entradas

Complejidad

O(

)

·Desde el punto de vista computacional, las funciones tienen que ser

trabajaremos con

.

Definición:

, pero

que: |

Sean f, g:

|

|

. Se dice que f es O(g(x)) si existen dos constantes c y k tales

| siempre que

|

. Por ejemplo:

|

|

es O(

)

| siempre que

Lo explicaremos con un ejemplo:

David Chaves Fraga Aleixo Cambeiro Barreiro

Si tomamos f(x)= resultado obtenido es:

, necesitamos encontrar un c y un k tal que x>k. El

gráfica:

| | | | para ; que se puede comprobar en la siguiente 120 100
| |
|
|
para
; que se puede comprobar en la siguiente
120
100
y
= 4x 2
80
60
y
= x 2 + 2x + 1
40
20
y = x 2
0
-2
-1
0
1
2
3
4
5
6

·Polinomios de grado n:

es O(

) Esta función tiene complejidad de grado n.

·Tabla de complejidad de los algoritmos:

O(1)

Complejidad constante

O(

)

Complejidad logarítmica

O(n)

Complejidad lineal polinómica de grado uno

O(

)

Complejidad

O(

)

Complejidad polinómica de grado b (siempre que

)

O(

)

Complejidad exponencial

O(

)

Complejidad factorial

BITÁCORA 9

MATEMÁTICA DISCRETA

BITÁCORA. MATEMÁTICA DISCRETA Ricardo García. Ángel García

11/10/11

E n la clase de hoy nos vamos a centrar en la complejidad de algoritmos, mirando especialmente en una de sus dos partes más importantes (tiempo y espacio), la complejidad temporal. Explicando algunos de los diferentes tipos de complejidad que

nos podemos encontrar. Así como también 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 también 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, máximo de una sucesión de enteros, búsqueda lineal y búsqueda binaria.

1. Máximo de una sucesión de enteros

max(a 1 ,…,a n ) max:=a 1 Para i = 2 hasta n Si max <a i , entonces max:= a i.

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. Búsqueda lineal

busca linear (x; a 1 ,…, a n ) i:= 1 mientras i

i = i + 1 Si i

n y x

a 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 harían 3. La complejidad de este algoritmo vuelve a ser lineal.

n entradas ------------------------------------> 2n+2 ------------------------------------------> O(n)

1

3. Búsqueda binaria

busca binaria (x; a 1 ,…,a n ) .

a 1 .

.

.

|

.

.

.

.

.

.

.

.

.

.

.

.

.

2 k-1

2 k-1

.

.

. a n

K pasos en total

BITÁCORA. MATEMÁTICA DISCRETA Ricardo García. Ángel García

11/10/11

Por cada cálculo del punto intermedio se hacen dos operaciones: comparar y dividir. Al finalizar la ejecución se habrán hecho 2K+ 2 operaciones. La complejidad de este ultimo algoritmo es una potencia de dos n = 2 K => log 2 n = K, es decir la complejidad será logarítmica.

n entradas ------------------------------> 2K + 2 => (2·log 2 n + 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 números 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 mayúscula de g(x)” o “f(x) es una O mayúscula de g(x)”).

Ejemplo:

Comprobar que f(x) = x 2 + 2x + 1 es O(x 2 )

|x2 + 2x + 1| |x 2 +2x+1| ≤ 4 x 2

C |x 2 |

x>1

x 2 es O(x 2 +2x+1)

x > k

La parte de la gráfica de f(x)=x 2 + 2x + 1 que satisface f(x) < 4x 2 se muestra más gruesa.

que satisface f(x) < 4x 2 se muestra más gruesa. Orden de complejidad para polinomios de

Orden de complejidad para polinomios de grado n

Para un polinomio f(x)=a n x n + a n-1 x n-1 +

viene determinada por el exponente de mayor grado. O(x n ) para un polinomio de orden n.

+ a 1 x + a 0

f es O(x n ). La complejidad de un polinomio

2

BITÁCORA. MATEMÁTICA DISCRETA Ricardo García. Ángel García

11/10/11

DISCRETA Ricardo García. Ángel García 11/10/11 Gráfica del crecimiento de las funciones utilizadas

Gráfica del crecimiento de las funciones utilizadas comúnmente en las estimaciones con la notación O.

Tabla de complejidad de algoritmos

O(1)

->

Complejidad constante Complejidad logarítmica Complejidad polinómica de grado 1 o lineal Complejidad sublineal Complejidad polinómica de grado b

O(log(n)) O(n) O(n*log(n)) O(n b ) (b>1)

->

->

->

->

O(b n ) O(n!)

->

Complejidad exponencial Complejidad factorial

->

Hasta complejidad polinómica un algoritmo es eficiente temporalmente. Los algoritmos con complejidad exponencial o factorial son demasiado costosos temporalmente como se refleja en la siguiente gráfica.

NOTA:

actualmente con los ordenadores existentes.

Los

tipos

de

complejidad

superiores

3

a

la

línea

son

los

que

podemos

calcular