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

Deploy a Heroku con Laravel 5

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...

Árboles Binarios de Búsqueda en C++ | Recorrido por niveles (Amplitud)

Hola a todos en esta ocasión compartiré sobre este tema de Arboles Binarios de Búsqueda, como un poco de teoría para su mejor entendimiento seguidamente mostraré la implementación en lenguaje de programación C++. Primero una breve introducción a árboles. ¿Qué es un árbol? Un árbol es una estructura de datos no lineal puesto que cada elemento apunta a uno o varios elementos del mismo tipo; esto es dado un elemento, no hay un único camino a seguir. El elemento que apunta a otro es llamado padre, mientras que el elemento apuntado se conoce como hijo. Todos los elementos tienen un padre a excepción de la raíz. Puede decirse que un árbol esta formado por subárboles resaltando así su naturaleza recursiva . ¿Qué es un árbol binario? Un árbol binario es aquel es el que cada elemento apunta como máximo a otros 2 elementos, comúnmente llamados hijo izquierdo y hijo derecho. ¿Qué es un árbol binario de búsqueda? Un árbol binario de buque da o ABB, es un árbol bi...