0

Estructuras de Datos en C# 10: Aplicaciones de estructuras de datos en la vida real

Introducción a la clase

En esta clase analizaremos cómo se aplican las estructuras de datos en la vida real, desde sistemas de bases de datos hasta inteligencia artificial. Veremos ejemplos concretos de cómo las estructuras de datos optimizan el rendimiento y facilitan la resolución de problemas en distintas áreas del desarrollo de software.

¿Qué obtendrás de esta clase?

  • Comprender la aplicación de listas, pilas, colas, árboles y grafos en entornos reales.
  • Aprender cómo las estructuras de datos mejoran el rendimiento en sistemas empresariales.
  • Implementar ejemplos prácticos en C#.
  • Analizar casos reales donde estas estructuras son fundamentales.

Aplicaciones de Estructuras de Datos en la Vida Real

Bases de datos y almacenamiento de información

Las bases de datos utilizan árboles y hash tables para organizar y acceder rápidamente a la información.

Ejemplo: Índices en bases de datos (B-Trees)

Las bases de datos como SQL Server y MySQL utilizan B-Trees para indexar y buscar datos eficientemente.

using System;
using System.Collections.Generic;

class BaseDatos
{
    static Dictionary<int, string> usuarios = new Dictionary<int, string>();

    static void Main()
    {
        usuarios.Add(101, "Ana");
        usuarios.Add(102, "Carlos");
        usuarios.Add(103, "Pedro");

        Console.WriteLine("Ingrese el ID de usuario:");
        int id = Convert.ToInt32(Console.ReadLine());

        if (usuarios.ContainsKey(id))
            Console.WriteLine("Usuario encontrado: " + usuarios[id]);
        else
            Console.WriteLine("Usuario no encontrado.");
    }
}

Aquí se usa un diccionario (O(1)), similar a cómo funcionan los índices en bases de datos.

Motores de búsqueda y sistemas de recomendación

Los motores de búsqueda como Google organizan páginas web usando árboles de búsqueda y grafos.
Los sistemas de recomendación, como Netflix o Spotify, usan grafos para conectar usuarios con contenido.

Ejemplo: Grafo de Recomendaciones

using System;
using System.Collections.Generic;

class Recomendador
{
    static Dictionary<string, List<string>> recomendaciones = new Dictionary<string, List<string>>();

    static void Main()
    {
        recomendaciones.Add("Acción", new List<string> { "Mad Max", "John Wick", "Gladiador" });
        recomendaciones.Add("Comedia", new List<string> { "Superbad", "Step Brothers", "The Office" });

        Console.WriteLine("Ingrese un género de película:");
        string genero = Console.ReadLine();

        if (recomendaciones.ContainsKey(genero))
            Console.WriteLine("Películas recomendadas: " + string.Join(", ", recomendaciones[genero]));
        else
            Console.WriteLine("No hay recomendaciones para ese género.");
    }
}

Este código simula un grafo de recomendaciones, similar al usado por plataformas de streaming.

Redes sociales y relaciones entre usuarios

Las redes sociales utilizan grafos para representar relaciones entre usuarios.

Ejemplo: Amigos en una red social con grafos

using System;
using System.Collections.Generic;

class RedSocial
{
    static Dictionary<string, List<string>> amigos = new Dictionary<string, List<string>>();

    static void Main()
    {
        amigos.Add("Carlos", new List<string> { "Ana", "Pedro" });
        amigos.Add("Ana", new List<string> { "Carlos", "Luis" });
        amigos.Add("Pedro", new List<string> { "Carlos" });

        Console.WriteLine("Ingrese el nombre de un usuario:");
        string usuario = Console.ReadLine();

        if (amigos.ContainsKey(usuario))
            Console.WriteLine("Amigos de " + usuario + ": " + string.Join(", ", amigos[usuario]));
        else
            Console.WriteLine("Usuario no encontrado.");
    }
}

Este código representa una red social usando un grafo, donde cada usuario tiene una lista de amigos conectados.

Gestión de tareas y procesamiento de eventos

Los sistemas operativos usan colas para gestionar tareas y eventos, asegurando que se procesen en orden.

Ejemplo: Sistema de impresión usando una cola

using System;
using System.Collections.Generic;

class Impresora
{
    static void Main()
    {
        Queue<string> trabajos = new Queue<string>();

        trabajos.Enqueue("Documento 1");
        trabajos.Enqueue("Documento 2");
        trabajos.Enqueue("Documento 3");

        while (trabajos.Count > 0)
        {
            Console.WriteLine("Imprimiendo: " + trabajos.Dequeue());
        }
    }
}

Aquí, una cola (FIFO) garantiza que los documentos se impriman en orden de llegada.

Inteligencia Artificial y Machine Learning

En IA y Machine Learning, los árboles de decisión y grafos se utilizan para clasificar datos y encontrar patrones.

Ejemplo: Clasificación de datos con un árbol de decisión (simulación)

using System;

class ArbolDecision
{
    static void Main()
    {
        Console.WriteLine("¿El objeto es redondo? (sí/no)");
        string respuesta = Console.ReadLine().ToLower();

        if (respuesta == "sí")
        {
            Console.WriteLine("¿Es pequeño? (sí/no)");
            string tamaño = Console.ReadLine().ToLower();

            if (tamaño == "sí")
                Console.WriteLine("Puede ser una manzana.");
            else
                Console.WriteLine("Puede ser una pelota.");
        }
        else
        {
            Console.WriteLine("Puede ser un libro.");
        }
    }
}

Este código simula un árbol de decisión, usado en modelos de clasificación en IA.

Comparación de Aplicaciones

AplicaciónEstructura de Datos Utilizada
Bases de datosÁrboles (B-Trees), Diccionarios
Motores de búsquedaÁrboles binarios, Hash Tables
Redes socialesGrafos
Gestión de tareasPilas, Colas
Inteligencia ArtificialÁrboles de decisión, Grafos

Caso de uso real

Un sistema de transporte usa grafos para calcular rutas óptimas entre ciudades, optimizando tiempo y costos.

Ejemplo en C#: Rutas con Grafos

using System;
using System.Collections.Generic;

class Rutas
{
    static Dictionary<string, List<string>> mapa = new Dictionary<string, List<string>>();

    static void Main()
    {
        mapa.Add("A", new List<string> { "B", "C" });
        mapa.Add("B", new List<string> { "A", "D", "E" });
        mapa.Add("C", new List<string> { "A", "F" });
        mapa.Add("D", new List<string> { "B" });
        mapa.Add("E", new List<string> { "B", "F" });
        mapa.Add("F", new List<string> { "C", "E" });

        Console.WriteLine("Ingrese ciudad de origen:");
        string origen = Console.ReadLine();

        Console.WriteLine("Ingrese ciudad de destino:");
        string destino = Console.ReadLine();

        if (mapa.ContainsKey(origen) && mapa[origen].Contains(destino))
            Console.WriteLine("Ruta directa disponible.");
        else
            Console.WriteLine("Ruta no directa, se necesita más conexiones.");
    }
}

Este programa modela una red de transporte con un grafo, simulando la conectividad entre ciudades.

Próxima clase: Aplicación de algoritmos en Arquitectura Clean

En la siguiente clase exploraremos cómo aplicar algoritmos y estructuras de datos dentro de Clean Architecture, garantizando modularidad, escalabilidad y separación de responsabilidades.

Fernando Sonego

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *