version 1.32, 2004/04/15 08:14:13 |
version 1.34, 2004/04/22 07:52:38 |
|
|
* 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.31 2004/03/09 09:40:46 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/dp-supp.c,v 1.33 2004/04/15 08:44:15 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
Line 1994 LIST extract_initial_term(LIST f,int *weight,int n); |
|
Line 1994 LIST extract_initial_term(LIST f,int *weight,int n); |
|
|
|
DP extract_initial_term_from_dp(DP p,int *weight,int n) |
DP extract_initial_term_from_dp(DP p,int *weight,int n) |
{ |
{ |
int w,t,i; |
int w,t,i,top; |
MP m,r0,r; |
MP m,r0,r; |
DP dp; |
DP dp; |
|
|
if ( !p ) return 0; |
if ( !p ) return 0; |
w = -1; |
top = 1; |
for ( m = BDY(p); m; m = NEXT(m) ) { |
for ( m = BDY(p); m; m = NEXT(m) ) { |
for ( i = 0, t = 0; i < n; i++ ) |
for ( i = 0, t = 0; i < n; i++ ) |
t += weight[i]*m->dl->d[i]; |
t += weight[i]*m->dl->d[i]; |
if ( t > w ) { |
if ( top || t > w ) { |
r0 = 0; |
r0 = 0; |
w = t; |
w = t; |
|
top = 0; |
} |
} |
if ( t == w ) { |
if ( t == w ) { |
NEXTMP(r0,r); |
NEXTMP(r0,r); |
Line 2058 LIST dp_initial_term(LIST f,struct order_spec *ord) |
|
Line 2059 LIST dp_initial_term(LIST f,struct order_spec *ord) |
|
case IS_SPARSE_WEIGHT: |
case IS_SPARSE_WEIGHT: |
n = ord->nv; |
n = ord->nv; |
weight = (int *)ALLOCA(n*sizeof(int)); |
weight = (int *)ALLOCA(n*sizeof(int)); |
|
for ( i = 0; i < n; i++ ) weight[i] = 0; |
l = worb->length; |
l = worb->length; |
for ( i = 0; i < l; i++ ) |
for ( i = 0; i < l; i++ ) |
weight[worb->body.sparse_weight[i].pos] |
weight[worb->body.sparse_weight[i].pos] |
Line 2076 LIST highest_order(LIST f,int *weight,int n); |
|
Line 2078 LIST highest_order(LIST f,int *weight,int n); |
|
|
|
int highest_order_dp(DP p,int *weight,int n) |
int highest_order_dp(DP p,int *weight,int n) |
{ |
{ |
int w,t,i; |
int w,t,i,top; |
MP m; |
MP m; |
|
|
if ( !p ) return -1; |
if ( !p ) return -1; |
w = -1; |
top = 1; |
for ( m = BDY(p); m; m = NEXT(m) ) { |
for ( m = BDY(p); m; m = NEXT(m) ) { |
for ( i = 0, t = 0; i < n; i++ ) |
for ( i = 0, t = 0; i < n; i++ ) |
t += weight[i]*m->dl->d[i]; |
t += weight[i]*m->dl->d[i]; |
if ( t > w ) |
if ( top || t > w ) { |
w = t; |
w = t; |
|
top = 0; |
|
} |
} |
} |
return w; |
return w; |
} |
} |
Line 2134 LIST dp_order(LIST f,struct order_spec *ord) |
|
Line 2138 LIST dp_order(LIST f,struct order_spec *ord) |
|
case IS_SPARSE_WEIGHT: |
case IS_SPARSE_WEIGHT: |
n = ord->nv; |
n = ord->nv; |
weight = (int *)ALLOCA(n*sizeof(int)); |
weight = (int *)ALLOCA(n*sizeof(int)); |
|
for ( i = 0; i < n; i++ ) weight[i] = 0; |
l = worb->length; |
l = worb->length; |
for ( i = 0; i < l; i++ ) |
for ( i = 0; i < l; i++ ) |
weight[worb->body.sparse_weight[i].pos] |
weight[worb->body.sparse_weight[i].pos] |