(file) Return to acm2.cpp CVS log (file) (dir) Up to [RizwankCVS] / acm

Diff for /acm/acm2.cpp between version 1.6 and 1.8

version 1.6, 2005/02/16 07:49:34 version 1.8, 2005/02/16 08:32:30
Line 18 
Line 18 
 // ****************************************************************** // ******************************************************************
 class item { class item {
 public: public:
         float getRatio();  //      float getRatio();
         unsigned short getWeight();         unsigned short getWeight();
     unsigned short getCost();     unsigned short getCost();
         unsigned short getNumber();         unsigned short getNumber();
Line 26 
Line 26 
 private: private:
         unsigned short weight;         unsigned short weight;
         unsigned short cost;         unsigned short cost;
         float ratio;  //      float ratio;
         unsigned short number;         unsigned short number;
 }; };
  
Line 72 
Line 72 
 // ****************************************************************** // ******************************************************************
 struct item_comparator { struct item_comparator {
         bool operator()( item left, item right ) const         bool operator()( item left, item right ) const
         { return ( left.getRatio() < right.getRatio() ) ; }  //      { return ( left.getRatio() < right.getRatio() ) ; }
           { return 0 ; }  //same ratio to all, don't actually do a compare!
 } ; } ;
  
 // ****************************************************************** // ******************************************************************
Line 175 
Line 176 
         }         }
         else {         else {
                 temp = (float)((this->myBackpack->get_maxWeight()) - cur_weight);                 temp = (float)((this->myBackpack->get_maxWeight()) - cur_weight);
                 temp = temp * (this->myBackpack->get_Item(this->nextitem)).getRatio();  //              temp = temp * (this->myBackpack->get_Item(this->nextitem)).getRatio(); (ratio = 1!)
         }         }
         this->upper_bound = cur_value + temp;         this->upper_bound = cur_value + temp;
  
Line 214 
Line 215 
 // * FUNCTION : getRatio                IN : CLASS item                                         * // * FUNCTION : getRatio                IN : CLASS item                                         *
 // * Gets the Ratio for the current item.                                                       * // * Gets the Ratio for the current item.                                                       *
 // ****************************************************************** // ******************************************************************
 float item::getRatio(){  //float item::getRatio(){
         return ratio;  //      return ratio;
 }  //}
  
 // ****************************************************************** // ******************************************************************
 // * FUNCTION : getWeight               IN : CLASS item                                         * // * FUNCTION : getWeight               IN : CLASS item                                         *
Line 249 
Line 250 
 void item::setData(unsigned short weightage, unsigned short costage, unsigned short numerage){ void item::setData(unsigned short weightage, unsigned short costage, unsigned short numerage){
         this->cost = costage;         this->cost = costage;
         this->weight = weightage;         this->weight = weightage;
         this->ratio = ( (float)(cost)/(float)(weight) );  //      this->ratio = ( (float)(cost)/(float)(weight) );
   //      this->ratio = 1; //ratio = 1
         this->number = numerage;         this->number = numerage;
 } }
  
Line 272 
Line 274 
 // ****************************************************************** // ******************************************************************
 void backpack::putItem(unsigned short weight, unsigned short cost){ void backpack::putItem(unsigned short weight, unsigned short cost){
         item temp_item;         item temp_item;
         temp_item.setData(weight,cost,(int)(this->item_queue.size())+1);          temp_item.setData(weight,cost,(int)(this->item_queue.size())+1); // sometimes this starts at 2000?
         this->item_queue.push(temp_item);         this->item_queue.push(temp_item);
 } }
  
Line 378 
Line 380 
         }         }
         printf("======================================================\n");         printf("======================================================\n");
         printf("Totals:      %2d           %2d           %2d\n",totalitemsinserted, temp_key.getWeight(),  temp_key.getValue());         printf("Totals:      %2d           %2d           %2d\n",totalitemsinserted, temp_key.getWeight(),  temp_key.getValue());
         printf("Ratio :     %2.5f\n", ((float)temp_key.getValue()/(float)temp_key.getWeight()));  //      printf("Ratio :     %2.5f\n", ((float)temp_key.getValue()/(float)temp_key.getWeight()));
 } }
  
 // ****************************************************************** // ******************************************************************
Line 7412 
Line 7414 
  
         knapsackOne.store_item_array();         knapsackOne.store_item_array();
  
   /*
         for ( int i = 0; knapsackOne.get_totalItems() > i; i++){         for ( int i = 0; knapsackOne.get_totalItems() > i; i++){
                 temp_item=knapsackOne.get_Item(i);                 temp_item=knapsackOne.get_Item(i);
                 printf("Item Number %2d : %2d cost for %2d weight at ratio %2.3f\n", temp_item.getNumber(),  temp_item.getCost(), temp_item.getWeight(), temp_item.getRatio());                  printf("Item Number %2d : %2d cost for %2d weight at ratio %2.3f\n", temp_item.getNumber(),  temp_item.getCost(), temp_item.getWeight(), 1); //temp_item.getRatio());
         }         }
         printf("\n");         printf("\n");
   */ //--- we don't really want it all printed out, seriously.
  
         knapsackOne.branch_and_bound();         knapsackOne.branch_and_bound();
  
Line 7476 
Line 7479 
 user    0m0.062s user    0m0.062s
 sys     0m0.000s sys     0m0.000s
  
   
 Now, lets really ramp it up so that we can see optimzation effects Now, lets really ramp it up so that we can see optimzation effects
 n=2500! won't even care to list the numbers, no point! n=2500! won't even care to list the numbers, no point!
  
Line 7494 
Line 7498 
  
 Given that this is about the largest we can hope to achieve before INTMAX because a massive issue (we should really typedefine the container class), lets see what optimizations we can make to this code! Given that this is about the largest we can hope to achieve before INTMAX because a massive issue (we should really typedefine the container class), lets see what optimizations we can make to this code!
  
   must do 1 -
   move all the unsigned shorts to (other)
   the unsigned shorts are now ITEM_TYPE, a def earlier on (we could have done typedef here too, of course)
   real    0m2.928s
   user    0m1.999s
   sys     0m0.061s
   Slight increase.
   
   Bad things happen when we try to make it into floats, I just tired. floats can't be [] contents for an array ;p
   Doing unsigned long for now.
   goal 1 = stop ratio calculation and comparisons if at all possible!
   real time shot up!
   real    0m3.994s
   user    0m2.390s
   sys     0m0.046s
   
   (that being said, timse don't seem to be consistent. CVS is storing our versions, lets plow on)
   
   remove the comparator in the structcomparator
   real    0m2.830s
   user    0m2.030s
   sys     0m0.015s
   
   remove the printout of the items as inserted
   real    0m1.423s
   user    0m1.436s
   sys     0m0.015s
   
   
   
   
   we could really move the pqueue to a queue --- although don't we want to push bigger items to the top to fill it up faster?
   
   goal 1 - lets remove the double call to the creator function, weight=value ratio=1
  
  
                 */                 */


Legend:
Removed from v.1.6  
changed lines
  Added in v.1.8

Rizwan Kassim
Powered by
ViewCVS 0.9.2