Está en la página 1de 13

Fundamental #2

Algoritmos Computacionales

Dra. Norma Edith Marin Martinez


Nombre Matricula Carrera
Evelyn Arely Peña Martínez 1954432 IAS
Emilio Fabián González Moncada 1999381 ITS
Diego Antonio Rodríguez Castañeda 1898260 ITS
Angel Manuel Cruz Tamez 1853006 IAS
Patricio Loredo navarro 2000192 ITS
Joan Raymundo Hernández Antonio 1906816 IAs
Francisco Alan Sarmientos Méndez 1946128 ITS
Rodolfo Alejandro Cisneros Cerros 1994150 IAS

Bloque:1 Equipo:5 Grupo: 010 Hora de materia: V1

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

Los algoritmos recursivos son una técnica de programación que implica la


repetición de una función o procedimiento en sí mismo, con el objetivo de resolver un
problema en términos más pequeños y simples.
Las pilas, las colas y las listas son estructuras de datos fundamentales en
programación. Una pila es una estructura de datos lineal que permite insertar y
eliminar elementos solo en un extremo, conocido como la cima de la pila. Las pilas
siguen una regla LIFO (Last-In, First-Out), lo que significa que el último elemento en
ser agregado es el primero en ser eliminado.
Una cola, por otro lado, también es una estructura de datos lineal que permite
insertar y eliminar elementos, pero a diferencia de una pila, sigue una regla FIFO
(First-In, First-Out), lo que significa que el primer elemento en ser agregado es el
primero en ser eliminado.
Finalmente, las listas son una estructura de datos que permiten almacenar y
manipular una colección ordenada de elementos. A diferencia de las pilas y las colas,
las listas no tienen restricciones en cuanto a cómo se insertan o eliminan elementos,
y pueden tener cualquier tamaño.
A continuación, se describirá y explicara más a detalle lo que son los algoritmos
recursivos, las pilas, colas y las listas.

3
Algoritmos recursivos.

Lo que se conoce como un algoritmo recursivo es aquel en el que expresamos


la solución a un problema llamándose en una o más ocasiones a si mismo, cuando
esto sucede se les denomina llamadas recursivas.
Existen una gran variedad de algoritmos recursivos entre los cuales se
encuentran:
• El de recursión directa: el cual ocurre cuando en la definición el algoritmo se
llama a sí mismo.
• El de recursión indirecta: ocurre cuando el algoritmo principal no contiene
una llamada a sí mismo, sino más bien llama a otro algoritmo el cual lo llama
a él un ejemplo de esto sería lo siguiente:

• El de recursión lineal: en este tipo de algoritmo es donde únicamente


contiene una llamada recursiva.
• El de recursión final: gracias a su nombre podemos darnos una idea de cómo
es este tipo de algoritmo, este es una recursión de tipo lineal en la cual el
último paso a realizar es la llamada recursiva.
• El de recursión múltiple: en este algoritmo como su nombre nos los indica
contaremos con múltiples llamadas recursivas en el mismo.
• El de recursión anidada: con este tipo de algoritmos ocurre que los
argumentos de llamada son al mismo tiempo llamadas recursivas.

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.

• Crear: Se crea la pila vacía (constructor)


• Tamaño: regresa el número de elementos de la fila (size)
• Apilar: se añade in elemento a la pila (push)
• Desapilar: se elimina el elemento frontal de la fila (pop)
• Cima: devuelve el elemento que esta en la cima de la pila (top o peek)
• Vacia: devuelve cierto si la pila esta sin elementos o falso en caso de que
contenga uno (empty)

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).

Características de las colas


Las colas tienen una serie de operaciones que se pueden realizar con ellas:
• Insertar elementos: para insertar un elemento al final de la cola, podemos usar
la función push().
• Eliminar elementos: para quitar el elemento del principio de la cola, podemos
usar la función pop().
• Ver cuál es el primer elemento de la cola: para ver cuál es este elemento,
podemos usar la función front(). Esto es muy útil, ya que pop() únicamente
quitará el primer elemento de la cola, pero no nos dirá cuál es. Esta es una
diferencia fundamental entre C++ y otros lenguajes, así que los que vengáis

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().

Ventajas y desventajas de las colas


VENTAJAS:
La ventaja de este algoritmo es su fácil implementación, para implementar este
algoritmo solo se necesita mantener una cola con los procesos listos ordenada por
tiempo de llegada

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.

Ejemplos de Pilas, Colas y Listas

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

En conclusión, los algoritmos recursivos, pilas, colas y listas son herramientas


importantes en la programación y la resolución de problemas.
Los algoritmos recursivos son útiles cuando se necesita repetir una tarea de manera
iterativa, ya que permite la llamada a sí mismo dentro de la función. Sin embargo,
deben ser utilizados con precaución ya que pueden ser ineficientes en términos de
memoria y tiempo de ejecución.
Las pilas y las colas son estructuras de datos esenciales en la programación para
organizar y manipular datos de manera eficiente, mientras que las listas son una
estructura de datos muy versátil que permite almacenar y manipular colecciones de
elementos de forma flexible y eficiente. En conjunto, estas herramientas son
esenciales en la programación moderna y son utilizadas por programadores de todo
el mundo para resolver problemas de manera efectiva y eficiente.
En resumen, los algoritmos recursivos, pilas, colas y listas son herramientas útiles y
poderosas en la programación y la resolución de problemas. Es importante conocer
sus ventajas y desventajas para elegir la estructura de datos y algoritmo adecuados
para el problema que se está tratando de resolver.

12
BIBLIOGRAFIA

ALGORITMIA ALGO+ - Algoritmos y Estructuras de Datos. (s. f.).


http://www.algoritmia.net/articles.php?id=13
Gómez, F (s. f.). Listas | Programación avanzada: Estructuras de datos y funciones.
http://agrega.juntadeandalucia.es/repositorio/02122016/a5/es-
an_2016120212_9131705/33_listas.html
Estructuras de datos: listas enlazadas, pilas y colas. (s. f.).
https://calcifer.org/documentos/librognome/glib-lists-queues.html
Propiedades de los algoritmos recursivos (artículo). (s. f.). Khan Academy.

https://es.khanacademy.org/computing/computer-science/algorithms/recursive-

algorithms/a/properties-of-recursive-algorithms

13

También podría gustarte