Bienvenido al Curso

1

Introducción al curso básico de algoritmos y estructuras de datos

Introducción a los algoritmos

2

¿Qué entiende una computadora?

3

Lenguajes de programación

4

Estructuras de datos

5

¿Qué es un algoritmo?

6

Metodología para la construcción de un algoritmo

7

Variables y tipos de datos

8

User defined data types

9

Instalando Ubuntu Bash en Windows

10

Creando nuestro user defined data type

11

Abstract Data Types básicos: Lists, Stacks, Queues

12

Explicación gráfica Data Types básicos

13

Glosario de funciones para Abstract Data Types

14

Clases y objetos

15

Creando tu primera Queue: Arrays

16

Creando tu primera Queue: implementación.

17

Creando tu primera Queue: implementar la función enQueue

18

Creando tu primera Queue: implementar la función deQueue

19

Creando tu primera Queue: main code

Algoritmos de ordenamiento

20

Algoritmos de ordenamiento

21

Bubble sort

22

Bubble sort: implementación

23

Bubble sort: main code

24

Insertion sort

25

Desafío: implementa un algoritmo de ordenamiento

Recursividad

26

Recursividad

27

La función Factorial, calculando el factorial recursivamente

28

Manejo de cadenas de caracteres

29

Arte: Generando arte recursivo

Divide and conquer y programación dinámica

30

Divide and Conquer (divide y vencerás)

31

Qué es la programación dinámica (divide y vencerás v2.0)

32

MergeSort

33

Desafío: Buscar el algortimo más rápido de sort

34

Implementando QuickSort con Python

35

Implementando QuickSort con Python: main code

Algoritmos 'Greedy'

36

Qué son los Greedy Algorithm

37

Ejercicio de programación greedy

38

Ejercio de programación greedy: main code

Grafos y árboles

39

Grafos y sus aplicaciones

40

Árboles

¿Cómo comparar Algoritmos?

41

Cómo comparar algoritmos y ritmo de crecimiento

¿Qué sigue?

42

Cierre del curso y siguientes pasos

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Explicación gráfica Data Types básicos

12/42
Recursos

Como vimos en la clase anterior existen diversos Abstract Data Types típicos y los más básicos son los siguientes:

List, Conjunto de valores ordenados secuencialmente donde son recuperados mediante un número del 0 al n.

Dictionary: Similar a las listas, pero con un índice numérico o no numérico del tipo de datos que se desee (aunque tiene que ser único)

Linked List: Cada elemento se vincula (Apunta) con el siguiente nodo, al no estar definidas de un inicio. las linked lists pueden tener el tamaño que sea.

Stack (LIFO, Last in First Out): En estos datos se van agregando elementos con la peculiaridad de que el último en agregarse será el primero en recuperarse.

Queue (FIFO, First in First Out): Al contrario del stack, los Queue se caracterizan por que la recuperación de datos siga la misma secuencia de la inserción de los datos, así el primer dato será recuperado al principio, y el último al final.

Aportes 66

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Queue o cola: Primero que entra, primero que sale. Como una cola en el banco, el que llega primero, primero se atiende.
Stack o pila: Como una pila de juegos o libros, los nuevos llegan y se colocan encima del último libro, so, el primero que sacas es el último que agregaste a la pila.

Usar los tipos de datos equivocados puede ser catastrófico. Imagínate una fila de banco que atiende de primeras al último que llega, ¡sería terrible! 😱

En esta imagen se muestran los diferentes tipos de datos:

(from Dartford Grammar School Computer Science Department.)

Algo curioso sobre las Linked List es que al ser nodos independientes a diferencia de los Array o Vectores el orden de almacenamiento ya sea en memoria o disco puede ser diferente al orden de recorrido, aún así el acceso a las listas solo puede ser secuencial a diferencia de los vectores que puede ser aleatorio es decir que las listas son más lentas que los vectores al momento de buscar una información específica

Tranquilos, estos conceptos en la práctica son mas sencillo de lo que parecen. Considero que tal vez pudieron ser mejor explicados pero bueno.

A continuación, les dejo dos repositorios con ejemplos de Estructuras de Datos e implementaciones de ADT en Kotlin y Java:

https://github.com/bmaslakov/kotlin-algorithm-club
https://github.com/kevin-wayne/algs4

Para entender mejor las queue imaginense una fila en el banco o en un supermercado donde la primera persona que llega es la primera que se despacha (que atienden y luego sale de la fila) , que es a la relacion que se hace con este ADT(Abstract Data Type) primero en entrar primero en salir

Para entender mejor las pilas (stacks) , imaginen que tienen una columna de libros , para sacar el del medio tienen que ir sacando libro por libro desde arriba (que fue el orden en que se ingresaron) no pueden llegar a ese libro sin sacar los de arriba

Espero hayan entendido mi aporte

#NuncaParesDeAprender

Me gustaría ver el uso de estos Data Types con casos reales.

Vale mencionar que en los Linked List su tamaño máximo definido como el que sea, este será limitado sólo por la RAM. Hasta que la agotemos, cosa que creo jamas queremos llegar 😃 . Aplicaría de igual manera para los otros ADT.

En esta lectura explican las diferentes estructuras de datos y ponen los ejemplos de su aplicación en Python

  • Pilas: (Ultimo en entrar, primero en Salir ) Permite almacenar Datos y recuperar Datos.

  • 2.Tipos de Colas:

Ejemplo:

La lista (stack) va a ser super simple, como lo dice su nombre, es una estructura ordenada secuencialmente de elementos del mismo tipo (nombres, números, direcciones). Será ordenada secuencialmente (valor 1, valor 2, valor 3) y abajo vamos a tener un índice secuencial, y como es programación siempre vamos a comenzar en CERO.

Tiene sus acciones por ejemplo “GET” que te retorna al elemento de la posición dada, luego tenemos “INSERT” que te permite ingresar algo a la lista, y otras más

Luego tenemos las Pilas, y vamos a tener un elemento donde se almacena que pueden ser un array o un linked list, LIFO es su lógica, supongamos que guardamos letras. Empezamos a rellenar los datos de forma tal que la A se llena del último a llegar hasta el primero B,C,D,A.

En el Queue:

A,B,C,D,E,F,G. La G entró de última, entonces será la primera en salir. Aquí obviamente todas las letras se recorrerían y la F tomaría el lugar de la G, tendríamos un espacio nuevo disponible de primero.

Cuando el profesor dice, que la linked list es muy sencilla me recuerda lo que me costo aprender a implementarla en el curso de introducción al lenguaje C

Coincido con mis compañeros, es muy importante la implementación de ejemplos prácticos para que podamos aplicarlos de alguna manera. Además de un dibujo sería mucho mejor complementarlo llevándolo al código real.

Los ADT más importantes:

  • List = Se utiliza en arrays, lista ordenada secuencialmente de elementos del mismo tipo ej. lista de direcciones, lista de nombres etc.
  • Stack = Puede ser un array o linklist, siempre se va a mostrar de primeras el ultimo dato que ingresaste, tamaño predefinido
  • Queue = Se usa en arrays, tiene un nivel de seguridad que no deja ver algunos datos, y muestra el último dato que fue ingresado, si se ingresó la G de ultimas, va a mostrar G de primeras, tamaño predefinido, en caso de borrar algún dato, este se almacenara en el primer puesto del array.
  • Diccionario o mapas = Colección de datos puede ser un array, va a tener un índice, y este índice no va a ser como una lista algo secuencial, va a ser el índice que tu quieras por ejemplo un id, un valor único, su ventaja es que podemos consultar datos mucho más rápido

Importante: Para tener un sitio con muchos usuarios, no nos sirve un array, ya que este le definimos el tamaño al crearlo, para este caso se pude utilizar mejor un linklist ya que esto guarda el dato y tiene la dirección al siguiente dato y va creciendo.

¡AMO estos videos! Deberían de tener más videos así los otros cursos.

Esto hace que el video anterior quede más claro aún. ♥

Definitivamente quedo más claro

No he logrado conectar, es importante ver el ejemplo practico, next and let’s start

esperar a ver los ejemplos, en este punto es más complejo entender el significado y su funcionamiento.

Una aclaración: Los arreglos pueden tener un tamaño dinámico, es decir, ir teniendo el espacio que necesita el programa. Lo que pasa es que para agrandar un arreglo hay que copiar todos los valores uno por uno a otro lado de la memoria dónde el arreglo entre, lo cual es más lento que simplemente poner el nuevo dato en un lugar cualquiera de la memoria

en cuanto al array, les digo a todos de que podemos crear arreglos vacíos y luego llenarlos de acuerdo a las necesidades

No me queda clara la explicación del queue. Supuestamente es “First in first out”, pero en el ejemplo el último dato en entrar es el primero en salir. ¿Por qué?

Linked List: Cada elemento se vincula (Apunta) con el siguiente nodo, al no estar definidas de un inicio. las linked lists pueden tener el tamaño que sea. Ejemplo grafico:

Me pareció que se quedo un poco corta la explicación de los diccionarios y Linked list. Acá un poco para complementar.

Diccionario: estas estructuras de datos utilizan una clave para acceder al valor.
Por ejemplo: una agenda personal representada como diccionario la fecha sería la clave y las tareas o actividades serían los valores.

agenda={"lunes":tarea algoritmos, "martes":clase 1, "miércoles":clase 2} print(agenda)

Linked list: se compone de nodos y cada nodo contiene los datos de ese nodo y enlaces a otros nodos.

Diccionario: En los diccionarios los datos se encierran entre { }, Un diccionario es una estructura de datos y un tipo de dato en Python con caracateristicas especiales que nos permiten alcenar cualquier valor ya sea int, float, booleano, string, listas, funciones. Estos se identifican por una clave (Key)


Uso del diccionario: Para definir un diccionario, se encierra el listado de valores entre llaves. Las parejas de clave y valor se separan con comas, y la clave y el valor se separan con dos puntos

diccionario = {'nombre' : 'jose', 'edad' : 26, 'cursos': ['Python','Django','JavaScript'] }

Muy claro el tema, gracias por su excelente explicación.

Un poco más claro

Imagina una …
Lista como si manipularas una cadena de metal en la que puedes manipular sus eslabones a voluntad
Stack como un conjunto de platos uno encima de otro, así que para sacar los de en medio tienes que levantar primero los de arriba(FILO)
Queue como las filas que realizas para las compras, el cajero siempre atiende al primero que llegó(FIFO)
Map como un diccionario de lengua, es un conjunto clave(palabra del diccionario) y valor(su significado)

<h3>Listas</h3>

La lista es simple, es una lista ordena de elementos del mismo tipo, es ordenada de forma secuencial. Y abajo se tiene un índice secuencial que siempre comienza en cero.

<h3>Stack</h3>

El stack almacena sus elementos en un array o linked list, y tiene la lógica de first in first out. Este tiene varias acciones como push que permitira agregar elementos al stack, pop permite sacar un elemento del top, parte más alta del stack. Pick que nos va a permitir visualizar el elemento para salir necesidad de ser removido, luego tenemos size, is empty and it is full.

Si se define un array para el stack se va a tener un tamaño pre definido para el mismo.

<h3>Queue</h3>

La linked list a diferencia del array, el linked list se va a manejar a través de nodos y va a tener una dirección, que va de uno en uno, y nos permite tener “n” valores. Por que el array nos permite solamente tener un tamaño definido.

<h3>Mapa y diccionario</h3>

Nos permite tener una colección de datos con un pequeño cambio que es un índice a medida, lo define el programador, no es secuencial exactamente. Su ventaja es que nos permite hacer consultas más rápido. Y se puede almacenar muchos valores.

Creo que el ejemplo de queue estuvo mal planteado.

  • En python para Queues se hace por import import queue
import queue

q = queue.Queue(maxsize=3)

q.put('a')
q.put('b')
q.put('c')

print(q.get())
print(q.get())
print(q.get())
  • el Linked List por medio de una class
  • dictionarios: dict
  • listas, stacks: list

para mi estas estructuras fueron un dolor de cabeza en universidad, sobretodo aplicadas en C, recuerdo un programa de proyecto que teniamos que simular un tipo almacen de carros de n cantidad de niveles (pisos) con n cantidad de contenedores por cada piso y cada contenedor se meterian los carros, basicamente era una lista enlazada (pisos) anidada con una cola (lotes) que estaba anidada a una pila (donde se meten los carros)

Una critica constructiva: el contenido del curso, hasta el momento, me parece adecuado, sin embargo, explicaciones que requieren un apoyo visual deberían mejorarse, por ejemplo, para este caso, si el profesor sabe que no puede dibujar de una manera adecuada debería recurrir a apoyo multimedia, hacer garabatos en la pizarra puede generar distracción en el alumno, particularmente he visto algunos cursos en youtube sobre DS donde a nivel visual se explica mejor, incluso varios alumnos de Platzi veo que dejan gráficas muy informativas sobre esto, creo que en ese sentido el equipo de producción de Platzi debería apoyar para evitar que la explicación se sienta informal y hecha sobre el paso.

  • Una lista en un conjunto de datos ordenados secuencialmente.
  • Stack o pila LIFO (Last In First Out)
  • Queue o cola FIFO (First In First Out)
  • Diccionarios son un conjunto de datos, pero en este caso la llave o indice no esta ordenado secuencialmente.
  • Linked List, a diferencia de los arrays que almacenan los datos secuencialmente, las listas enlazadas cuentan con un elemento puntero que le permite almacenar los datos de manera que no tengan que estar secuencialmente.

Comparto por acá un recurso sobre Abstract Data Types:

muy interesante 😄

Cool.

Y cual pueden ser los data type mas complejos?

Mucho mas entendible todo a partir de esta clase

No encontré el link de la lectura.

Esta clase es muy abstracta.

Abstrac Data Type más básicos e importantes
List = lista ordenada secuencialmente de elementos del mismo tipo, números, nombres, etc.
V0 V1 Vn
-------------------------- en orden desde 0
Stack = puede almacenar los datos en un array o linked list,
Vn V1 V0
<------------------------- de derecha a izquierda, el ultimo dato en ingresar es el último dato en salir
Queue = la primera letra en entrar va a ser la primera letra en salir
A B C D
------------------------------ salida
Sale la letra D y en el primer cuadro a mano izquierda quedaría libre un campo para guardar un nuevo dato
Dictionary y Maps = van a tener un índice siempre
Nos permite hacer consultas mas rápido, y también podemos agregar una dirección entera o un cliente completo como el que se creó anteriormente.
V0 V1 V2 Vn
K0 K1 K2 Kn
V= valor; K= índice
Linked list se crea uno por uno, por eso podemos tenerla del tamaño que queramos.
V -> V1 -> V2 ->
V = valor; -> = dirección de valor

Ok

Brutal, toma mucho sentido en diferentes lenguajes de programación. Muy buena clase profe.

that’s great thanks!

Con ejemplos o casos reales seria genial …

listo

explicación muy detallada y super entendible

Para separar la interfaz del TDA, es decir aquellas funciones y tipos que el programador “usuario” utilizará, de los detalles de implementación, vamos a utilizar los archivos headers de C. Es decir, los .h.
Interfaz: declarada en el archivo .h
Implementación: declarada en el .c
Y el programa de prueba o cliente deberá símplemente incluir el .h

Lista
Colección de bytes, tienen un indice secuencial.
Stack
LIFO - Last In, Frist Out
Queue
Primero que entra, primero que sale.
Diccionarios
Colección de datos con un indice definido por mi.

“Para llegar al cuarto item de un linked list, tienes que pasar por los 3 anteriores”

https://www.geeksforgeeks.org/linked-list-vs-array/

No lo se me pareció muy pobre la explicación… tengo que hacer consulta externa 😦

Repito con practica aprendo mejor!

Ese era el curso que me faltaba para entender a Pablo!

LIST [Lista]: Una serie ordenada secuencial mente de elementos similares. (Números, Letras, Colores, Comida, etc)

STACK [Pila]: El ultimo en entrar es el primero en salir.

QUEUE [Cola]: El primero que entra, es el primero que sale.

DICTIONARY [Diccionario]: También es una lista pero esta cuenta con un indice por espacio para identificar el valor almacenado.

Genial!!! graciasssss

Estas totalmente idoooooooooooooooo Padreeeeeeeeeeeeeee

Genial la clase, entendí varios conceptos 😄

Me gustaría ir un poco más a fondo con las LinkedList.

  1. Pueden ser estructuras simples, dobles, cuando son simples el apuntador va a la siguiente posición, en cambio en dobles se tiene dos apuntadores, para la posición anterior y la siguiente.
  2. Pueden ser estrúcturas líneales o circulares y tienen cabezas y colas. En las listas circulares, la cabeza(apuntador) apunta a la cola y la cola a la cabeza, en las listas simples estas posiciones para la cabeza y cola se denominan NIL (Not In List).
  3. Pueden ser ordenadas, y esto va a ser determinado por el valor almacenado y no por el apuntador.
  1. Mis apuntes sobre: "Explicación gráfica Data Types básicos"
    List: Va a ser ordenada secuencialmente, y tendrá un índice secuencial.
    Stack:
    Queue:
    El array no puede usarse si no se conoce el tamaño para lists, stacks y queues, se usaría una Linked List.
    Linked list: Tiene un dato y una dirección (al siguiente dato).
    Diccionary: Tiene valores e índices (por cada valor).

Mucho mejor!