X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.web-live.git;a=blobdiff_plain;f=yarrg%2Frssearch.c;h=31ec3d76b7ab12b842f15cf73a309331d87c8290;hp=5ad6136180fa528ab220c06b8c74ad78771954af;hb=7ad4d18b7d353d1b068bdc47a3a98351175e09f8;hpb=65f040fe1768142719f2ac268904ed0e1d8f1ec0 diff --git a/yarrg/rssearch.c b/yarrg/rssearch.c index 5ad6136..31ec3d7 100644 --- a/yarrg/rssearch.c +++ b/yarrg/rssearch.c @@ -95,13 +95,13 @@ static double process_route(int nports, int totaldist, PotentialResult *buckets[GRANUS]; int granui; - for (granui=mingranu; granui=2) { - if (guess[A] <= buckets[mingranu]->value[A] && - guess[P] <= buckets[mingranu]->value[P]) { + if (guess[A] <= buckets[0]->value[A] && + guess[P] <= buckets[0]->value[P]) { ctr_routes_bucketelim++; debugf(" ELIM %f %f\n", guess[A], guess[P]); return guess[A]; @@ -129,7 +129,7 @@ static double process_route(int nports, int totaldist, return value[0]; } - for (granui=mingranu; granui=0; granui--) { PotentialResult *bucket= buckets[granui]; if (value[A] <= bucket->value[A] && @@ -139,6 +139,7 @@ static double process_route(int nports, int totaldist, debugf(" SOMEHOW %d BEST\n",granui); fildebugf("final %d:%3d mid %d ",finarch,finisle,midarch); + int relevant=0; for (ap=0; apvalue[ap]= value[ap]; memcpy(bucket->ports[ap], ports, sizeof(*ports) * nports); if (nports < MAX_ROUTELEN-1) bucket->ports[ap][nports]= -1; @@ -170,11 +171,16 @@ static double process_route(int nports, int totaldist, if (pos>0) { scores[pos].value= value[ap]; scores[pos].pr= bucket; + relevant=1; } fildebugf("@%2d", pos); - } - } - } + } /* new best */ + } /* ap */ + if (!relevant) + /* both absolute and perleague are full at this granularity, + * so we don't care about anything more granular */ + granus= granui+1; + } /* granui */ fildebugf(" route"); @@ -215,7 +221,7 @@ void search(int start_isle, int final_isle_spec, int nhighscores[GRANUS][AP]; HighScoreEntry *highscores[GRANUS][AP]; -int mingranu, granusz_fin[GRANUS], granusz_mid[GRANUS]; +int granus=GRANUS, granusz_fin[GRANUS], granusz_mid[GRANUS]; int narches; char **archnames; @@ -254,7 +260,7 @@ void setup_search(void) { } sqlite3_finalize(archs); - granusz_fin[0]= granusz_mid[0]= islandtablesz; + granusz_fin[0]= granusz_mid[0]= narches; granusz_fin[1]= islandtablesz; granusz_mid[1]= narches; - granusz_fin[2]= granusz_mid[2]= narches; + granusz_fin[2]= granusz_mid[2]= islandtablesz; }