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

Cómo comparar algoritmos y ritmo de crecimiento

41/42
Recursos

Aportes 38

Preguntas 2

Ordenar por:

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

Me parece genial que hablen acerca de estos temas, son vitales en el conocimiento de cualquier programador. Si quieren leer más a fondo sobre el tema, les comparto este post que escribí acerca de Complejidad Computacional, la disciplina encargada del análisis de algoritmos:

https://pablotrinidad.me/edd-2-complejidad-computacional/

Saludos y happy hacking!

++Tipos de análisis de ejecución de un programa: ++

Análisis empírico: (poco recomendado)

• Requiere tener el código y ejecutarlo.
• La ejecución del programa se mide en unidades de tiempo.
• Se mide solo sobre una colección de entradas particulares.
• Lo que se mide depende de la computadora, el sistema operativo y el compilador, es decir depende de una implementación particular.

**Análisis teórico: **

• Análisis predictivo de eficiencia integrado al proceso de desarrollo de un programa.
• No depende de características de implementación.
• Establece cotas para el tiempo de ejecución en el “peor caso”, “mejor caso” y “caso promedio”.

Notación matemática en las que expresamos el tiempo de ejecución:

• Notación Big-Oh (mas usada)
• Notación Big-Omega
• Notación Zeta

Fuente: Introduction to Algorithms Ed. The MIT Press. (Capitulo 3 The Growth of Function)

La solución ideal es que vamos a representar el algoritmo como una función que va a depender del tamaño de la entrada, esto va a permitir comparar los diferentes tipos de ejecución independiente del tiempo que consume la maquina en resolver el algoritmo del estilo de programación o el lenguaje que estemos usando.
Vamos a ver algunos materiales que nos van a ayudar a comparar estos algoritmos sin importar el sistema o lenguaje que estemos usando.
Debemos tener en cuenta como se va a medir esto para eso vamos a usar un concepto importante que se llama ANÁLISIS DEL RITMO DE CRECIMIENTO DE LOS ALGORITMOS.
Un ejemplo seria cuando vamos a comprar un carro o una bicicleta y debemos ir directamente a las entradas mas caras, no a las menores.
Ejemplo: en el caso de comprar coche o bicicleta, compraríamos el coche porque es mucho mas costoso, de eso se trata el ANÁLISIS DEL RITMO DE CRECIMIENTO DE LOS ALGORITMOS.
1 CONSTANT= Imagínate que tienes que agregar cada vez mas un elemento a un stack de información o una lista, y esa lista consiste en agregar un dato mas en cada operación. Esto seria un tiempo de ejecución de uno y seria constante.
LOGN LOGARITHMIC= imaginemos que tenemos un arreglo ordenado de una forma que nosotros especificamos y tenemos que buscar en ese arreglo un dato especifico, esto tiene una complejidad de tiempo de tipo logarítmico, esta operación se puede realizar en cualquier calculadora, en este caso seria el numero de información que vas a meter al logaritmo.
N LINEAR= en este caso tenemos un arreglo no ordenado donde los datos van a estar ordenados aleatoria mente, el tiempo es de n al numero que tienes el dato por ejemplo: va a empezar a buscar desde la posición cero hasta la posición n y n va a ser el tiempo de ejecución, otro ejemplo seria si empieza desde cero y necesitas hallar un dato en la posición 20, 20 va a ser el tiempo de ejecución.
NLOGN LINEAR LOGARITHMIC= es un tipo de crecimiento logaritmico lineal, por ejemplo tienes varias listas o varios arreglos y debes ordenarlas por nivel, entonces iria, N^2 QUADRATIC,
N^3 CUBIC, 2^N EXPONENCIAL.
N^2 QUADRATIC= estos algoritmos tienen un ritmo de crecimiento mucho mayor, cuando la entrada va creciendo esto se vuelve una curva de crecimiento acelerado.
N^3 CUBIC= imagínate la multiplicación de dos matrices, entonces la matriz se va volviendo mas grande.
2^N EXPONENCIAL= crecimiento exponencial, donde sera con base 2 a la n, entonces la potencia se incrementa, entonces el n crecería en este tipo de algoritmo.

No van a encontrar el material por que la clase pertenece a el curso anterior de Algoritmos, comparto el enlace por si gustan acceder.
.

Material del curso y clase :

https://static.platzi.com/media/public/uploads/Introduccion - Algoritmos con C_dc48ac3a-26a9-46f9-bd4c-a66e625c3c0b.pdf
.
Curso

https://platzi.com/cursos/algoritmos-2017/

soy yo o creo que este video es de otro curso o de una versión anterior del mismo? habla de cosas que no aplican al curso actual

Estaría genial ver algoritmos enfocados en Javascript. Más allá de que se pueden extrapolar los ejemplos que diste. Genial el curso.

Para que me quedara un poco más claro, realicé la siguiente imagen en una calculadora graficadora en línea. Cada línea representa el Ritmo de Crecimiento

Donde x representa el valor n(datos ingresados en el algoritmo), y y representa el crecimiento.

En el vídeo explican la complejidad algorítmica y su medición visto en un gráfico

me da la impresion de que este video, debería ir al principio, nombra clases que ya vimos al principio

Me percate de que esta clase forma parte del curso anterior y me puse a revisar. Hay cosas interesantes en el curso del 2017.
Les aconsejo que le den una mirada.
Curso de Algoritmos con C 2017

Les comparto otra aproximación al tema por si les ayuda a entenderlo mejor y no dejen de revisar Introducción a los algoritmos de Cormen 😃

interesante, pero el dice que nos vemos en la siguiente clase para concluir este tema y ya esta finalizando el curso. 😦

Este tema me parece que es muy interesante y al igual muchos considero que debe profundizar un poco más.

Aqui les dejo unos video con los que pueden aprender cómo analizar un algoritmo por el mejor y peor caso para calcular el ratio de crecimiento.

InsertionSort: https://www.youtube.com/watch?v=ZD9yICbSyBQ
MergeSort: https://www.youtube.com/watch?v=yKVjojlx8f4

En esta página se muestra la complejidad de algunos algoritmos y estructuras de datos en notacion Big O https://www.bigocheatsheet.com/

Hay una manera mucho mas sencilla de entender la comparacion de algoritmos y que significa cada tipo de ritmo de crecimiento. https://www.youtube.com/watch?v=O5LiA5ireA4

“ El análisis de eficiencia sera importante mas allá de los avances tecnológicos. ” - David Harel (2012)

Donde estan los materiales de apoyo?

Me surgio la duda… Escribir más lineas de codigo aumenta la cantidad de procesos y uso de recursos del ordenador? o eso no influye tanto?

Link a la descarga del libro Algorithms Notes for Professionals en pdf.
https://goalkicker.com/AlgorithmsBook/AlgorithmsNotesForProfessionals.pdf

Pienso que este tema debería ser mas profundo, constantemente como desarrolladores nos están preguntando por esto y es de vital importancia

saben cuando suben el curso de algoritmos avanzado?

Un poco de información que conseguí sobre evaluación de algoritmos:
http://verso.mat.uam.es/~pablo.angulo/doc/laboratorio/b2s2.html

El tema deberia ir al comienzo del curso, y leyendo en los comentarios veo que pertenece al curso de Algoritmos en C 2017
https://platzi.com/clases/algoritmos-2017/

Ritmos de crecimiento:

  • Constante (golden)
  • log n (best)
  • n (linear)
  • nlogn
  • n^2
  • n^3
  • 2^n
  • n^n (the worst)

Otra manera que podemos comparar, aunque no tan comun, es el uso de la memoria. Normalmente entre mas rapido es un algoritmo, mas memoria utiliza

vea ppues , cosas que una piensa que nada qeu ver …

El tiempo de ejecución y cantidad de lineas de código del algoritmo seleccionado. No son buenas métricas para escoger un algoritmo eficiente. La métrica correcta sería comparar los algoritmos dependiendo de la envergadura de entradas de datos.

Para tener referencias de la magnitud de datos del problema a resolver con la del algoritmo. Se puede utilizar la tabla de ratio de algoritmos.

Quiero profundizar en este tema, genial, aunque sea de otro curso, estuvo buena la clase, solucione dudas que tenía.

Hay un error en el video, intente los diferentes servidores y es lo mismo probablemene un bug, me gustaba mas la otra interfaz de usuario espero sea una prueba esta

  • El tiempo de ejecución no es una buena métrica cuando se quiere comparar algoritmos, ya que varia según el tipo de computadora que se use.
  • El número de instrucciones tampoco no es una buena opción, ya que depende del lenguaje que se use.
  • Una buena opción es por el tamaño de entrada.
  • El análisis del ritmo de crecimiento, esta dado por el mayor coste del algoritmo.

[Ratio de crecimiento][1,2]

El escalamiento de un cálculo es el dolor de cabeza de todo computer science.

Me parece genial que seas ingeniero mecatrónico en México, yo también soy ingeniero en mecatrónica y me siento muy identificado con la descripción que diste al inico, por cierto ¿qué es un mecatrónico sin saber microcontroladores? Saludos

El Ratio de crecimiento es igual que la complejidad?

El tiempo de ejecución y cantidad de lineas de código del algoritmo seleccionado. No son buenas métricas para escoger un algoritmo eficiente. La métrica correcta sería comparar los algoritmos dependiendo de la envergadura de entradas de datos.

Comparar algoritmos.
Ritmo de crecimiento

¿Saldrá un curso de algoritmos avanzado?

Era más fácil poner un bucle que genere 200 numeros aleatorios

Buen video y muy buenos aportes de la comunidad!