Ir al contenido principal

Algoritmo Selección de Actividades en C++

Este fue el tema final para la exposición de mi proyecto en Técnicas de Construcción de Programas, recopile información de muchos sitios web para lograr entender y asi poder implementar. Espero que les guste este pequeño aporte.



Suponga que se cuenta con un conjunto S ={a1, . . . , an}, de actividades que necesitan usar un recurso que no puede ser usado sino por una actividad a la vez. Cada actividad ai tiene un tiempo inicial si y final fi asociados, tal que si≤ fi< ∞.

Las actividades ai y aj son compatibles si la intersección de los intervalos [si, fi) ∩[sj, fj) = φ.

El problema de selección de actividades:
Entrada: S = {a1, ..., an} si, fi1 ≤ i ≤ n
Salida: A ⊆ S: todas las actividades de A son mutuamente compatibles, y | A | es el máximo posible.


Las actividades representadas de forma grafica :


Los subconjuntos : {a3, a9, a11}, {a1, a4, a8, a11}, {a2, a4, a9, a11} estan compuestos de actividades mutuamente compatibles.

Criterio de selección voraz
  1. La parte fundamental de un algoritmo voraz es su criterio de seleccion voraz:
  2. Seleccionar la actividad que comience mas temprano.
  3. Seleccionar la actividad de menos duracion.
  4. Seleccionar la actividad que termine m as pronto.
  5. Seleccionar la actividad que menos solapamientos tenga con el resto de actividades candidatas.
  6. Para que puedan formar una solucion, debemos adjuntarles el criterio de completabilidad: que no se solape con las actividades ya seleccionadas.

Algoritmo


Implementación


Comentarios

Entradas populares de este blog

Autómata Finito Determinista - Código C++

En esta ocasión les traigo la implementación de un AFD en lenguaje C++. Un autómata finito determinista es una quíntupla que denotaremos de manera genérica por M=(Q,Σ,q0,δ,F) , donde: Q es un conjunto finito cuyos elementos llamaremos estados.  Σ es un alfabeto que llamamos alfabeto de entrada.  q0∈Q es un estado señalado que llamamos estado inicial.  F es un subconjunto de Q no vacío, cuyos elementos llamamos estados finales.  δ es una aplicación de Q×Σ→Q , que llamamos función de transición.  Para la implementación se utiliza una matriz de transición convirtiendo los símbolos y letras del alfabeto en indices de la matriz donde los estados son las FILAS y los símbolos son las COLUMNAS, por ejemplo: Tenemos un alfabeto Σ = {a, b, c}, entonces en la matriz de transición tomara la letra 'a' como indice 0 , letra 'b' indice 1 y letra 'c' indice 2. Lo mismo seria para las transiciones, pero allí no interesa que letra representa si no cuantos estados...

Collision Shapes - Box2D & SFML

En el ámbito del desarrollo de videojuegos y simulaciones interactivas, la gestión de colisiones es un componente crítico que determina la experiencia del usuario y la interactividad del entorno virtual. Desde las interacciones entre elementos del juego hasta las respuestas del entorno, las colisiones bien implementadas son esenciales para la jugabilidad y la inmersión.  En esta oportunidad, exploraremos en detalle el tema de las colisiones en 2D, centrándonos en la implementación de Collision Shapes y el uso del polimorfismo mediante dos herramientas populares: Box2D, un motor de física de código abierto, y SFML (Simple and Fast Multimedia Library), una biblioteca gráfica multiplataforma.  Con estas herramientas, podremos crear simulaciones y juegos con colisiones precisas y realistas, agregando profundidad y dinamismo a nuestros proyectos en dos dimensiones.   IDE: CodeBlocks: http://www.codeblocks.org/ v13.12 Library: SFML: http://www.sfml-dev.org/ v2.1 Box2...

Sobrecarga de operadores en C++

Cuando se trata de exprimir al máximo el potencial de C++, la sobrecarga de operadores emerge como una herramienta indispensable para la implementación de clases y estructuras personalizadas. Esta característica permite a los programadores adaptar el comportamiento de los operadores estándar del lenguaje a tipos de datos definidos por el usuario, otorgando un control sin precedentes sobre la sintaxis y la semántica del código. En este post les muestro como hacer operaciones en objetos creados por nosotros. El ejercicio trata de hacer operaciones básicas con matrices tales como: Matrix m1, m2, m3; // Matrix es una clase  m1 = m2; m3 = m1 + m2; m3 = m2 - m1 m1 += m3 Como se darán cuenta estos operadores son usados como "pan del día" para nuestros cálculos pero con tipos de datos primitivos, ya sean int, float, doble, etc.  La objetos que se operaran serán Matrices cuadradas de 4x4. Adicionalmente hice uso de templates (plantillas) y mostrarles algu...