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

Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Estructuras de datos

4/42
Recursos

Las estructuras de datos son una forma eficiente de almacenar y organizar la información de nuestro programa. Existen diferentes estructuras que vamos a estudiar durante el curso, es muy importante trabajar con una buena estructura que nos ayude a resolver nuestros problemas de la mejor manera posible.

Podemos clasificar las estructuras en dos grandes grupos:

  • Lineales: La información se guarda de forma secuencial y podemos personalizar el orden en que se guardan. Por ejemplo, de acuerdo a las fecha, relevancia de la información, entre otras.
  • No lineales: No toda la información está al mismo nivel o almacenada con un orden especifico. Por ejemplo, en la estructura de árbol tenemos un tronco principal con diferentes ramificaciones que surgen a partir de este o, también, la estructura de grafos donde tenemos puntos de información dispersos pero interconectados entre sí.

Aportes 107

Preguntas 2

Ordenar por:

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

<h1>CLASE #4</h1>

Te dejo un poco de mi caos y mi orden en base a lo que aprendi y reflexione en esta clase.

Siento como explota mi logica cuando dedico el tiempo a reflexionar

PUNTOS CLAVES:

-Los programas siempre van a estar trabajando con información

  • Un dato es el ladrillo de lo que llamamos información
  • Una estructura de datos es la manera en la que organizamos esos ladrillos para alcanzar nuestros objetivos y resolver nuestros problemas

Piensa en las estructuras de datos

Tiene dos grandes familias de estructuras de datos:

  • lineales
    –la informacion se guarda en una secuencia lineal

  • No lineales
    la informacion se guarda en secuencias independientes e interconectadas

–arboles
–grafos

A continuacion mostrare varias estructuras de datos ejemplificados para solucionar esto:

Yo Quiero llegar de mi casa a la escuela en la ruta mas corta

<h1>Esto es una matriz de datos
La cual a su vez contiene lista de datos</h1>
[

[2,0 NULL], [2,1 NULL], [2,2 NULL], 
[1,0 CAFE], [1,1 COMD], [2,1 ESCL], 
[0,0 CASA], [1,0 NULL], [2,0 NULL], 

]
<h1>Esto es una matriz
de adyacencias</h1>
[

[casa, cafe],
[cafe,casa],
[casa, comd],
[comd,escl],
[casa,comd]
[cafe,comd]

]

=====================

<h1>Esto es una
lista con indices</h1>
{
casa:[0,0],
cafe:[1,0],
comd:[1,1],
escl:[2,1]
}
<h1>Opciones de ruta
(Mezclando estructuras anteriores)</h1>
[


			ruta_1 [
				[casa, cafe],
				[cafe, comd],
				[comd, escl]
			],

			ruta_2 [
				[casa,comd],
				[comd,escl]
			]

]

Al momento de resolver problemas a través de código con nuestros algoritmos necesitamos algún mecanismo de guardar los datos por que los programas siempre van a estar trabajando con información.

La forma de almacenar la información va a ser conocida como estructura de datos y de hecho en varios lenguajes ya está implementado como por ejemplo: el array, listas enlazadas, árboles, grafos, entre otros.

Las estructuras de datos se van a dividir en dos grande familiar. Las lineales donde se van a guardar secuencial-mente una detrás de la otra o de la forma lineal en la que sea dada la orden por ej primero los más relevante y después lo otro etc.

Las no lineales como los arboles y grafos, en un árbol tenemos un tronco principal y sus ramificaciones que van surgiendo del troncos. Los grafos son puntos de información que van a estar dispersos por nuestra estructura y van a estar ínter-conectados entre sí.

Las computadoras pueden detectar las adyacencias (vecinos) que datos tiene de vecinos y con esto se puede obtener la información necesaria para desarrollar un algoritmo. Adyacencia es un dato que una computadora va a detectar que está al lado del otro.

Se llamara Matriz de adyacencias.

¿Qué es una estructura de datos?
Es la forma en que se almacena la información en una computadora para manipular, buscar e insertar esta información de la manera más eficiente.
Clasificación de las Estructuras de Datos
Lineales: En una estructura de datos líneas sus elementos forman una secuencia o lista.

No lineales: En estas estructuras información está dispersa y no sigue una secuencia pero si está conectada entre sí, como los árboles y grafo.

Tipos de estructuras de datos

  • Arrays:

Es una colección de datos del mismo tipo que se almacenan en posiciones consecutivas en memoria y se accede a sus valores por medio de un índice que especifica su posicion.

#En las arquitecturas modernas una dirección de memoria equivale a un byte y cuando se hace referencia a una dirección se hace referencia al byte y no se puede referenciar a un bit específico

Propiedades de un arreglo

  1. Type o tamaño del tipo de dato
  2. Memory address: donde inicia nuestro arreglo o la dirección de memoria donde inicia el arreglo
  3. Length: la cantidad de elementos que almacena y siempre tienen un tamaño fijo.
  • Listas enlazadas

Similares a los arrays con la ventaja que no necesitan definir la cantidad de elementos a contener, Estas listas se componen de nodos los cuales tienen dos atributos:

  1. El elemento que contienen
  2. Referencia al siguiente elemento de la lista

Las listas enlazadas soportan los métodos de: búsqueda, inserción y eliminación. son mejores que los arrays si tu no conoces la cantidad de elementos que vas a insertar pero requieren más espacio en memoria. Para el acceso a los datos los arrays son más rápidos debido a que el index hace referencia a la memoria y nos devuelve los datos sin recorrer todo el array.

Matriz de adyacencia
https://platzi.com/clases/1319-discretas/12225-matriz-de-adyacencia/
Gracias Platzi respuesta a cada duda.

Esta forma organizada, estructurada, eficiente y específica de almacenar la información va a ser conocida como una estructura de datos

<h1>Esbozos de mi primer codigo para solucionar el problema</h1>

¿Como detecta una computadora la adyacencia?
¿Cual es la funcion que nos permite saber eso?

Como encuentro al ruta mas corta entre 0,0 y 2,1

hay adyacencia entre dos puntos cuando la diferencia de coordenas es de solo 1 o 0 en x o en y

Para llegar a un lugar a otro necesitas moverte entre puntos adyacentes

Mientras mas puntos adyacentes necesites para moverte mayor es la distancia entre ambos puntos y mas larga es la ruta

Dicho de otro modo

Mientras menos puntos adyacentes necesites para moverte menos es la distancia entre ambos puntos y mas corta es la ruta

Entonces

Para saber cual es ruta mas corta necesito comparar la cantidad de puntos adyacentes recorridos


(function() {

let rutaMasCorta = opcionesDeRuta[0].lenght

	rutaMasCorta = () => {
		
		for (let i = 0; i < opcionesDeRuta.lenght; i++ ) {

				if(rutaMasCorta < opcionesDeRuta[i].lenght && rutaMasCorta < opcionesDeRuta[i++].lenght ) {
				rutaMasCorta
				}	

				else if(opcionesDeRuta[i].lenght < opcionesDeRuta[i++].lenght) {
					
					rutaMasCorta = opcionesDeRuta[i].lenght
				}
				else {

					rutaMasCorta = opcionesDeRuta[i++].lenght
				}
		}
		
	}
	

}
return rutaMasCorta
)()





function hayAdyencencia() {
	
	return (

	x2 - x1 >==  1 
	&&
	y2 -y1 <== 1 
	) 
}


if ( hayAdyacencia() ) {
	
	adyacencia = true
} 
else {
	adyacenccia = false
}


Las estructuras de datos se van a dividir en 2 grandes familias: las lineales y las no lineales.

Adyacencia: Es un dato que una computadora dectara a lado de otro, es decir es como la ubicacion en memoria de una variable, entonces identifica cual es la que esta cerca de ella, a esto se le llama adyacencia.

En la universidad se me dificultó un poco el curso de estructuras de datos. Espero aquí lograr despejar esas dudas.

¡Hola!
¡Está muy bueno el ejemplo de adyacencias!, pero faltó una más…

Serían:
CAS - CAF
CAS - COM
CAF - CAS
CAF - COM
COM - ESC
COM - CAS

Estructura de Datos
Como los programas siempre trabajan con información, es necesario una manera de almacenar estos datos. Esta manera de guardar y organizar va a ser llamada como estructura de datos.
Podemos ver estas estructuras en mucho lenguaje de programación. Hay dos tipos de estructuras de datos.
Lineales: La información se guarda de forma secuencial.
No lineales: La información se guarda de forma independiente.
Una computadora necesita leer las adyacencias para entender cual es el camino más corto.
Adyacencia: Un dato que va a tomar la computadora al lado de cada ubicación.
Es decir:
(1,1) es adyacente de (0.1) y al mismo tiempo de (2,1). Al recopilarse todas las adyacencias posibles en el caso se crea una matriz de adyacencias.

  • Las estructuras de datos son la forma eficiente para almacenar y organizar la información del programa.
  • Las estructuras de datos lineales son aquellas que guardan la información de manera secuencial y se puede personalizar el orden como son guardadas.
  • Las estructuras de datos no lineales, la información no esta almacenada en el mismo nivel y no tienen un orden específico, como los árboles y grafos.

Los los datos se ejecutan dependiendo del tipo de instrucciones, estos pueden ser dos tipos:

  • Lineales o secuenciales (cuando las instrucciones se ejecutan una detrás de la otra).

  • No lineales o selectivas (cuando se ejecutan en función de una condición), también pueden haber aquellas que sean “repetitivas” (que se ejecutan tantas veces según la condición)

Yo aprendí a programar en c con MikroC para microcontroladores de 8bit

En mi caso sería:

Casa, Comida, Trabajo, Universidad.

Ajuntare Imgen de lo que realice dirante la clase.

Manipular Datos para diseñar programas.

Dato a recordar: Matrices de Adyacencias.

Estoy muy emocionado.

Esta super soy nuevo y me encanta este curso

Soy nuevo en todo esto pero esta todo bien explicado que ya me siento con algùn fundamento para aprender.

Soy casi titulado de Ing. en sistemas y darle una pasada a estos cursos es muy padre porque recuerdas cosas que tiene mucho no veías y siempre sigues utilizando.

Buena explicación y gran ejemplo de coordenadas. Lo entendí perfecto.

Esto es conceptos y conocimiento nuevo, mil gracias.

Algo obligado a dominar para ser un mejor profesional

Wow, me interesa. alguien tiene algún libro para ir repasandolo?

Hay un salto de clase. Esta clase va antes de la de ¿Qué es un algoritmo?

Dentro la información Lineal, nosotros personalizamos el orden de la información.
Dentro de la información No Lineal, no toda la información está al mismo nivel.

Recomendable repasar conceptos básicos de vectores y matrices

casa con café dos veces, supongo que es porque tenía doble conexión, pero en el gráfico anterior casa con comida también tiene doble conexión y no es considerada dentro de la tabla de adyacencias, siento que me confundí más, es duro estudiar tecnología 😒

Matriz de adyacencias me parece una manera sencilla para identificar los elementos con los que cuentas y de esa manera comenzar a desarrollar tu algoritmo.

Que buena manera de introducir la estructura de datos.

Las estructuras de datos son como cajitas imaginarias en las que podemos guardar información de una manera organizada y fácil de encontrar. Cada cajita tiene un nombre y una forma especial que ayuda a guardar diferentes tipos de información.

Por ejemplo, si queremos guardar una lista de nombres de amigos, podemos crear una cajita especial llamada “lista” en la que podemos guardar cada nombre uno debajo del otro. De esta manera, cuando queramos buscar un nombre específico, podemos buscarlo fácilmente en la lista en lugar de tener que buscar en todos los nombres uno por uno. Las estructuras de datos son como herramientas mágicas que nos ayudan a ordenar y guardar información de manera más eficiente.

Las estructuras de datos son formas organizadas de almacenar y manipular datos en un programa de computadora. Se utilizan para organizar y gestionar grandes cantidades de información de manera eficiente, de tal manera que se puedan buscar, agregar, eliminar o modificar los datos de manera rápida y efectiva.

Existen diferentes tipos de estructuras de datos, cada una con sus propias características y funciones. Algunos ejemplos comunes incluyen:

  • Arrays: Una estructura de datos que almacena una colección de elementos del mismo tipo, organizados en una secuencia lineal.
  • Listas: Una estructura de datos que almacena una colección de elementos en una secuencia, pero que permite la inserción y eliminación de elementos de manera flexible.
  • Pilas: Una estructura de datos que almacena elementos siguiendo el principio “último en entrar, primero en salir” (LIFO).
  • Colas: Una estructura de datos que almacena elementos siguiendo el principio “primero en entrar, primero en salir” (FIFO).
  • Árboles: Una estructura de datos jerárquica que organiza los elementos en una estructura de árbol, donde cada elemento se conecta a través de ramas a otros elementos.

Las estructuras de datos son fundamentales para la programación y el desarrollo de software, ya que permiten a los programadores manejar grandes cantidades de información de manera efectiva y eficiente, lo que se traduce en programas más rápidos y con menor consumo de recursos.

Las estructuras de datos son una forma de organizar y almacenar información de manera que sea fácil de acceder, manipular y procesar. Algunas de las relaciones que pueden existir entre los elementos dentro de una estructura de datos son:

  • Precedencia: Se refiere a la relación en la que un elemento es considerado anterior o precede a otro elemento en una secuencia
  • Equivalencia: Se refiere a la relación en la que dos o más elementos son considerados iguales o equivalentes entre sí.
  • Jerarquía: Se refiere a la relación en la que un elemento es considerado como un padre o superior a otros elementos, que a su vez son considerados como hijos o inferiores.
  • Pertenencia: Se refiere a la relación en la que un elemento es considerado como parte de otro elemento.
  • Adyacencia: Se refiere a la relación en la que dos elementos están colocados uno junto al otro en una estructura, como por ejemplo en una lista o un grafo.

ok

Las estructuras de datos son una forma eficiente de almacenar y organizar la información de nuestro programa. Existen diferentes estructuras que vamos a estudiar durante el curso, es muy importante trabajar con una buena estructura que nos ayude a resolver nuestros problemas de la mejor manera posible.

Podemos clasificar las estructuras en dos grandes grupos:

Lineales: La información se guarda de forma secuencial y podemos personalizar el orden en que se guardan. Por ejemplo, de acuerdo a las fecha, relevancia de la información, entre otras.
No lineales: No toda la información está al mismo nivel o almacenada con un orden especifico. Por ejemplo, en la estructura de árbol tenemos un tronco principal con diferentes ramificaciones que surgen a partir de este o, también, la estructura de grafos donde tenemos puntos de información dispersos pero interconectados entre sí.

Lineales: La información se guarda de forma secuencial y podemos personalizar el orden en que se guardan. Por ejemplo, de acuerdo a las fecha, relevancia de la información, entre otras.
No lineales: No toda la información está al mismo nivel o almacenada con un orden especifico. Por ejemplo, en la estructura de árbol tenemos un tronco principal con diferentes ramificaciones que surgen a partir de este o, también, la estructura de grafos donde tenemos puntos de información dispersos pero interconectados entre sí.

Matriz de adyacencia: Se para representar relaciones binarias, tambien lo podremos entender como datos vecinos dentro de un sistema o variables dentro de un sistema.


Adyacencia: Es un dato que una computadora dectara a lado de otro, es decir es como la ubicacion en memoria de una variable, entonces identifica cual es la que esta cerca de ella, a esto se le llama adyacencia.

¿También se puede llegar de la comida/restaurante, a la casa? Si es así ¿Por qué no se agregó en el ejemplo?

Sounds good!

amazing!

Muy bien explicado 😄

Hola!!

genial!!!

que uso se le da a los grafos?

Lineales y No Lineales, así se resume, debemos de analizar bien nuestro problema a resolver para buscar el método mas eficiente.

Siento voy por buen camino!

Me hizo recordar a la universidad cuando estaba viendo la materia de modelos de operaciones 1 cuando estudiaba la ruta mas corta, usando el modelo de transbordo. Que tiempos aquellos…

Se esta abriendo mi cerebrito!!!

no hizo falta comida-casa?

Genial!!

Nunca para de aprender, esa es la cuestión, seguro que al principio de la carrera de ing de sistemas lo vi, pero muy bueno recordarlo ahora y más para ponerlo en practica en nuestro trabajo y día a día. GENIAL!!!

Estructura de datos, la verdad no sabia nada, pero estoy poco a poco aprendiendo, ahora veo que casi todo funciona con las matematicas, no ssabia que las direcciones estan por las cordenadas de cuadro cartesiano, por el eje x y el eje y, y que asi se busca las direcciones, interesante.

Muy bien explicado !

Estos temas son muy interesantes, cuando logras comprender cómo se hace y para qué se hace es increíble.

El modelo de transporte es lineal o no lineal?

Estoy empezando de cero y el curso me va ubicando. Gracias.

Un ejercicio genial

Excelente explicación. Gracias

muy buena la explicacion

Matriz de adyacencias, viooo!!

Muy interesante la clase

Graciass

Excelente profe.

los espacios de memoria son en hexadecimal

Genial!! gracias 😃

Buenas tardes compañeros.

Como recién terminé el curso de fundamentos de matemáticas estaba buscando la semejanza entre función matemática(con posibilidad de graficarla en el plano cartesiano) y función computacional(compuesta por algoritmos y datos). Sin embargo el ejemplo que puso el profesor con la ruta de la casa a la escuela me confirma que no necesariamente una función computacional es igual a una función matemática. Las dos se componen por un input, un proceso(operación) y un output.

Pero la matemática si o si debe tener un único output para un input. En este caso la casa tiene dos posibilidades, o café(0,1) u comida(1,1) y son válidas ya que el computador SI puede leer y relacionar dos datos adyacentes, es decir, uno al lado del otro.

No se si tenga mucho sentido lo que acaba de concluir pero bueno, si alguien tiene algún comentario al respecto bienvenido sea! la idea es analizar, debatir y confrontar este tipo de cosas 😄 Exitos a todos con este maravilloso proceso de aprendizaje.

Me está gustando mucho este profesor. Claro y dinamico

muy buena,pero con mucha curiosidad

Me quedé con la duda de cómo avanza el problema jaja muy buena clase!

interesante

chevre

Es super intersante… 😃

Muy buena la clase, explicacion adecuada y pedagogica

Estructura de datos
- Forma organizada, estructurada y eficiente de guardar datos

Dos formas:
- Lineal: Se guarda de forma secuencial
- No lineal: Arboles y grafos

super interesante

ponele ganas a los dibujos, parece que los hubiese hecho un nene de jardin, y las letras tambien. la explicación esta joya

Espero podeer llenar los huecos que en la uni me dejaron

muy bueno

genial

Un ejemplo sencillo para entender este concepto,
Las estructuras de datos de cada lenguaje de programación se convierten en nuestros aliados para resolver los problemas.

Matriz de adyacencias. Matemáticas por todas partes, sí!

Es un buen ejemplo para introducir los conceptos.

Matrices, ay caramba!

Excelente! Este ejemplo me hace pensar en una manera de calificar la “eficiencia” de cada camino. Si pensamos que cada desplazamiento (Casa-Cafe; Casa-Comida; Etc) es un ciclo de procesamiento, el camino que requiera menos ciclos será pues, el mas corto o eficiente.

Hermosa clase, gracias!

Que bien escogido el ejemplo de adyacencias !

Estructura de datos
Los programas siempre trabajan con información.
Lineales: La info se guarda secuencialmente.
No lineales: Grafos, puntos de información dispersos que estan interconectados.

Excelente clase, muy buena explicación

La ruta casa - café - comida - escuela toma 3 pasos en cambio la ruta casa - comida - escuela solo tomaría 2 pasos, por eso también podría decirse que es más corta la segunda ruta

Se necesita mecanismo para guardar datos.

2 grandes familias de estructura de datos:

  • Lineales
    -No lineales

Excelente explicación!

La Matriz de datos es un modo de ordenar los datos de manera que sea particularmente visible la estructura tripartita de los datos

Matriz de datos
	Representa una relacion binaria entre el objeto y su posicion 
                
                [0,2 NULL] [1,2 NULL] [2,2 NULL] 
                [0,1 CAFE] [1,1 COMD] [2,1 ESCL] 
                [0,0 CASA] [1,0 NULL] [2,0 NULL] 

La matriz de adyacencia es una matriz cuadrada que se utiliza como una forma de representar relaciones binarias.

Construcción:

  1. Se crea una matriz cero, cuyas columnas y filas representan los nodos del grafo.

  2. Por cada arista que une a dos nodos, se suma 1 al valor que hay actualmente en la ubicación correspondiente de la matriz
    |
    Es muy utilizada en la programación, porque su naturaleza binaria y matricial calza perfecto con la de los computadores y ayuda a entender mejor una relacion entre elementos

     Matriz de adyacencias
     Con esto podemos ver cuales pares estan conectados entre si
    
                               Casa   cafe    comd   escu                    [casa,cafe]
                     Casa  |    0       1      1      0                      [casa,comd]
                     cafe  |    1       0      1      0      =====>          [cafe,casa]
                     comd  |    1       1      0      1                      [cafe,comd]
                     escu  |    0       0      1      0                      [comd,escl]
    

Tipos más comunes de estructuras de datos.

Definición de estructura de datos.

Grafos es algo que esta tomando mucha fuerza o por lo menos es lo que a mi me parece, ese tema me llama mucho la atencion

Muy buena clase, una manera fácil y entretenida de entender cosas relativamente difíciles