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

Adquiere por un a帽o todos los cursos, escuelas y certificados por un precio especial.

Antes: $249

Currency
$219/a帽o

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comprar ahora

Termina en:

0D
21H
56M
36S

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?

o inicia sesi贸n.

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 鈥減eor caso鈥, 鈥渕ejor caso鈥 y 鈥渃aso 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!