Changeset a41f3aa in git
- Timestamp:
- Feb 3, 2009, 9:55:43 PM (14 years ago)
- Branches:
- (u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
- Children:
- 8978fd7ad0324e27b4bd0928f5d34e5455656098
- Parents:
- 24d83d8a13d3531edee62ee0b18e34b0255301d7
- Location:
- kernel
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/f5data.cc
r24d83d ra41f3aa 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: f5data.cc,v 1. 1 2009-01-30 17:27:20ederc Exp $ */4 /* $Id: f5data.cc,v 1.2 2009-02-03 20:55:43 ederc Exp $ */ 5 5 /* 6 6 * ABSTRACT: lpolynomial definition … … 147 147 return *term; 148 148 } 149 150 LPoly* Rule::getOrigin() { 151 return origin; 152 } 149 153 #endif -
kernel/f5data.h
r24d83d ra41f3aa 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: f5data.h,v 1. 1 2009-01-30 17:27:20ederc Exp $ */4 /* $Id: f5data.h,v 1.2 2009-02-03 20:55:43 ederc Exp $ */ 5 5 /* 6 6 * ABSTRACT: labeled polynomial interface … … 47 47 48 48 /* 49 ========================================================50 structure of rules(i.e. already computed / known labels)51 ========================================================52 */53 class Rule {54 private:55 int* index; // index of the labeled polynomial the rule comes from56 poly* term; // term of the labeled polynomial the rule comes from57 public:58 Rule(int* i, poly* term);59 int getIndex();60 poly getTerm();61 };62 63 64 /*65 49 =================================== 66 50 structure of labeled critical pairs … … 89 73 }; 90 74 75 76 /* 77 ======================================================== 78 structure of rules(i.e. already computed / known labels) 79 ======================================================== 80 */ 81 class Rule { 82 private: 83 int* index; // index of the labeled polynomial the rule comes from 84 poly* term; // term of the labeled polynomial the rule comes from 85 LPoly* origin; // pointer of the LPoly which generated this rule (needed in criterion2()) 86 public: 87 Rule(int* i, poly* term); 88 int getIndex(); 89 poly getTerm(); 90 LPoly* getOrigin(); 91 }; 91 92 #endif 92 93 #endif -
kernel/f5gb.cc
r24d83d ra41f3aa 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: f5gb.cc,v 1.2 0 2009-01-30 17:25:04ederc Exp $ */4 /* $Id: f5gb.cc,v 1.21 2009-02-03 20:55:43 ederc Exp $ */ 5 5 /* 6 6 * ABSTRACT: f5gb interface … … 67 67 ================================================== 68 68 */ 69 LList* F5inc(int* i, poly* f_i, LList* gPrev, poly* ONE, RList* rules, LTagList* lTag) { 69 LList* F5inc(int* i, poly* f_i, LList* gPrev, poly* ONE) { 70 // tag the first element of index i-1 for criterion 1 71 LTagList* lTag = new LTagList(gPrev->getFirst()); 72 // first element in rTag is NULL, this must be done due to possible later improvements 73 RTagList* rTag = new RTagList(); 70 74 gPrev->insert(ONE,i,f_i); 71 75 CList* critPairs = new CList(); 72 critPairs = criticalPair(gPrev, critPairs, rules, lTag);76 critPairs = criticalPair(gPrev, critPairs, lTag, rTag); 73 77 74 78 return gPrev; … … 83 87 ================================================================ 84 88 */ 85 CList* criticalPair(LList* gPrev, CList* critPairs, RList* rules, LTagList* lTag) {89 CList* criticalPair(LList* gPrev, CList* critPairs, LTagList* lTag, RTagList* rTag) { 86 90 // initialization for usage in pLcm() 87 91 number nOne = nInit(1); … … 105 109 // testing both new labels by the F5 Criterion 106 110 if(!criterion1(u1, first, lTag) && !criterion1(u2, l, lTag) && 107 !criterion2(u1, first, r ules) && !criterion2(u2, l, rules)) {111 !criterion2(u1, first, rTag) && !criterion2(u2, l, rTag)) { 108 112 Print("Criteria passed\n"); 109 113 // if they pass the test, add them to CList critPairs, having the LPoly with greater … … 141 145 */ 142 146 bool criterion1(poly* t, LNode* l, LTagList* lTag) { 143 // start at the previously added element to gPrev, as all other elements will have the same index for sure147 // starts at the first element in gPrev with index = (index of l)-1, these tags are saved in lTag 144 148 LNode* testNode = lTag->get(l->getIndex()); 145 149 // save the monom t1*label_term(l) as it is tested various times in the following 146 150 poly u1 = ppMult_qq(*t,l->getTerm()); 147 151 while(NULL != testNode) { 148 //while(NULL != testNode && testNode->getIndex() == l->getIndex()) { 149 // testNode = testNode->getNext(); 150 //} 151 Print("%d\n", pLmDivisibleByNoComp(pHead(testNode->getPoly()),u1)); 152 if(NULL != testNode && pLmDivisibleByNoComp(pHead(testNode->getPoly()),u1)) { 152 if(pLmDivisibleByNoComp(pHead(testNode->getPoly()),u1)) { 153 153 return true; 154 154 } 155 155 testNode = testNode->getNext(); 156 157 } 158 // 25/01/2009: TO DO -> change return value, until now no element is added to CList! 156 } 159 157 return false; 160 158 } … … 165 163 ===================================== 166 164 */ 167 bool criterion2(poly* t, LNode* l, R List* rules) {165 bool criterion2(poly* t, LNode* l, RTagList* rTag) { 168 166 // start at the previously added element to gPrev, as all other elements will have the same index for sure 169 RNode* testNode = rules->getFirst(); 170 while(NULL != testNode->getRule()) { 171 while(NULL != testNode->getRule() && testNode->getRuleIndex() == l->getIndex()) { 172 testNode = testNode->getNext(); 173 } 174 if(NULL != testNode->getRule() && 175 pLmDivisibleByNoComp(ppMult_qq(*t,l->getTerm()),testNode->getRuleTerm())) { 167 RNode* testNode = rTag->get(l->getIndex()); 168 // save the monom t1*label_term(l) as it is tested various times in the following 169 poly u1 = ppMult_qq(*t,l->getTerm()); 170 // first element added to rTag was NULL, check for this 171 Print("Hier1\n"); 172 while(NULL != testNode && testNode->getRule()->getOrigin() != l->getLPoly()) { 173 Print("Hier2\n"); 174 if(pLmDivisibleByNoComp(ppMult_qq(*t,l->getTerm()),testNode->getRuleTerm())) { 176 175 return true; 177 176 } 178 177 testNode = testNode->getNext(); 179 180 } 181 // 25/01/2009: TO DO -> change return value, until now no element is added to CList! 182 178 } 183 179 return false; 184 180 } … … 198 194 i = 1; 199 195 LList* gPrev = new LList( &ONE, &i, &id->m[0]); 200 LTagList* lTag = new LTagList(gPrev->getFirst());201 196 poly* lcm = new poly; 202 197 // initialization for usage in pLcm() … … 231 226 pWrite(q); 232 227 for(i=2; i<=IDELEMS(id); i++) { 233 gPrev = F5inc(&i, &id->m[i-1], gPrev, &ONE, rules, lTag); 234 lTag->insert(gPrev->getFirst()); 228 gPrev = F5inc(&i, &id->m[i-1], gPrev, &ONE); 235 229 Print("JA\n"); 236 230 } -
kernel/f5gb.h
r24d83d ra41f3aa 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: f5gb.h,v 1. 19 2009-01-30 17:25:04ederc Exp $ */4 /* $Id: f5gb.h,v 1.20 2009-02-03 20:55:43 ederc Exp $ */ 5 5 /* 6 6 * ABSTRACT: f5gb interface … … 35 35 ================================================== 36 36 */ 37 LList* F5inc(int* i, poly* f_i, LList* gPrev, poly* ONE , RList* rules, LTagList* lTag);37 LList* F5inc(int* i, poly* f_i, LList* gPrev, poly* ONE); 38 38 39 39 /* … … 44 44 ================================================================ 45 45 */ 46 CList* criticalPair(LList* gPrev, CList* critPairs, RList* rules, LTagList* lTag);46 CList* criticalPair(LList* gPrev, CList* critPairs, LTagList* lTag, RTagList* rTag); 47 47 48 48 /* … … 58 58 ===================================== 59 59 */ 60 bool criterion2(poly* t, LNode* l, R List* rules);60 bool criterion2(poly* t, LNode* l, RTagList* rTag); 61 61 62 62 /* -
kernel/f5lists.cc
r24d83d ra41f3aa 557 557 */ 558 558 559 RTagNode::RTagNode() { 560 data = NULL; 561 next = NULL; 562 } 563 559 564 RTagNode::RTagNode(RNode* r) { 560 565 data = r; … … 588 593 // the element on position length-idx+1 is the right one 589 594 RNode* RTagNode::get(int idx, int length) { 590 if(idx == 1) {595 if(idx==1 || idx==0) { 591 596 return NULL; 592 597 } … … 594 599 int j; 595 600 RTagNode* temp = this; 596 for(j=1; j<=length-idx+1;j++) {601 for(j=1; j<=length-idx+1; j++) { 597 602 temp = temp->next; 598 603 } … … 607 612 ======================================= 608 613 */ 614 615 RTagList::RTagList() { 616 RTagNode* first = new RTagNode(); 617 length = 0; 618 } 609 619 610 620 RTagList::RTagList(RNode* r) { -
kernel/f5lists.h
r24d83d ra41f3aa 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: f5lists.h,v 1. 3 2009-01-30 17:25:04ederc Exp $ */4 /* $Id: f5lists.h,v 1.4 2009-02-03 20:55:43 ederc Exp $ */ 5 5 /* 6 6 * ABSTRACT: list interface … … 231 231 RTagNode* next; 232 232 public: 233 RTagNode(RNode* r); 234 RTagNode(RNode* r, RTagNode* n); 235 ~RTagNode(); 233 RTagNode(); 234 RTagNode(RNode* r); 235 RTagNode(RNode* r, RTagNode* n); 236 ~RTagNode(); 236 237 // declaration with first as parameter due to sorting of LTagList 237 238 RTagNode* insert(RNode* r); … … 251 252 int length; 252 253 public: 254 RTagList(); 253 255 RTagList(RNode* r); 254 256 ~RTagList();
Note: See TracChangeset
for help on using the changeset viewer.