[BACK]Return to dp-supp.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/dp-supp.c between version 1.20 and 1.21

version 1.20, 2001/10/09 01:36:05 version 1.21, 2002/01/28 00:54:41
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp-supp.c,v 1.19 2001/09/19 09:10:34 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/dp-supp.c,v 1.20 2001/10/09 01:36:05 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "base.h"  #include "base.h"
Line 162  void dp_mbase(NODE hlist,NODE *mbase)
Line 162  void dp_mbase(NODE hlist,NODE *mbase)
         while ( 1 ) {          while ( 1 ) {
                 insert_to_node(d,mbase,nvar);                  insert_to_node(d,mbase,nvar);
                 for ( i = nvar-1; i >= 0; ) {                  for ( i = nvar-1; i >= 0; ) {
                         d->d[i]++; d->td++;                          d->d[i]++;
                           d->td += MUL_WEIGHT(1,i);
                         for ( j = 0; j < n; j++ ) {                          for ( j = 0; j < n; j++ ) {
                                 if ( _dl_redble(dl[j],d,nvar) )                                  if ( _dl_redble(dl[j],d,nvar) )
                                         break;                                          break;
Line 171  void dp_mbase(NODE hlist,NODE *mbase)
Line 172  void dp_mbase(NODE hlist,NODE *mbase)
                                 for ( j = nvar-1; j >= i; j-- )                                  for ( j = nvar-1; j >= i; j-- )
                                         d->d[j] = 0;                                          d->d[j] = 0;
                                 for ( j = 0, td = 0; j < i; j++ )                                  for ( j = 0, td = 0; j < i; j++ )
                                         td += d->d[j];                                          td += MUL_WEIGHT(d->d[j],j);
                                 d->td = td;                                  d->td = td;
                                 i--;                                  i--;
                         } else                          } else
Line 500  void dp_sp(DP p1,DP p2,DP *rp)
Line 501  void dp_sp(DP p1,DP p2,DP *rp)
         n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;          n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;
         w = (int *)ALLOCA(n*sizeof(int));          w = (int *)ALLOCA(n*sizeof(int));
         for ( i = 0, td = 0; i < n; i++ ) {          for ( i = 0, td = 0; i < n; i++ ) {
                 w[i] = MAX(d1->d[i],d2->d[i]); td += w[i];                  w[i] = MAX(d1->d[i],d2->d[i]); td += MUL_WEIGHT(w[i],i);
         }          }
   
         NEWDL(d,n); d->td = td - d1->td;          NEWDL(d,n); d->td = td - d1->td;
Line 553  void _dp_sp_dup(DP p1,DP p2,DP *rp)
Line 554  void _dp_sp_dup(DP p1,DP p2,DP *rp)
         n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;          n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;
         w = (int *)ALLOCA(n*sizeof(int));          w = (int *)ALLOCA(n*sizeof(int));
         for ( i = 0, td = 0; i < n; i++ ) {          for ( i = 0, td = 0; i < n; i++ ) {
                 w[i] = MAX(d1->d[i],d2->d[i]); td += w[i];                  w[i] = MAX(d1->d[i],d2->d[i]); td += MUL_WEIGHT(w[i],i);
         }          }
   
         _NEWDL(d,n); d->td = td - d1->td;          _NEWDL(d,n); d->td = td - d1->td;
Line 604  void dp_sp_mod(DP p1,DP p2,int mod,DP *rp)
Line 605  void dp_sp_mod(DP p1,DP p2,int mod,DP *rp)
         n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;          n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;
         w = (int *)ALLOCA(n*sizeof(int));          w = (int *)ALLOCA(n*sizeof(int));
         for ( i = 0, td = 0; i < n; i++ ) {          for ( i = 0, td = 0; i < n; i++ ) {
                 w[i] = MAX(d1->d[i],d2->d[i]); td += w[i];                  w[i] = MAX(d1->d[i],d2->d[i]); td += MUL_WEIGHT(w[i],i);
         }          }
         NEWDL_NOINIT(d,n); d->td = td - d1->td;          NEWDL_NOINIT(d,n); d->td = td - d1->td;
         for ( i = 0; i < n; i++ )          for ( i = 0; i < n; i++ )
Line 630  void _dp_sp_mod_dup(DP p1,DP p2,int mod,DP *rp)
Line 631  void _dp_sp_mod_dup(DP p1,DP p2,int mod,DP *rp)
         n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;          n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;
         w = (int *)ALLOCA(n*sizeof(int));          w = (int *)ALLOCA(n*sizeof(int));
         for ( i = 0, td = 0; i < n; i++ ) {          for ( i = 0, td = 0; i < n; i++ ) {
                 w[i] = MAX(d1->d[i],d2->d[i]); td += w[i];                  w[i] = MAX(d1->d[i],d2->d[i]); td += MUL_WEIGHT(w[i],i);
         }          }
         _NEWDL(d,n); d->td = td - d1->td;          _NEWDL(d,n); d->td = td - d1->td;
         for ( i = 0; i < n; i++ )          for ( i = 0; i < n; i++ )
Line 656  void _dp_sp_mod(DP p1,DP p2,int mod,DP *rp)
Line 657  void _dp_sp_mod(DP p1,DP p2,int mod,DP *rp)
         n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;          n = p1->nv; d1 = BDY(p1)->dl; d2 = BDY(p2)->dl;
         w = (int *)ALLOCA(n*sizeof(int));          w = (int *)ALLOCA(n*sizeof(int));
         for ( i = 0, td = 0; i < n; i++ ) {          for ( i = 0, td = 0; i < n; i++ ) {
                 w[i] = MAX(d1->d[i],d2->d[i]); td += w[i];                  w[i] = MAX(d1->d[i],d2->d[i]); td += MUL_WEIGHT(w[i],i);
         }          }
         NEWDL(d,n); d->td = td - d1->td;          NEWDL(d,n); d->td = td - d1->td;
         for ( i = 0; i < n; i++ )          for ( i = 0; i < n; i++ )
Line 1537  void dp_rest(DP p,DP *rp)
Line 1538  void dp_rest(DP p,DP *rp)
   
 DL lcm_of_DL(int nv,DL dl1,DL dl2,DL dl)  DL lcm_of_DL(int nv,DL dl1,DL dl2,DL dl)
 {  {
         register int n, *d1, *d2, *d, td;          register int i, *d1, *d2, *d, td;
   
         if ( !dl ) NEWDL(dl,nv);          if ( !dl ) NEWDL(dl,nv);
         d = dl->d,  d1 = dl1->d,  d2 = dl2->d;          d = dl->d,  d1 = dl1->d,  d2 = dl2->d;
         for ( td = 0, n = nv; --n >= 0; d1++, d2++, d++ )          for ( td = 0, i = 0; i < nv; d1++, d2++, d++, i++ ) {
                 td += (*d = *d1 > *d2 ? *d1 : *d2 );                  *d = *d1 > *d2 ? *d1 : *d2;
                   td += MUL_WEIGHT(*d,i);
           }
         dl->td = td;          dl->td = td;
         return dl;          return dl;
 }  }

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.21

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>