X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-test.git;a=blobdiff_plain;f=yarrg%2Frssearch.c;h=1dd29e5bfa2dc23293b640b41a44186851f96b3f;hp=23d2ece5eb8541ccc2616fd8ae749d0966759b3b;hb=8cbcdefaf39ea525ea12957a115b8d78d88566c4;hpb=b0df3bd887cce71fdbd60332b89db0a076b1ee4e diff --git a/yarrg/rssearch.c b/yarrg/rssearch.c index 23d2ece..1dd29e5 100644 --- a/yarrg/rssearch.c +++ b/yarrg/rssearch.c @@ -43,7 +43,7 @@ static Bucket ***buckets_base[GRANUS]; static double process_route(int nports, int totaldist, double overestimate_excepting_tail) { - int i, ap; + int i, ap, granui; int leagues_divisor= totaldist + nports; ctr_routes_considered++; @@ -79,12 +79,15 @@ static double process_route(int nports, int totaldist, return guess[A]; } - if (guess[A] <= highscores[granus-1][A][0].value && - guess[P] <= highscores[granus-1][P][0].value) { - ctr_routes_quickelim++; - debugf(" QELIM %f %f\n", guess[A], guess[P]); - return guess[A]; + for (granui=0; granui highscores[granui][A][0].value || + guess[P] > highscores[granui][P][0].value) + goto not_quickelim; } + ctr_routes_quickelim++; + debugf(" QELIM %f %f\n", guess[A], guess[P]); + return guess[A]; + not_quickelim:; } int finisle= ports[nports-1]; @@ -94,7 +97,6 @@ static double process_route(int nports, int totaldist, int midarch= route2midarch(ports,nports); Bucket *buckets[GRANUS]; - int granui; for (granui=0; granui=2) { - if (guess[A] <= buckets[0]->prs[A].value[A] && - guess[P] <= buckets[0]->prs[P].value[P]) { - ctr_routes_bucketelim++; - debugf(" ELIM %f %f\n", guess[A], guess[P]); - return guess[A]; - } + for (granui=0; granui buckets[granui]->prs[ap].value[ap] && + guess[ap] > highscores[granui][ap][0].value) + goto not_bucketelim; + ctr_routes_bucketelim++; + debugf(" ELIM %f %f\n", guess[A], guess[P]); + return guess[A]; + not_bucketelim: debugf(" COMPUTE %f %f\n", guess[A], guess[P]); } @@ -151,6 +156,7 @@ static double process_route(int nports, int totaldist, } else { int pos; ctr_newbests_granu[granui*AP+ap]++; + bucket->prs[ap].length= totaldist; memcpy(bucket->prs[ap].value, value, sizeof(value)); memcpy(bucket->prs[ap].ports, ports, sizeof(*ports) * nports); if (nports < MAX_ROUTELEN-1) bucket->prs[ap].ports[nports]= -1; @@ -162,7 +168,7 @@ static double process_route(int nports, int totaldist, found: for (;;) { pos++; - if (pos >= nscores-1) break; /* new top */ + if (pos >= nscores) break; /* new top */ if (scores[pos].value >= value[ap]) break; /* found spot */ if (pos>0) scores[pos-1]= scores[pos];