Menu iconMenu icon
Algoritmos y Estructuras de Datos con Python

Capítulo 1: Python y Algoritmos: Una Introducción

Capítulo 1: Ejercicios Prácticos

1. Reflexión sobre Algoritmos

Tarea: Escribe un breve ensayo (aproximadamente de 200-300 palabras) reflexionando sobre por qué los algoritmos son esenciales en tu vida diaria. Piensa en las diversas tareas que realizas y cómo los algoritmos, incluso si no es en un sentido computacional, desempeñan un papel en la optimización o estructuración de esas tareas.

2. El Zen de Python y Tú

Tarea: Explora el "Zen de Python" escribiendo import this en tu intérprete de Python. Elige tres aphorismos que resuenen más contigo y explica por qué, estableciendo paralelismos con cualquier experiencia personal o proyecto si es posible.

import this

3. Prototipado en Python

Tarea: Diseña un algoritmo simple (en papel o en tu mente) que ordene una lista de números en orden ascendente sin usar ninguna función de ordenamiento integrada. Ahora, prototipa este algoritmo en Python y pruébalo en una lista de números de muestra.

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break
    return arr

sample_list = [4, 2, 8, 1, 5]
sorted_list = bubble_sort(sample_list)
print(sorted_list)

4. Desafío de Visualización

Tarea: Utiliza la biblioteca matplotlib (o cualquier otra biblioteca de visualización que prefieras) para visualizar el número de iteraciones realizadas por tu algoritmo de ordenamiento (del ejercicio 3) para ordenar listas de longitudes variables (por ejemplo, 5, 10, 20, 50, 100 números). Esto te proporcionará información sobre el rendimiento de tu algoritmo a medida que aumenta el tamaño de los datos.

import matplotlib.pyplot as plt

def bubble_sort_visualized(arr):
    n = len(arr)
    iterations = 0
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            iterations += 1
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break
    return iterations

lengths = [5, 10, 20, 50, 100]
iterations_taken = [bubble_sort_visualized(list(range(i, 0, -1))) for i in lengths]

plt.plot(lengths, iterations_taken, marker='o')
plt.title('Iterations taken by Bubble Sort for lists of different lengths')
plt.xlabel('List Length')
plt.ylabel('Iterations')
plt.grid(True)
plt.show()

5. Traduciendo Python a Pseudocódigo

Tarea: Toma tu algoritmo de ordenamiento del ejercicio 3 y tradúcelo a pseudocódigo. Este ejercicio te ayudará a abstraerte de la sintaxis específica de Python y enfocarte en la lógica subyacente.

6. Python y Rendimiento

Tarea: Investiga el concepto de Bloqueo Global del Intérprete de Python (GIL, por sus siglas en inglés). Escribe una breve nota sobre qué es el GIL y cómo puede afectar el rendimiento de los programas de Python. Considera cómo esto podría influir en la elección de Python para ciertos tipos de tareas algorítmicas.

7. Exploración de la Comunidad

Tarea: Visita GitHub y explora proyectos de código abierto en Python relacionados con algoritmos. Clona un repositorio, ejecuta el código y trata de entender su estructura. Si te sientes ambicioso, contribuye al proyecto mejorando la documentación, optimizando el algoritmo, ¡o incluso dejando una estrella si lo encuentras valioso!

Bonus: Sumérgete en IA y Aprendizaje Automático

Tarea: Dado que Python está a la vanguardia de la IA y el Aprendizaje Automático, explora un tutorial básico sobre el uso de bibliotecas como TensorFlow o scikit-learn. Implementa un algoritmo simple, como un modelo de regresión lineal, y reflexiona sobre la experiencia.

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np

# Generate some sample data
X = np.random.rand(100, 1) * 10  # Random dataset of 100 values between 0 and 10
y = 2.5 * X + 5 + np.random.randn(100, 1) * 2  # Linear relation with some noise

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# Create a linear regression model
model = LinearRegression()
model.fit(X_train, y_train)

# Predict using the model
y_pred = model.predict(X_test)

# Calculate the mean squared error
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

Capítulo 1: Ejercicios Prácticos

1. Reflexión sobre Algoritmos

Tarea: Escribe un breve ensayo (aproximadamente de 200-300 palabras) reflexionando sobre por qué los algoritmos son esenciales en tu vida diaria. Piensa en las diversas tareas que realizas y cómo los algoritmos, incluso si no es en un sentido computacional, desempeñan un papel en la optimización o estructuración de esas tareas.

2. El Zen de Python y Tú

Tarea: Explora el "Zen de Python" escribiendo import this en tu intérprete de Python. Elige tres aphorismos que resuenen más contigo y explica por qué, estableciendo paralelismos con cualquier experiencia personal o proyecto si es posible.

import this

3. Prototipado en Python

Tarea: Diseña un algoritmo simple (en papel o en tu mente) que ordene una lista de números en orden ascendente sin usar ninguna función de ordenamiento integrada. Ahora, prototipa este algoritmo en Python y pruébalo en una lista de números de muestra.

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break
    return arr

sample_list = [4, 2, 8, 1, 5]
sorted_list = bubble_sort(sample_list)
print(sorted_list)

4. Desafío de Visualización

Tarea: Utiliza la biblioteca matplotlib (o cualquier otra biblioteca de visualización que prefieras) para visualizar el número de iteraciones realizadas por tu algoritmo de ordenamiento (del ejercicio 3) para ordenar listas de longitudes variables (por ejemplo, 5, 10, 20, 50, 100 números). Esto te proporcionará información sobre el rendimiento de tu algoritmo a medida que aumenta el tamaño de los datos.

import matplotlib.pyplot as plt

def bubble_sort_visualized(arr):
    n = len(arr)
    iterations = 0
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            iterations += 1
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break
    return iterations

lengths = [5, 10, 20, 50, 100]
iterations_taken = [bubble_sort_visualized(list(range(i, 0, -1))) for i in lengths]

plt.plot(lengths, iterations_taken, marker='o')
plt.title('Iterations taken by Bubble Sort for lists of different lengths')
plt.xlabel('List Length')
plt.ylabel('Iterations')
plt.grid(True)
plt.show()

5. Traduciendo Python a Pseudocódigo

Tarea: Toma tu algoritmo de ordenamiento del ejercicio 3 y tradúcelo a pseudocódigo. Este ejercicio te ayudará a abstraerte de la sintaxis específica de Python y enfocarte en la lógica subyacente.

6. Python y Rendimiento

Tarea: Investiga el concepto de Bloqueo Global del Intérprete de Python (GIL, por sus siglas en inglés). Escribe una breve nota sobre qué es el GIL y cómo puede afectar el rendimiento de los programas de Python. Considera cómo esto podría influir en la elección de Python para ciertos tipos de tareas algorítmicas.

7. Exploración de la Comunidad

Tarea: Visita GitHub y explora proyectos de código abierto en Python relacionados con algoritmos. Clona un repositorio, ejecuta el código y trata de entender su estructura. Si te sientes ambicioso, contribuye al proyecto mejorando la documentación, optimizando el algoritmo, ¡o incluso dejando una estrella si lo encuentras valioso!

Bonus: Sumérgete en IA y Aprendizaje Automático

Tarea: Dado que Python está a la vanguardia de la IA y el Aprendizaje Automático, explora un tutorial básico sobre el uso de bibliotecas como TensorFlow o scikit-learn. Implementa un algoritmo simple, como un modelo de regresión lineal, y reflexiona sobre la experiencia.

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np

# Generate some sample data
X = np.random.rand(100, 1) * 10  # Random dataset of 100 values between 0 and 10
y = 2.5 * X + 5 + np.random.randn(100, 1) * 2  # Linear relation with some noise

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# Create a linear regression model
model = LinearRegression()
model.fit(X_train, y_train)

# Predict using the model
y_pred = model.predict(X_test)

# Calculate the mean squared error
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

Capítulo 1: Ejercicios Prácticos

1. Reflexión sobre Algoritmos

Tarea: Escribe un breve ensayo (aproximadamente de 200-300 palabras) reflexionando sobre por qué los algoritmos son esenciales en tu vida diaria. Piensa en las diversas tareas que realizas y cómo los algoritmos, incluso si no es en un sentido computacional, desempeñan un papel en la optimización o estructuración de esas tareas.

2. El Zen de Python y Tú

Tarea: Explora el "Zen de Python" escribiendo import this en tu intérprete de Python. Elige tres aphorismos que resuenen más contigo y explica por qué, estableciendo paralelismos con cualquier experiencia personal o proyecto si es posible.

import this

3. Prototipado en Python

Tarea: Diseña un algoritmo simple (en papel o en tu mente) que ordene una lista de números en orden ascendente sin usar ninguna función de ordenamiento integrada. Ahora, prototipa este algoritmo en Python y pruébalo en una lista de números de muestra.

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break
    return arr

sample_list = [4, 2, 8, 1, 5]
sorted_list = bubble_sort(sample_list)
print(sorted_list)

4. Desafío de Visualización

Tarea: Utiliza la biblioteca matplotlib (o cualquier otra biblioteca de visualización que prefieras) para visualizar el número de iteraciones realizadas por tu algoritmo de ordenamiento (del ejercicio 3) para ordenar listas de longitudes variables (por ejemplo, 5, 10, 20, 50, 100 números). Esto te proporcionará información sobre el rendimiento de tu algoritmo a medida que aumenta el tamaño de los datos.

import matplotlib.pyplot as plt

def bubble_sort_visualized(arr):
    n = len(arr)
    iterations = 0
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            iterations += 1
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break
    return iterations

lengths = [5, 10, 20, 50, 100]
iterations_taken = [bubble_sort_visualized(list(range(i, 0, -1))) for i in lengths]

plt.plot(lengths, iterations_taken, marker='o')
plt.title('Iterations taken by Bubble Sort for lists of different lengths')
plt.xlabel('List Length')
plt.ylabel('Iterations')
plt.grid(True)
plt.show()

5. Traduciendo Python a Pseudocódigo

Tarea: Toma tu algoritmo de ordenamiento del ejercicio 3 y tradúcelo a pseudocódigo. Este ejercicio te ayudará a abstraerte de la sintaxis específica de Python y enfocarte en la lógica subyacente.

6. Python y Rendimiento

Tarea: Investiga el concepto de Bloqueo Global del Intérprete de Python (GIL, por sus siglas en inglés). Escribe una breve nota sobre qué es el GIL y cómo puede afectar el rendimiento de los programas de Python. Considera cómo esto podría influir en la elección de Python para ciertos tipos de tareas algorítmicas.

7. Exploración de la Comunidad

Tarea: Visita GitHub y explora proyectos de código abierto en Python relacionados con algoritmos. Clona un repositorio, ejecuta el código y trata de entender su estructura. Si te sientes ambicioso, contribuye al proyecto mejorando la documentación, optimizando el algoritmo, ¡o incluso dejando una estrella si lo encuentras valioso!

Bonus: Sumérgete en IA y Aprendizaje Automático

Tarea: Dado que Python está a la vanguardia de la IA y el Aprendizaje Automático, explora un tutorial básico sobre el uso de bibliotecas como TensorFlow o scikit-learn. Implementa un algoritmo simple, como un modelo de regresión lineal, y reflexiona sobre la experiencia.

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np

# Generate some sample data
X = np.random.rand(100, 1) * 10  # Random dataset of 100 values between 0 and 10
y = 2.5 * X + 5 + np.random.randn(100, 1) * 2  # Linear relation with some noise

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# Create a linear regression model
model = LinearRegression()
model.fit(X_train, y_train)

# Predict using the model
y_pred = model.predict(X_test)

# Calculate the mean squared error
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

Capítulo 1: Ejercicios Prácticos

1. Reflexión sobre Algoritmos

Tarea: Escribe un breve ensayo (aproximadamente de 200-300 palabras) reflexionando sobre por qué los algoritmos son esenciales en tu vida diaria. Piensa en las diversas tareas que realizas y cómo los algoritmos, incluso si no es en un sentido computacional, desempeñan un papel en la optimización o estructuración de esas tareas.

2. El Zen de Python y Tú

Tarea: Explora el "Zen de Python" escribiendo import this en tu intérprete de Python. Elige tres aphorismos que resuenen más contigo y explica por qué, estableciendo paralelismos con cualquier experiencia personal o proyecto si es posible.

import this

3. Prototipado en Python

Tarea: Diseña un algoritmo simple (en papel o en tu mente) que ordene una lista de números en orden ascendente sin usar ninguna función de ordenamiento integrada. Ahora, prototipa este algoritmo en Python y pruébalo en una lista de números de muestra.

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break
    return arr

sample_list = [4, 2, 8, 1, 5]
sorted_list = bubble_sort(sample_list)
print(sorted_list)

4. Desafío de Visualización

Tarea: Utiliza la biblioteca matplotlib (o cualquier otra biblioteca de visualización que prefieras) para visualizar el número de iteraciones realizadas por tu algoritmo de ordenamiento (del ejercicio 3) para ordenar listas de longitudes variables (por ejemplo, 5, 10, 20, 50, 100 números). Esto te proporcionará información sobre el rendimiento de tu algoritmo a medida que aumenta el tamaño de los datos.

import matplotlib.pyplot as plt

def bubble_sort_visualized(arr):
    n = len(arr)
    iterations = 0
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            iterations += 1
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break
    return iterations

lengths = [5, 10, 20, 50, 100]
iterations_taken = [bubble_sort_visualized(list(range(i, 0, -1))) for i in lengths]

plt.plot(lengths, iterations_taken, marker='o')
plt.title('Iterations taken by Bubble Sort for lists of different lengths')
plt.xlabel('List Length')
plt.ylabel('Iterations')
plt.grid(True)
plt.show()

5. Traduciendo Python a Pseudocódigo

Tarea: Toma tu algoritmo de ordenamiento del ejercicio 3 y tradúcelo a pseudocódigo. Este ejercicio te ayudará a abstraerte de la sintaxis específica de Python y enfocarte en la lógica subyacente.

6. Python y Rendimiento

Tarea: Investiga el concepto de Bloqueo Global del Intérprete de Python (GIL, por sus siglas en inglés). Escribe una breve nota sobre qué es el GIL y cómo puede afectar el rendimiento de los programas de Python. Considera cómo esto podría influir en la elección de Python para ciertos tipos de tareas algorítmicas.

7. Exploración de la Comunidad

Tarea: Visita GitHub y explora proyectos de código abierto en Python relacionados con algoritmos. Clona un repositorio, ejecuta el código y trata de entender su estructura. Si te sientes ambicioso, contribuye al proyecto mejorando la documentación, optimizando el algoritmo, ¡o incluso dejando una estrella si lo encuentras valioso!

Bonus: Sumérgete en IA y Aprendizaje Automático

Tarea: Dado que Python está a la vanguardia de la IA y el Aprendizaje Automático, explora un tutorial básico sobre el uso de bibliotecas como TensorFlow o scikit-learn. Implementa un algoritmo simple, como un modelo de regresión lineal, y reflexiona sobre la experiencia.

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np

# Generate some sample data
X = np.random.rand(100, 1) * 10  # Random dataset of 100 values between 0 and 10
y = 2.5 * X + 5 + np.random.randn(100, 1) * 2  # Linear relation with some noise

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# Create a linear regression model
model = LinearRegression()
model.fit(X_train, y_train)

# Predict using the model
y_pred = model.predict(X_test)

# Calculate the mean squared error
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")