Está en la página 1de 5

Universidad Autónoma de Querétaro

Facultad de Informática

“DEFINICION DE ALGORITMICA. INVESTIGAR


UN ALGORITMO Y EXPLICARLO.”

Unidad de aprendizaje: Paradigmas de Programación

Alumno: Bautista Flores Hugo Elias

Expediente: 244602

Profesor: José Alfredo Acuña García

Fecha de entrega: 03/Febrero/2020


Algorítmica
La algorítmica estudia los algoritmos, sus propiedades y su eficiencia. El
algorítmica tiene como objetivo el desarrollo de métodos y técnicas para el diseño
de algoritmos y estructuras de datos (EDs) eficientes y su análisis, así como el
desarrollo de algoritmos y EDs que resuelvan problemas concretos. Tras un breve
repaso de conceptos y técnicas algorítmicas básicas ya conocidas, se estudian
nuevas técnicas de diseño algorítmico como el método voraz (greedy method), la
programación dinámica, los flujos sobre redes, la programación lineal y la
aleatorización.
Cada una de las técnicas de diseño y análisis estudiadas se ilustra con ejemplos
concretos, muchos de ellos algoritmos y EDs de gran trascendencia práctica como
el algoritmo de Dijkstra para el cálculo de caminos mínimos en un grafo, el
algoritmo de cálculo de la distancia de edición entre dos strings, el test de
primalidad de Rabin o el algoritmo de Ford-Fulkerson para encontrar el flujo
óptimo sobre una red.

Algoritmo
En Matemática, ciencias de la Computación y disciplinas relacionadas, un
algoritmo es un conjunto reescrito de instrucciones o reglas bien definidas,
ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos
que no generen dudas a quien lo ejecute. Dados un estado inicial y una entrada,
siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución.
Los algoritmos son objeto de estudio de la algoritmia.
Algoritmo QuickSort
Este algoritmo se basa en el principio de divide y conquistarás. Resulta más fácil
ordenar listas pequeñas que una grande, con lo cual irá descomponiendo la lista
en dos partes y ordenando esas partes.
Para ésto utiliza la recursividad.

• Dada una lista, elegir uno de sus elementos, que llamamos pivot
• Dividir la lista en dos sublistas:
▪ una con los elementos "menores"
▪ otra con los elementos "mayores"
• Ordenar recursívamente ambas sublistas
• Armar la lista resultado como: menoresOrdenados + pivot +
mayoresOrdenados
Vamos a ver más adelante que la elección del pivot y el orden con el que venga ya
de entrada la linea podrá afectar la eficiencia del algoritmo. En principio el
algoritmo no especifica cómo elegir el pivot.

Ejemplo Paso a Paso


Veamos un ejemplo para ordenar la siguiente lista:

En nuestro ejemplo vamos a seleccionar el primer elemento de la lista como el


pivot.
Veamos entonces, paso a paso se va a ir formando este árbol de llamados
recursivos. En rojo mostramos el pivot. A izquierda las sublistas menores, y a la
derecha la de los mayores.
En verde están los nodos "caso base", es decir lista de un único elemento o bien
lista vacía.
Entonces estos nodos se van a resolver fácil y se van a concatenar con los pivots
de arriba. Así empezamos a volver en los llamados recursivos.

Si sacamos las listas originales de cada nodo y solo dejamos los pivots, queda
más claro:

Ya tenemos todo el tercer nivel resuelto así que cada par va a retornar para
concatenarse entre sí con el pivot en el medio.

Ya casi estamos. Tenemos dos listas ordenadas, la de los menores y la de los


mayores, y el primer pivot. Concatenamos y eso nos da el resultado final:
Implementación en Python

def particion(arr, low, high):


i = (low - 1)
pivote = arr[high]

for j in range(low, high):

if arr[j] <= pivote:

i = i + 1
arr[i], arr[j] = arr[j], arr[i]

arr[i + 1], arr[high] = arr[high], arr[i + 1]


return (i + 1)

# Funcion
def quickSort(arr, low, high):
if low < high:
pi = particion(arr, low, high)

quickSort(arr, low, pi - 1)
quickSort(arr, pi + 1, high)

arr = [18, 7, 8, 2, 16, 5]


n = len(arr)
quickSort(arr,0,n-1)
print ("Sorted array is:")
for i in range(n):
print ("%d" %arr[i]),

Bibliografía
Fundamentos de Algoritmia, G. Brassard y P. Bratley. (ISBN 848966000)
The Art of Computer Programming, Knuth, D. E. [quien fue también, el creador del
TeX]
Introduction to Algorithms (2nd ed), Cormen, T. H., Leiserson, C. E., Rivest, R. L. y
Stein, C.
Introduction to Algorithms. A Creative Approach, Mamber, U.

También podría gustarte