Fundamental 2
Fundamental 2
Fundamental 2
Algoritmos Computacionales
Semestre: Enero-Junio
19/03/23
1
Indicé
Introducción. 3
Algoritmos recursivos. 4
Las pilas 4
Las listas 7
Las colas 9
Ejemplos de pilas colas y listas 10
Conclusión 12
Bibliografía. 13
2
Introducción
3
Algoritmos recursivos.
LAS PILAS
Una pila es una estructura de datos estructura de entradas ordenadas tales
que solo se introduce y elimina por un extremo llamado cima o tope.
Una estructura de datos tipo pila permite agregar nodos a la pila y eliminarlos
de esta sólo desde su parte superior. Por esta razón, a una pila se le conoce como
estructura de datos UEPS (último en entrar, primero en salir) o LIFO (Last-Input, First
Output).
4
Por ejemplo: Una pila de libros que se exhiben en una librería o una pila de
platos. Es de suponer que, si el cocinero necesita un plato limpio, tomará el que está
encima de todos, que es el último que se colocó en la pila.
CARACTERISTICAS:
Una pila cuenta con 2 operaciones imprescindibles: apilar y desapilar, a las que
em las implementaciones modernas de las pilas se suelen añadir más de uso habitual
• Las pilas son estructuras de datos lineales, como los arreglos, ya que los
componentes ocupan lugares sucesivos en la estructura y cada uno de ellos
tiene un único sucesor y un único predecesor, con excepción del último y del
primero, respectivamente.
• Una pila se define formalmente como una colección de datos a los cuales se
puede acceder mediante un extremo, que se conoce generalmente como tope.
Las pilas no son estructuras fundamentales de datos.
• Para su representación requieren el uso de otras estructuras de datos, como
arreglos o listas.
VENTAJAS
• El algoritmo de ordenamiento de pila es muy eficiente, esto sugiere que el
ordenamiento de pila es particularmente adecuado para ordenar una lista
grande de elementos.
5
• El algoritmo de ordenamiento de pila es más simple de entender que otros
algoritmos de ordenamiento igualmente eficientes.
• El algoritmo de ordenamiento de pila es de rendimiento consistente. Esto
significa que tiene un rendimiento igualmente bueno en los mejores y peores
casos, es particularmente adecuado su uso en sistemas en los que el tiempo
de respuesta es crítico.
DESVENTAJAS
La creación de demasiados objetos en la pila puede aumentar el riesgo de
desbordamiento de la pila. El acceso aleatorio no es posible. El almacenamiento de
variables se sobrescribirá, lo que a veces conduce a un comportamiento indefinido de
la función o el programa.
6
Las Listas
¿Qué es una lista?
Una lista es una enumeración de cosas,
personas, cantidades, entre otras cosas, que se
realiza o confecciona con un determinado propósito.
Con esta explicación queda claro que es es
una estructura de datos que se utiliza para almacenar
y manipular una colección de elementos en una
secuencia ordenada.
CARACTERISTICAS:
Las listas son una estructura de datos común
en la programación y tienen varias características
distintivas que las hacen útiles en diferentes
situaciones. Algunas de las características de las
listas son las siguientes:
• Secuencia ordenada: Los elementos de una lista se almacenan en una secuencia
ordenada, lo que significa que cada elemento tiene un índice único que lo identifica
y se puede acceder a él utilizando este índice.
• Mutable: Las listas son estructuras de datos mutables, lo que significa que se
pueden agregar, eliminar o modificar elementos de la lista en cualquier momento.
• Heterogéneas: Las listas pueden contener elementos de diferentes tipos de datos,
como enteros, cadenas de texto, booleanos y otros objetos.
• Iterables: Las listas son iterables, lo que significa que se pueden recorrer
fácilmente utilizando un bucle for y realizar operaciones en cada uno de sus
elementos.
• Almacenamiento dinámico: Las listas pueden cambiar su tamaño de manera
dinámica, lo que significa que se pueden agregar o eliminar elementos en
cualquier momento sin tener que preocuparse por el tamaño de la lista.
• Métodos integrados: La mayoría de los lenguajes de programación tienen una gran
cantidad de métodos integrados que se pueden utilizar para trabajar con listas,
como agregar elementos, eliminar elementos, ordenar listas y mucho más.
Las listas se pueden clasificar en tres grupos y cada una tiene sus propias
características las cuales son:
• Listas simplemente enlazadas: En una lista simplemente enlazada, cada elemento
de la lista contiene una referencia al siguiente elemento de la lista. Estas listas
son muy eficientes en términos de
espacio y tiempo de procesamiento, ya
que solo se requiere un puntero para
cada elemento de la lista. Sin embargo,
no se pueden recorrer en orden inverso y
7
no es posible acceder a elementos de la lista en orden inverso sin recorrer toda la
lista desde el principio.
• Listas doblemente enlazadas: En una lista
doblemente enlazada, cada elemento de la
lista contiene una referencia tanto al siguiente
como al elemento anterior de la lista. Esto
permite que la lista se recorra en ambas
direcciones, hacia adelante y hacia atrás. Sin embargo, las listas doblemente
enlazadas requieren más espacio en memoria que las listas simplemente
enlazadas, ya que cada elemento tiene dos punteros.
• Listas circulares: En una lista circular, el último elemento de la lista apunta al
primer elemento de la lista, creando así un ciclo continuo. Esto permite que la lista
sea recorrida de forma continua sin tener un final definido. Las listas circulares se
utilizan comúnmente en algoritmos de programación y en sistemas operativos para
administrar tareas. Sin embargo, las listas
circulares pueden ser más difíciles de
implementar y de manejar que las listas
simple o doblemente enlazadas.
Las listas son una estructura de datos muy común en la programación y tienen
varias ventajas y desventajas.
VENTAJAS
• Flexibilidad: Las listas son estructuras de datos muy flexibles, ya que se pueden
agregar, eliminar o modificar elementos en cualquier momento, lo que permite que
se adapten a diferentes situaciones.
• Fácil de usar: Las listas son fáciles de crear y utilizar en la mayoría de los lenguajes
de programación, lo que las hace ideales para principiantes y programadores
experimentados.
• Acceso aleatorio: Los elementos de una lista se pueden acceder aleatoriamente
utilizando su índice, lo que hace que sea fácil acceder a cualquier elemento de la
lista.
• Almacenamiento de múltiples tipos de datos: Las listas pueden contener cualquier
tipo de dato, incluyendo números, cadenas de texto, objetos, entre otros.
• Capacidad dinámica: Las listas pueden crecer y reducir su tamaño de manera
dinámica según se necesite, lo que las hace ideales para almacenar datos de
tamaño variable.
DESVENTAJAS
• Lentitud en operaciones de búsqueda: Las listas pueden ser lentas en operaciones
de búsqueda si se tienen que recorrer todos los elementos para encontrar el valor
deseado.
• Consumo de memoria: Las listas pueden consumir una gran cantidad de memoria,
especialmente cuando se almacenan grandes cantidades de datos.
8
• Dificultad en comparación de elementos: En algunos casos, puede ser difícil
comparar elementos dentro de una lista, especialmente si contienen objetos
complejos.
• Problemas de seguridad: Las listas son estructuras de datos mutables, lo que
significa que se pueden modificar en cualquier momento, lo que puede ser un
problema de seguridad si se utilizan incorrectamente.
• Sin ordenamiento preestablecido: Las listas no tienen un ordenamiento
preestablecido, lo que puede ser un problema si se requiere que los datos estén
ordenados de cierta manera.
Las Cola
Las listas tipo cola , son aquellas donde las inserciones se realizan al inicio de
la lista y las extracciones se realizan al final de la lista. Las colas se conocen también
como listas FIFO (primero en entrar, primero en salir).
Los elementos se eliminan (se quitan) de la cola en el mismo orden en que se
almacenan y, por consiguiente, una cola es una estructura de tipo FIFO (first-in-first-
out, primero en entrar, Primero en salir o bien primero en llegar/primero en ser
servido).
9
de otros lenguajes tenéis que acordaros de esto, que tiende a ser un bug muy
común.
• Ver cuál es el último elemento de la cola: hay un equivalente de la función
front() para el final de la cola, la función back().
• Ver cuántos elementos tiene la cola: para saber esto, podemos utilizar la
función size(). Además, podremos saber si la cola está vacía con la función
empty().
DESVANTAJAS:
El tiempo medio de espera en este algoritmo es a menudo muy largo. Efecto Convoy:
Cuando un proceso tarda mucho los demás deben esperar en cola hasta que termine,
por lo tanto, no es válido para entornos interactivos.
Ejemplo de pila:
Supongamos que queremos apilar algunos libros en un escritorio. Cada vez que
agregamos un libro a la pila, se coloca encima del libro anterior. Para quitar un libro
de la pila, siempre quitamos el libro de arriba. Podemos representar esto usando una
pila:
| | Libro 3
| | Libro 2
| _| Libro 1
En este ejemplo, Libro 1 fue el primero en agregarse a la pila, luego Libro 2 y
finalmente Libro 3. Si queremos quitar un libro de la pila, siempre quitamos el libro
que está en la parte superior de la pila. Entonces, si queremos sacar Libro 3, primero
debemos quitar Libro 3 de la pila, luego podemos quitar Libro 2 y finalmente Libro 1.
10
Ejemplo de cola:
Supongamos que queremos crear una cola de impresión para una impresora. Cada
vez que alguien envía una tarea de impresión, la tarea se agrega al final de la cola y
la impresora imprime la tarea que está en la parte delantera de la cola. Podemos
representar esto usando una cola:
| | Tarea 1
| | Tarea 2
| | Tarea 3
|__ | Tarea 4
En este ejemplo, Tarea 1 fue la primera en agregarse a la cola, luego Tarea 2, Tarea
3 y finalmente Tarea 4. La impresora imprimirá las tareas en el orden en que se
agregaron a la cola, por lo que primero imprimirá Tarea 1, luego Tarea 2, Tarea 3 y
finalmente Tarea 4.
Ejemplo de lista:
Supongamos que queremos crear una lista de tareas pendientes. Cada vez que
agregamos una tarea, se agrega al final de la lista. Si completamos una tarea,
podemos eliminarla de la lista. Podemos representar esto usando una lista:
1. Hacer la compra
2. Pagar la factura del agua
3. Llamar al médico
4. Sacar al perro a pasear
En este ejemplo, cada tarea se agrega a la lista en un orden específico. Si
completamos la tarea "Hacer la compra", podemos eliminarla de la lista y la lista se
actualizará para que las tareas restantes estén en el mismo orden en que se
agregaron. Por ejemplo, después de eliminar "Hacer la compra", la lista se vería así:
1. Pagar la factura del agua
2. Llamar al médico
3. Sacar al perro a pasear
11
CONCLUSIÓN
12
BIBLIOGRAFIA
https://es.khanacademy.org/computing/computer-science/algorithms/recursive-
algorithms/a/properties-of-recursive-algorithms
13