Advertisement
Guest User

Algoritmo - Challenge 5

a guest
Jun 20th, 2011
359
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.16 KB | None | 0 0
  1. ////////////////////////////
  2. // ALGORITMO DEL PROGRAMA //
  3. ////////////////////////////
  4.  
  5. FUNCTION costesDe( <costes>, <decisones>, <nivelk> ){
  6.     - Declarar una variable <i> de tipo numérico
  7.     - Inicializar la variable <i> al valor "1"
  8.    
  9.     - Declarar una variable <costeAcumulado> de tipo numérico
  10.     - Inicializar la variable <costeAcumulado> al valor "0"
  11.    
  12.     MIENTRAS( <i> no sea mayor que <nivelk> ){
  13.         - Incrementar el valor de <costeAcumulado> en el producto de valor del elemento <i> de <costes> por el valor del elemento <i> de <decisiones>
  14.         - Incrementar el valor de <i> en una unidad
  15.     :fin-MIENTRAS
  16.    
  17.     RETORNA( costeAcumulado )
  18.    
  19. :fin-FUNCION
  20.  
  21. // ES LA MISMA, PERO POR SEGUIR EL ESQUEMA LAS MANTENGO SEPARADAS
  22. FUNCTION beneficioDe( <beneficios>, <decisones>, <nivelk> ){
  23.     - Declarar una variable <i> de tipo numérico
  24.     - Inicializar la variable <i> al valor "1"
  25.    
  26.     - Declarar una variable <beneficioAcumulado> de tipo numérico
  27.     - Inicializar la variable <beneficioAcumulado> al valor "0"
  28.    
  29.     MIENTRAS( <i> no sea mayor que <nivelk> ){
  30.         - Incrementar el valor de <beneficioAcumulado> en el producto de valor del elemento <i> de <beneficios> por el valor del elemento <i> de <decisiones>
  31.         - Incrementar el valor de <i> en una unidad
  32.     :fin-MIENTRAS
  33.    
  34.     RETORNA( beneficioAcumulado )
  35.    
  36. :fin-FUNCION
  37.  
  38. FUNCION buscar_optima( <costes>, <beneficios>, <n>, <capacidad>, <nivelk>, <x>, <<mejor>> ):
  39.  
  40.     - Asignar al elemento <nivelk> de <decisiones> el valor "0" // se decide no meter a la vaca k-ésima
  41.     MIENTRAS( el valor del elemento <nivelk> de <decisiones> no sea "2" ):
  42.         SI( el valor retornado por <costesDe(<costes>, <x>, <k>)> es menor o igual que <capacidad> ):
  43.             SI( <nivelk> es igual que <n> ):
  44.                 // SE TRATA DE UNA SECUENCIA DE DESIONES COMPLETA Y FACTIBLE
  45.                 // Mirar si el beneficio es mayor que el que se, y actualizarlo en ese caso
  46.                 - Declarar una variable <aux> de tipo numérico
  47.                 - Asignar a <aux> el valor retornado por <beneficioDe( <beneficios>, <x>, <k> )>
  48.                 SI( <aux> es mayor que <mejor> ):
  49.                     - Asignar a <mejor> el valor de <aux>
  50.                 :fin-SI
  51.             :SI-NO:
  52.                 // SE TRATA DE UNA SECUENCIA DE DECISIONES PARCIAL Y FACTIBLE
  53.                 // En este caso se sigue contruyendo una secuencia de decisiones completa
  54.                 - Incrementar el valor de <nivelk> en una unidad
  55.                 - Llamar a <buscar_optima(<costes>, <beneficios>, <n>, <p>, <nivelk>, <x>, <<mejor>> )>
  56.             :fin-SI
  57.         :SI-NO:
  58.             // SECUENCIA DE DECISIONES NO FACTIBLE
  59.             // En este caso se hace poda, que es simplemente continuar sin hacer nada
  60.         fin-SI:
  61.        
  62.         - Incrementar el elemento <nivelk> de <decisiones> en una unidad // "1" es que se decide meter a la vaca k
  63.        
  64.     fin-MIENTRAS
  65.    
  66. fin-FUNCION
  67.  
  68. PROGRAMA:
  69.  
  70.     - Declarar una variable <i> de tipo numérico
  71.     - Declarar una variable <tmp> de tipo numérico
  72.    
  73.     REPETIR mientras( queden líneas ):
  74.    
  75.         - Declarar una variable <numeroDec> de tipo numérico
  76.         - Declarar una variable <capacidad> de tipo numérico
  77.        
  78.         - Declarar un contenedor <pesos> de tipo vector de elementos de tipo numérico
  79.         - Declarar un contenedor <beneficios> de tipo vector de elementos de tipo numérico
  80.  
  81.         - Leer un número y asignarlo a <numeroDec>
  82.         - Leer un número y asignarlo a <capacidad>
  83.        
  84.         // LEER LOS COSTES
  85.         - Asignar a <i> el valor "0"
  86.         MIENTRAS( el valor de <i> sea menor que el valor de <numeroDec> ):
  87.             - Leer un número y asignarlo a <tmp>
  88.             - Añadir por el final de <costes> el valor <tmp>
  89.             - Incrementar el valor de <i> en una unidad
  90.         :fin-MIENTRAS
  91.        
  92.         // LEER LOS BENEFICIOS
  93.         - Asignar a <i> el valor "0"
  94.         MIENTRAS( el valor de <i> sea menor que el valor de <numeroDec> ):
  95.             - Leer un número y asignarlo a <tmp>
  96.             - Añadir por el final de <beneficios> el valor <tmp>
  97.             - Incrementar el valor de <i> en una unidad
  98.         :fin-MIENTRAS
  99.        
  100.         - Declarar un contenedor <decisiones> de tipo vector de elementos de tipo numérico
  101.         - Ajustar el tamaño de <decisiones> al valor de <numeroDec>
  102.        
  103.         // LLAMADA AL ALGORITMO DE BACKTRACKING
  104.         - Llamar a la función <buscar_optima( <pesos>, <beneficios>, <n>, <p>, "1", <tupla>, <<tmp> )>
  105.        
  106.         // MOSTRAR EL RESULTADO
  107.         - Mostrar el valor de <tmp>
  108.     :fin-MIENTRAS
  109. :fin-PROGRAMA
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement