Sunteți pe pagina 1din 6

Nombre: Arcos Cevallos Eric Materia: Estructura de Datos

Tecnologías de la Información

ALGORITMOS

ANALISIS DE COMPLEJIDAD

Cuando se analiza y compara el desempeño de diferentes algoritmos, se presta una


especial atención al tiempo de corrida del algoritmo. El tiempo de corrida de un algoritmo,
se entiende como el tiempo que le toma al algoritmo calcular el resultado a partir de los
datos de entrada.

¿Por qué es importante el tiempo de corrida de un algoritmo? Porque si conocemos o al


menos tenemos una idea del tiempo de corrida de un algoritmo podemos saber que tanto
va a tardar en entregarnos la respuesta, y podemos decidir, si la esperamos, nos vamos a
tomar un café o si mejor regresamos después de una semana.

Aunque las computadoras de hoy en día son muy rápidas comparadas con sus similares de
hace algunos años, y son capaces de llevar a cabo millones de operaciones en un segundo,
resulta fácil encontrar ejemplos de problemas y soluciones que tardarían años en
solucionarse.

Tmezcla = 50 = 135,000,000,000 3 horas con 45 minutos.

ORDENACION POR INSERCION

La ordenación por inserción es un algoritmo eficiente para ordenar pequeñas cantidades


de elementos. La ordenación por inserción funciona de la misma manera que la mayoria
de las personas ordena una mano de barajas. Entonces vamos recogiendo una a una las
barajas de la mesa y las insertamos en la posición correcta en la mano izquierda. Para
encontrar la posición correcta, comparamos la nueva baraja con las que tenemos en la
mano, de derecha a izquierda.
Como se explicó en el primer párrafo la ordenación por inserción busca siempre tener
ordenada la parte izquierda del arreglo, e ir tomando uno a uno los elementos del lado
derecho para insertarlos en su posición. En la línea 1 del algoritmo, tenemos un ciclo que
irá moviendo j desde 2 hasta el número de elementos de A en este caso denotado por
Longitud. Cuando j sea igual a Longitud + 1 el algoritmo termina y tenemos que los
elementos en A están ordenados. Para que puedas apreciar mejor el funcionamiento de
este algoritmo te recomendamos seguirlo en papel con un arreglo de unos 5 números.

Para analizar un algoritmo, los pasos a seguir son básicamente 2, el primer paso es
asignar un costo computacional a cada línea del código, este costo computacional, que en
la tabla está representado por c1, c2, ... , c7, está determinada por la velocidad de la
máquina y la naturaleza de la función, por ejemplo una suma requiere menos tiempo que
una multiplicación. * La línea 1 se ejecuta una vez por cada índice del arreglo, esto es
desde 2 hasta Longitud+1 por lo que en total será ejecutado n veces, donde n es el
número total de elementos del arreglo. * Entramos ahora a las líneas 4, 5 y 6 del
algoritmo, estas líneas son las que se encargan de buscar la posición correcta del
elemento j. Si recordamos el funcionamiento del algoritmo, para cada índice j se recorre
la parte del arreglo ordenada de derecha a izquierda buscando su posición, en el
momento en que se encuentra su posición se termina el ciclo mientras.

Por lo tanto, la función f dependerá de cuantas comparaciones se tengan que hacer para
encontrar la posición del elemento j. En la teoría de la computación lo más importante es
el análisis del peor caso, este análisis busca cual sería el tiempo de corrida del algoritmo
con la peor entrada posible. Al obtener este tiempo, nos damos una idea de que es lo
más que puede llegar a tardar nuestro algoritmo. Para el caso de la ordenación por
inserción, puede verse que el peor caso posible es que la entrada estuviera ordenada en
orden inverso, es decir, de grande a chico y nosotros lo queremos ordenar de chico a
grande, ya que, en este caso, las líneas 4, 5, 6 se ejecutarían j-1 veces para cada índice.
Cuando se analizan algoritmos, en general sólo importa el término de la función que crece
más rápido, y se eliminan las constantes, por lo tanto, en el caso del ordenamiento por
inserción, el término que crece más rápido es el término cuadrático, por lo que se dice que
el ordenamiento por inserción tiene una complejidad de O.

EJEMPLOS

ORDENAMIENTO-INSERCION (A)
1    desde j:=2 hasta Longitud(A) haz inicio 
2        llave:=A[j]
3        i:=j - 1
4        mientras (i > 0) y (A[i] > llave) haz inicio
5            A[i + 1] := A[i]
6            i:=i - 1
7        fin-mientras
8        A[i + 1]:=llave
9    fin-desde

https://www.olimpiadadeinformatica.org.mx/omi/OMI/archivos/apuntes/AnalisisDeComplejidad.
htm

BUSQUEDA LINEAL

La búsqueda lineal o la búsqueda secuencial es un método para encontrar un valor


objetivo dentro de una lista. Esta comprueba secuencialmente cada elemento de la lista
para el valor objetivo hasta que es encontrado o hasta que todos los elementos hayan
sido comparados.

Búsqueda lineal es en tiempo el peor, y marca como máximo n comparaciones, donde n es


la longitud de la lista. Si la probabilidad de cada elemento para ser buscado es el mismo,
entonces la búsqueda lineal tiene una media de n/2 comparaciones, pero esta media
puede ser afectado si las probabilidades de búsqueda para cada elemento varían.

EJEMPLOS

Algoritmo básico
Dado una lista L de n elementos con valores o registros L0 ... Ln−1 y valor de objetivo T,
la subrutina siguiente utiliza búsqueda lineal para encontrar el índice del objetivo T en L.

1. Set i a 0.

2. Si Li = T, la búsqueda culmina exitosamente; retorna i.

3. Aumento i en 1.

4. Si i < n, regresar al paso 2. De otro modo, la búsqueda termina


insatisfactoriamente.
Con un valor centinela
El algoritmo anterior, realiza dos comparaciones por iteración: uno para comprobar si Li es
igual a t, y el otro para comprobar si i apunta a un índice válido de la lista. Añadiendo un
valor extra Ln a la lista (un valor centinela) que es igual al objetivo, la segunda
comparación puede ser eliminada hasta el fin de la búsqueda, haciendo el algoritmo más
rápido. La búsqueda encontrará el centinela si el objetivo no esté contenido dentro de la
lista.[4]

1. Set i a 0.

2. Si Li = T, ir al paso 4.

3. Aumento i en 1 e ir al paso 2.

4. Si i < n, la búsqueda termina exitosamente; retorna i. Sino la búsqueda culmina


insatisfactoriamente.

https://es.wikipedia.org/wiki/B%C3%BAsqueda_lineal
BUSQUEDA BINARIA

En ciencias de la computación y matemáticas, la búsqueda binaria, también conocida


como búsqueda de intervalo medio o búsqueda logarítmica, es un algoritmo de búsqueda
que encuentra la posición de un valor en un array ordenado. Compara el valor con el
elemento en el medio del array, si no son iguales, la mitad en la cual el valor no puede
estar es eliminada y la búsqueda continúa en la mitad restante hasta que el valor se
encuentre.

La búsqueda binaria requiere solamente O en espacio, es decir, que el espacio requerido


por el algoritmo es el mismo para cualquier cantidad de elementos en el array. Aunque
estructuras de datos especializadas en la búsqueda rápidas como las tablas hash pueden
ser más eficientes, la búsqueda binaria se aplica a un amplio rango de problemas de
búsqueda.

Existen numerosas variaciones de la búsqueda binaria.

EJEMPLOS

Dado un arreglo A de n elementos con valores A0 ... An−1, ordenados tal que A0 ≤ ... ≤ An−1, y
un valor buscado T, el siguiente procedimiento usa búsqueda binaria para encontrar el
índice de T en A.

1. Asignar 0 a L y a R (n − 1).

2. Si L > R, la búsqueda termina sin encontrar el valor.

3. Sea m (la posición del elemento del medio) igual a la parte entera de (L + R) / 2.

4. Si Am < T, igualar L a m + 1 e ir al paso 2.

5. Si Am > T, igualar R a m – 1 e ir al paso 2.

6. Si Am = T, la búsqueda terminó, retornar m.


Este procedimiento iterativo mantiene los límites de la búsqueda mediante dos variables.
Algunas implementaciones realizan la comparación de igualdad al final del algoritmo,
como resultando se obtiene un ciclo más rápido de comparaciones, pero se aumenta en
uno la cantidad de iteraciones promedio.
https://es.wikipedia.org/wiki/B%C3%BAsqueda_binaria#:~:text=En%20ciencias%20de%20la
%20computaci%C3%B3n,valor%20en%20un%20array%20ordenado.

S-ar putea să vă placă și