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

Creando tu primera Queue: implementaci贸n.

16/42
Recursos

Para crear una Queue debemos seguir los siguientes pasos:

  1. Crear un pointer para saber que hay en front y rear
  2. Colocar estos valores en -1 al inicializar
  3. Incrementar en 1 el valor de 鈥渞ear鈥 cuando agregamos un elemento
  4. Retornar el valor de front al quitar un elemento e incrementar en 1 el valor de front a usar dequeue.
  5. Antes de agregar un elemento revisar si hay espacios
  6. Antes de remover un elemento revisamos que existan elementos
  7. Asegurarnos de que al remover todos los elementos resetear nuestro front y rear a -1

Aportes 45

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Muchachos comparto esta foto porque solo as铆 yo logr茅 entender la idea del algoritmo鈥茅 que ya los arrays vienen con funciones integradas que podr铆an facilitar esto, pero siempre es bueno conocer 鈥渁lgoritmicamente鈥 hablando como funcionan las cosas desde adentro.

Espero que esta foto ayude a muchos.

Los arrays (y cualquier otro dato en programaci贸n) tienen la capacidad de contar sus elementos. Por ejemplo, el string "fulano" tiene 6 elementos (f, u, l, a, n y o) y el siguiente array tiene 3 elementos: ["pepito", "pizza", "pablito"].

Sin embargo, si queremos acceder a la primera posici贸n de nuestras variables no buscamos la posici贸n 1, sino la posici贸n 0. Y, por lo mismo, la segunda posici贸n en realidad es la posici贸n 1:

Esta es la famosa confusi贸n de la que habla el profe en la clase 馃槃. Ejemplo:

array[0] // pepito
array[1] // pizza
string[0] // f
string[1] // u
string[2] // l

TRABAJAREMOS CON QUEUE:
PASOS:

  1. Crear un pointer para saber que hay en el front y rear
  2. Colocar estos valores en -1 al inicializar
  3. Incrementar en 1 el valor de rear cuando agreguemos alg煤n elemento
  4. Retornar el valor de front al quitar alg煤n elemento, y incrementar en 1 el valor de front al usar dequeue
  5. Ante de agregar alg煤n elemento revisar si hay espacio (ISEMPTY()) importante, ya que si no revisamos se puede estar perdiendo informaci贸n importante.
  6. Antes de remover alg煤n elemento revisamos que existan elementos (ISEMPTY()) se debe revisar, ya que al no haber elementos nos dir谩 que removi贸 alg煤n elemento cuando realmente no ha hecho nada
  7. Asegurarnos de que al remover todos los elementos resetear nuestro front y rear a -1. Important铆simo, ya que si no reseteamos cuando retomemos alg煤n valor nos puede dar 5, el cual no existe, ya que tenemos solo 5 posiciones iniciando en cero (0,1,2,3,4).
    Este queue lo vamos a realizar con un Array, ya que sabemos el numero de elementos que se van a guardar en el Array.
    Lo mejor es inicializar en -1, ya que siempre en programaci贸n se utiliza la posici贸n 0 (cero).

![](Queues _en_Python.jpg)

Hola compa帽eros aqui les dejo un video para en tender un poco mejor los queue. Solo vean los 4 primeros minutos 馃槂

queue

Si empezamos estudiando lista ADT, stack ADT y queue, en videos anteriores. 驴Por qu茅 empezamos analizando un ejemplo de Queue?. Saludos!

Entiendo el posicionamiento 0,1,2,3,4 para cinco locaciones
No me es claro el comportamiento del QUEUE
Pero mi interpretaci贸n es:

  • El pointer siempre leer谩 el campo cero (0)
  • Cuando se atiende el campo cero, este sale y debe hacer un reset para actualizar el campo 0 moviendo los ocupantes del 1 al cero, el 2 al 1, el 3 al 2, 鈥 y si el rear lee una posici贸n 5, moverla al 4, para mantener las y locaciones ocupadas y evitar perder informaci贸n.
  • Si el rear no encuentra mas ocupantes en cola, quedar谩 vac铆a la posici贸n 4, luego, la 3 hasta agotar las ocupaciones en el campo 0

Por favor colaborarme con ese concepto. Gracias

Tener claro lo que vamos a programar es esencial:

/* 1- Crear pointer para saber que hay en front y rear */
/* 2- Colocar estos valores en -1 al inicializar */
/* 3- Incrementar en 1 el valor de rear cuando agregamos un elemento  */
/* 4- Retornar el valor de front al quitar un elemento */
/* 5- Incrementar en 1 el valor de front al usar dequeue */
/* 6- Antes de agregar un elemento revisar si hay espacio */
/* 7- Antes de remover un elemento revisar que existan elementos */
/* 8- Asegurarnos de que al remover todos los elementos asignemos -1 a front y rear */
  • Implementaci贸n de cola b谩sica en python
  • Cabe destacar que en python hay un m贸dulo que implementa una cola de manera eficiente este se llama collections.deque m谩s info en la documentaci贸n
class QueueExample:
    def __init__(self, max_length:int):
        self.queue = []
        self.max_length = max_length

    def is_queue_empty(self) -> bool:
        return len(self.queue) == 0
    
    def is_queue_full(self) -> bool:
        return len(self.queue) == self.max_length

    def enqueue(self, element_to_enter):
        """ encolar  """
        if not self.is_queue_full():
            self.queue.append( element_to_enter )
        else:
            raise Exception("La Cola est谩 llena")
            
    def dequeue(self):
        """ desencolar  """
        if not self.is_queue_empty():
            return self.queue.pop(0)
        else:
            raise Exception("La Cola est谩 vac铆a")

    def show_queue(self):
        for x in self.queue:
            print(f'[{x}]') 

new_queue = QueueExample(2)
print(new_queue.is_queue_empty())
print(new_queue.is_queue_full())
new_queue.enqueue("elemento1")
new_queue.enqueue("elemento2")
new_queue.show_queue()
new_queue.dequeue()
new_queue.show_queue()
new_queue.dequeue()
new_queue.dequeue() # Error cola vac铆a
class Cola:
    
    def __init__(self, max_e):
        self.max_element = max_e
        self.cola = list()
        
    
    def encolar(self, e):
        if (len(self.cola) < self.max_element):
            self.cola.append(e)
        else:
            print("Cola llena")
            
    def desencolar(self):
        return self.cola.pop(0)
    
    
    def imprimir(self):
        return self.cola
        
        
    def disponibles(self):
        return self.max_element - len(self.cola)
    
    
    def llena(self):
        if (len(self.cola) == self.max_element):
            return True
        else:
            return self.disponibles()
        

if __name__ == '__main__':
    reserva = Cola(5)
    reserva.encolar("Pedro")
    reserva.encolar("Juan")
    reserva.encolar("Alicia")
    print("Imprimimos reservas pendientes {}".format(reserva.imprimir()))
    print("Quedan {} disponibles".format(reserva.disponibles()))
    print("El siguiente es {}".format(reserva.desencolar()))
    print("Imprimimos reservas pendientes {}".format(reserva.imprimir()))```

Python con funciones

fila = ["juan", "pepe", "alan", "chucho", "daniel"]

def formarse():
    if len(fila) == 5:
        print("Fila llena vuelva despues")
        return fila
    else:
        formado = input("Quien se va a formar?: ")
        fila.append(formado)
        return fila

def quitar_lista():
    if len(fila) == 0:
        print("Fila vacia")
        return fila
    else:
        fila.pop(0)
        return fila

def run():
    return fila


if __name__ == "__main__":
    while True:
        to_do = input("""
**********************
Elije una accion:
1 - ver fila
2 - formarse en la fila
3 - salir de la fila
0 - Salir del programa
""")
        if to_do == "0":
            break
        elif to_do == "1":
            print(run())
        elif to_do == "2":
            print(formarse())
        elif to_do == "3":
            print(quitar_lista())
        else:
            print("comando no conocido")

pues que empiece con 0 como que te acostumbras, si empieza con 1 ya se te hace raro

Claramente que los arrays empiezen en 0 hace m谩s dificil de comprender para el iniciado, pero te facilita entender la relaci贸n entre array y pointer, y la memoria din谩mica.

En los queue el primer elemento que entra es el primero en salir.
Enqueue: Utiliza el comando Enqueue para agregar un elemento al final de la estructura.
Dequeue: Utiliza el comando Dequeue para remover un elemento al principio de la estructura.

Buen paso a paso, un poco de dudas porque queda con la imaginaci贸n pero esperamos quede m谩s claro implementando.

Gracias por resaltar la importancia de trabajar bien con la informaci贸n

Yo pens茅 que aqu铆 铆bamos a implementar c贸digo, pero no fue as铆

Memory leak: es un error de software que ocurre cuando un bloque de memoria reservada no es liberada en un programa de computaci贸n. Com煤nmente ocurre porque se pierden todas las referencias a esa 谩rea de memoria antes de haberse liberado.

  • front puntero que apunta al inicio de la cola.
  • rear puntero que apunta al final de la cola.

Entiendo que en este ejemplo la s贸lo se puede llenar una vez, ya que si una vez llenada relizamos la accion de dequeue(), ya no podremos hacer mas enqueue(), cierto?

![Comportamiento de QUEUE](

el primero en llegar el primero en salir, tambien es un algoritmo de planificacion de procesos, hablando de sistemas operativos

Siempre cuidar la informaci贸n

Todo es mejor con buenos ejemplos.

muy buena explicaci贸n, en la siguiente clase creo que ser谩 m谩s concreto todos los pasos.

Muy buena explicaci贸n antes de pasar a C贸digo.

Veamos todo esto en la pr谩ctica

comenzar del 0 al 4 puede resultar extra帽o pero tendr谩 una raz贸n de ser

Entiendo que para las colas, usamos las 5 posiciones del Array las cuales inicializan en 0 a 4.

Gracias!!!

Esta pregunta no tiene mucho que ver con la clase pero cuando abro VS code desde ubuntu me lo considera como un remoto. No tengo problema porque de hecho me facilita algunas cosas pero quiero saber por qu茅 es as铆 mientras que en la clase no

para mi es mas confuso cuando en los arrays empiezan con 1

muy buena y sensilla explicacion tengo bastantes problemas al programar porque no agarro una ideologia por donde empezar

Todo bien hasta aqu铆! 馃槂

Pienso que es la programaci贸n moderna el uso de arrays tiene muchas ventajas y suficiente rendimiento para almacenar grandes cantidades de datos, adem谩s鈥 se pueden hacer operaciones con arrayMethods que f谩cilmente permiten manipular cada uno de los datos. Todo depende de las funcionalidades del lenguaje. Mi opini贸n es respecto a javascript.

El video anterior era de POO, era publicidad? de momento me emocion茅鈥

La palabra resetear no existe en nuestro idioma

Me pregunto si existe la funci贸n equivalente a la situaci贸n de la vida real de: 鈥渆sto est谩 tardando mucho, mejor me voy de la fila鈥.

Importancia de la estructura de datos y ADT: Su importancia es tener un correcto manejo de la informacion ya sea dentro de las variables funciones objetos, todo lo que maneje informacion, de forma de evitar (buffOverFlow) y otros errores como memory leaks, etc etc etc鈥

Por que en -1鈥 no inicia la secuencia en 0?

Super鈥 a la practica!! 馃槂

Para poder tomar este curso tuve que tomar dos antes, ya que algunos conceptos me confund铆an :S

Porque en los Arrays el primer indice es 0?

Esto es por un tema convenci贸n. La logica detr谩s de esto es la siguiente:
Los dem谩s elementos del array estan a N posiciones del principio/del indice 0.
Cuando tu declaras un arreglo como este

//Ejemplo en Java
int array [ ] = new int [100];

La variable array contiene la direcci贸n en memoria donde comienza el array; es decir la direcci贸n del indice 0.
Cuando hacemos algo como esto:

//ejemplo en Java
array [1] = 20;

Basicamente lo que le estamos diciendo es 鈥淎 la direcci贸n de memoria que esta 1 posici贸n lejos del inicio asignale 20鈥.
Por lo tanto esto hace que el proceso para encontrar una posicion en un array sea una funcion constante ( O(1) ).

隆A implementarlo en c贸digo! 馃槂