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

Qué son los Greedy Algorithm

36/42
Recursos

Los Greedy Algorithms son algoritmos que van a buscar la solución más óptima para resolver un problema en cada una de sus etapas; vamos a tener varios subprocesos antes de llegar al resultado final.

Este tipo de algoritmos son muy “codiciosos” porque van a encontrar la mejor solución de cada paso pero, en conjunto, puede que no sean la mejor solución al problema completo.

Estos son algunos ejemplos de problemas que se resolverían con Greedy Algorithms:

  1. Una máquina que da cambio porque va a dividir el dinero de una manera eficiente y correcta.
  2. Un juego donde debemos calcular el mejor movimiento y podemos usar algoritmos de inteligencia artificial.
  3. Una aplicación de mapas porque va a buscar la ruta con el menor consumo o la menor distancia.

Aportes 36

Preguntas 2

Ordenar por:

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

Este algoritmo lo aplicamos en el curso básico de programación de Freddy.

Alguien se acuerda del cajero automático?

Notas de la clase:

  • 👸😏 Greedy significa codicioso
  • 🌌 Estos algoritmos buscan la solución más optima en cada paso (y la encuentran)
  • 😅🤔 Pero, al final de cuentas, por optimizar a más no poder en cada uno de los pasos podemos saltamos una solución aún más optima al problema total

👏 Me gustan mucho estos algoritmos.

Un clase que deja mucho que desear.
Es la primera vez que veo algortimos Greedy. En esta clase se utilizan muchas librerias propias de C++, y no se explica qué hacen, o qué no hacen. También echo en falta una explicación estructurada del camino lógico que está tomando el código al ejecutarse.
Se dice que se explicará en la siguiente clase, pero no se explica nada.

¿Qué es INT_MAX?
¿Por qué usa INT_MAX?
¿Por qué se está utilizando el valor de ‘i’ para la recursividad?

No sé si soy yo, pero conforme voy viendo los cursos veo que Platzi no cuenta con un departamento de Calidad que verifique estos cursos.

Según estuve investigando también, el Greedy Algorithm puede ser lo mas eficiente que sea, pero esa búsqueda insaciable de la eficiencia en cada único paso, provoca que resulte para algunos casos no tan eficiente, porque la solución requiere una evaluación mas general y no tan especifica (paso a paso) para encontrar una solución eficiente y óptima.
Pero como mencionaba Ricardo, son perfectos para algunos casos en concretos cómo los videojuegos y la inteligencia artificial.
Yo opino que cada algoritmo tiene su aplicación, y es nuestro deber sentarnos analizar y elegir cuál sería la opción mas eficiente que requiera nuestra solución.

Este ejemplo me recordó al proyecto del curso de programación básica donde hicimos el código para el cajero automático.

En un viaje en auto que hice por el estado de Florida en USA (de Miami a Orlando) hace un tiempo ya, el gps me indicó una ruta por una carretera estatal, (yo esperaba otra ruta por una autopista grande) conocí muchos pueblitos e igual llegué perfectamente a mi destino casi en el mismo tiempo que estimaba con la otra ruta. ¿la diferencia? que en la ruta que fui no pagué ni un solo peaje, en cambio la otra ruta, la de la autopista grande, está llena de peajes. ¿Ahora entiendo que probablemente sería por un greedy algorithm?

Un algoritmo Greedy es óptimo para obtener la solúción paso por paso pero en problemas más complejos no siempre es la solúción más óptima.

numero x cualquiera para dividirlo en monedas de 20, 10, 5, 1
(siendo n20=numero de monedas de 20)
n20= int (x/20) y esto tiene un residuo que seria
r = x%20 ; y luego haríamos lo mismo con las otras moneas hasta llegar a un residuo cero
n10=int(r/20)
r=r%20;
n5=int(r/5)
r=r%5
n1=int(r/1) osea prácticamente r
y r =0
y seria el fin del algoritmo


Diferencia entre el camino óptimo y el algoritmo codicioso

excelente contenido profe

  • Los algoritmos Greedly o algoritmos codiciosos, buscan la solución más optima en cada paso, para resolver el problema final, como una máquina de cambio, juego, escoger la mejor ruta, etc.
  • Los greedly algorithm, no necesariamente te dará la solución más eficiente al problema, pero si te dará la solución optima en cada paso o iteración.

Estaria cool ver como se aplica a un videojuego

Excelente explicación.

Ahora entiendo porque los cajeros automaticos cuando uno retira el dinero funcionan con billetes grandes…

la devuelta

LOS GREEDY ALGORITHM
Son algoritmos que buscan la solución mas optima y efectiva para un programa que contenga problemas y que estos problemas puedan ser solucionado con GREEDY ALGORITHM. Se puede aplicar en problemas como cajeros que dan vueltas o una aplicación de mapa que nos da la ruta mas corta para ahorrar combustible y tiempo.

Esto debería estar en las máquinas registradoras 🤣. Y no que le llenen de monedas. O en el banco no falta los que dan montones de billetes para cuantías pequeñas.

Eso de “más óptima” suena como decir “la más mejor”. Óptimo solo hay uno y el hecho de que una solución sea óptima le quita el calificativo de óptimo a las demás.

  1. Mis apuntes sobre: "Qué son los Greedy Algorithm"
    Greedy: En cada una de las etapas, intenta buscar la mejor solución.

Características de los algoritmos greedy (voraces)

Explicación gráfica del greedy algorithm con el proceso de dar cambio.

greedy “codicioso”

Puede servir también para verificar cuantos objetos puedes camber en un contenedor, o se me ocurre también para asignar recursos a algún proyecto basado en los conocimientos de los mismos.

Como dijo el profesor en este caso de dar cambio, el algoritmo greedy no siempre funciona. En este enlace se puede ver la solución general al problema usando programación dinámica.

Greedy Algorithms: Buscar la solución mas optima (menos pasos/cantidad)

Greedy Algorithm: Algoritmo para buscar la solución más optima.

muchas gracias

la explicación es muy buena y con el ejemplo grafico queda mas claro,

Bastante clara la explicación de la idea de “Greedy Algorithm”. Queda claro con la explicación del cambio.

algo complejo pero si ya tenias conocimientos previos lo vez sencillo

Pudiera ser que en la determinación de la receta de un platillo apliques éste algoritmo para utilizar la menor cantidad de cada ingrediente para optimizar el uso de los mismos.

Greedy Algorithms/Algoritmos codiciosos
Algoritmos que van a buscar la solución más óptima para resolver un problema en cada una de sus etapas; vamos a tener varios subprocesos antes de llegar al resultado final.

Me pareció interesante el concepto de Greedy Algorithm, creo que como programador se debe tener muy en claro sobre que criterio será óptimo el algoritmo; óptimo en proceso computacional o respuesta que dará el sistema al usuario.

Buenísimo… vamos a la práctica. 😉

Muy bueno!