Changeset: 5b1a2f2b07ad for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5b1a2f2b07ad
Modified Files:
monetdb5/extras/crackers/crackers_holistic.c
monetdb5/extras/crackers/crackers_holistic.h
monetdb5/extras/crackers/crackers_holistic.mal
Branch: holindex
Log Message:
Add extra cost models.
diffs (truncated from 410 to 300 lines):
diff --git a/monetdb5/extras/crackers/crackers_holistic.c
b/monetdb5/extras/crackers/crackers_holistic.c
--- a/monetdb5/extras/crackers/crackers_holistic.c
+++ b/monetdb5/extras/crackers/crackers_holistic.c
@@ -164,7 +164,7 @@ searchBAT(FrequencyNode* head,int bat_id
}
return temp;
}
-
+/*this function returns the maximum weight from the list and is used for the
following cost models: 1,3,5,7,9*/
FrequencyNode*
findMax(FrequencyNode* head)
{
@@ -187,34 +187,20 @@ findMax(FrequencyNode* head)
}
return ret_node;
}
-/*this function is used for the variation of the 1st cost model*/
+/*this function returns the maximum weight from the list and is used for the
following cost models: 2,4,6,8,10*/
FrequencyNode*
findMax_2(FrequencyNode* head)
{
FrequencyNode* temp;
FrequencyNode* ret_node=NULL;
double tmpW;
- //int bat;
temp=head->next;
tmpW=temp->weight;
- //bat=temp->bid;
while(temp!=NULL)
{
- if(temp->weight >= 0 && temp->f1 >0)
- {
- ret_node=temp;
- tmpW=temp->weight;
- break;
- }
- temp=temp->next;
- }
- temp=head->next;
- while(temp!=NULL)
- {
- if((temp->weight >= tmpW)&&(temp->f1 >0))
+ if((tmpW > 0) && (temp->weight >= tmpW))
{
tmpW=temp->weight;
- //bat=temp->bid;
ret_node=temp;
}
temp=temp->next;
@@ -223,7 +209,9 @@ findMax_2(FrequencyNode* head)
}
-/*this function updates the weights in the list in the first experiment (1st
cost model)*/
+/*The following function updates the weights in the list*/
+/*This cost model takes into consideration only the distance from the optimal
index.*/
+/*The initial weights are initialized to the distance from the optimal index
(NON-ZERO)*/
double
changeWeight_1(FrequencyNode* node,int N,int L1)
{
@@ -238,8 +226,9 @@ changeWeight_1(FrequencyNode* node,int N
/*fprintf(stderr,"W=%lf\n",node->weight);*/
return node->weight;
}
-
-/*this function updates the weights in the list in the second experiment (2nd
cost model)*/
+/*The following function updates the weights in the list*/
+/*This cost model takes into consideration only the distance from the optimal
index.*/
+/*The initial weights are initialized to 0 (ZERO)*/
double
changeWeight_2(FrequencyNode* node,int N,int L1)
{
@@ -252,6 +241,32 @@ changeWeight_2(FrequencyNode* node,int N
/*fprintf(stderr,"p=%d Sp=%lf d=%lf\n",p,Sp,d);*/
if (node->f1==0)
{
+ node->weight = 0;
+ }
+ else
+ {
+ node->weight = d;
+ }
+
+ /*fprintf(stderr,"W=%lf\n",node->weight);*/
+ return node->weight;
+}
+
+/*The following function updates the weights in the list*/
+/*This cost model takes into consideration both the frequency of the queries
that use the index and the distance from the optimal index.*/
+/*The initial weights are initialized to the distance from the optimal index
(NON-ZERO)*/
+double
+changeWeight_3(FrequencyNode* node,int N,int L1)
+{
+ int p; /*number of pieces in the index*/
+ double Sp; /*average size of each piece*/
+ double d; /*distance from optimal piece(L1)*/
+ p = node->c;
+ Sp =((double)N)/p;
+ d = Sp - L1;
+ /*fprintf(stderr,"p=%d Sp=%lf d=%lf\n",p,Sp,d);*/
+ if (node->f1==0)
+ {
node->weight = d;
}
else
@@ -261,28 +276,37 @@ changeWeight_2(FrequencyNode* node,int N
/*fprintf(stderr,"W=%lf\n",node->weight);*/
return node->weight;
}
-
-/*this function updates the weights in the list in the third experiment (3rd
cost model)*/
+/*The following function updates the weights in the list*/
+/*This cost model takes into consideration both the frequency of the queries
that use the index and the distance from the optimal index.*/
+/*The initial weights are initialized to 0 (ZERO)*/
double
-changeWeight_3(FrequencyNode* node,int N,int L1)
+changeWeight_4(FrequencyNode* node,int N,int L1)
{
- int p; /*number of pieces in the index*/
- double Sp; /*average size of each piece*/
- double d; /*distance from optimal piece(L1)*/
- p = node->c;
- Sp =((double)N)/p;
- d = Sp - L1;
- /*fprintf(stderr,"p=%d Sp=%lf d=%lf\n",p,Sp,d);*/
- if(d>0)
- node->weight = (double)(node->f1) + d;
- else
- node->weight = d;
+ int p; /*number of pieces in the index*/
+ double Sp; /*average size of each piece*/
+ double d; /*distance from optimal piece(L1)*/
+ p = node->c;
+ Sp =((double)N)/p;
+ d = Sp - L1;
+ /*fprintf(stderr,"p=%d Sp=%lf d=%lf\n",p,Sp,d);*/
+ if (node->f1==0)
+ {
+ node->weight = 0;
+ }
+ else
+ {
+ node->weight = (double)(node->f1) * d;
+ }
/*fprintf(stderr,"W=%lf\n",node->weight);*/
- return node->weight;
+ return node->weight;
}
+/*The following function updates the weights in the list*/
+/*This cost model takes into consideration the frequency of the queries that
use the index,*/
+/* the frequency of the queries that "hit" the range in the index and the
distance from the optimal index.*/
+/*The initial weights are initialized to the distance from the optimal index
(NON-ZERO)*/
double
-changeWeight_4(FrequencyNode* node,int N,int L1)
+changeWeight_5(FrequencyNode* node,int N,int L1)
{
int p; /*number of pieces in the index*/
double Sp; /*average size of each piece*/
@@ -307,7 +331,137 @@ changeWeight_4(FrequencyNode* node,int N
return node->weight;
}
+/*The following function updates the weights in the list*/
+/*This cost model takes into consideration the frequency of the queries that
use the index,*/
+/* the frequency of the queries that "hit" the range in the index and the
distance from the optimal index.*/
+/*The initial weights are initialized to 0 (ZERO)*/
+double
+changeWeight_6(FrequencyNode* node,int N,int L1)
+{
+ int p; /*number of pieces in the index*/
+ double Sp; /*average size of each piece*/
+ double d; /*distance from optimal piece(L1)*/
+ p = node->c;
+ Sp =((double)N)/p;
+ d = Sp - L1;
+ /*fprintf(stderr,"p=%d Sp=%lf d=%lf\n",p,Sp,d);*/
+ if (node->f1==0)
+ {
+ node->weight = 0;
+ }
+ else
+ {
+ if (node->f2!=0)
+ node->weight = ((double)(node->f1)/(double)(node->f2))
* d;
+ else
+ node->weight = (double)(node->f1) * d;
+ }
+ /*fprintf(stderr,"W=%lf\n",node->weight);*/
+ return node->weight;
+
+}
+/*The following function updates the weights in the list*/
+/*This cost model takes into consideration mainly the frequency of the queries
that use the index until the distance becomes equal to 0.*/
+/*The initial weights are initialized to 1 (NON-ZERO)*/
+double
+changeWeight_7(FrequencyNode* node,int N,int L1)
+{
+ int p; /*number of pieces in the index*/
+ double Sp; /*average size of each piece*/
+ double d; /*distance from optimal piece(L1)*/
+ p = node->c;
+ Sp =((double)N)/p;
+ d = Sp - L1;
+ /*fprintf(stderr,"p=%d Sp=%lf d=%lf\n",p,Sp,d);*/
+ if (d > 0)
+ {
+ node->weight = 1.0;
+ }
+ else if (d>0)
+ {
+ node->weight = (double)(node->f1);
+ }
+ /*fprintf(stderr,"W=%lf\n",node->weight);*/
+ return node->weight;
+}
+
+/*The following function updates the weights in the list*/
+/*This cost model takes into consideration mainly the frequency of the queries
that use the index until the distance becomes equal to 0.*/
+/*The initial weights are initialized to 0 (ZERO)*/
+double
+changeWeight_8(FrequencyNode* node,int N,int L1)
+{
+ int p; /*number of pieces in the index*/
+ double Sp; /*average size of each piece*/
+ double d; /*distance from optimal piece(L1)*/
+ p = node->c;
+ Sp =((double)N)/p;
+ d = Sp - L1;
+ /*fprintf(stderr,"p=%d Sp=%lf d=%lf\n",p,Sp,d);*/
+ if (d > 0)
+ {
+ node->weight = (double)(node->f1);
+ }
+ /*fprintf(stderr,"W=%lf\n",node->weight);*/
+ return node->weight;
+}
+
+/*The following function updates the weights in the list*/
+/*This cost model takes into consideration mainly the frequency of the queries
that use the index and*/
+/* the frequency of the queries that "hit" the range in the index.*/
+/*The initial weights are initialized to 1 (NON-ZERO)*/
+double
+changeWeight_9(FrequencyNode* node,int N,int L1)
+{
+ int p; /*number of pieces in the index*/
+ double Sp; /*average size of each piece*/
+ double d; /*distance from optimal piece(L1)*/
+ p = node->c;
+ Sp =((double)N)/p;
+ d = Sp - L1;
+ /*fprintf(stderr,"p=%d Sp=%lf d=%lf\n",p,Sp,d);*/
+
+ if (node->f1==0)
+ {
+ node->weight = 1.0;
+ }
+ else if (d>0)
+ {
+ if (node->f2!=0)
+ node->weight = ((double)(node->f1)/(double)(node->f2));
+ else
+ node->weight = (double)(node->f1);
+ }
+ /*fprintf(stderr,"W=%lf\n",node->weight);*/
+ return node->weight;
+
+}
+/*The following function updates the weights in the list*/
+/*This cost model takes into consideration mainly the frequency of the queries
that use the index and*/
+/* the frequency of the queries that "hit" the range in the index.*/
+/*The initial weights are initialized to 0 (ZERO)*/
+double
+changeWeight_10(FrequencyNode* node,int N,int L1)
+{
+ int p; /*number of pieces in the index*/
+ double Sp; /*average size of each piece*/
+ double d; /*distance from optimal piece(L1)*/
+ p = node->c;
+ Sp =((double)N)/p;
+ d = Sp - L1;
+ /*fprintf(stderr,"p=%d Sp=%lf d=%lf\n",p,Sp,d);*/
+ if (d>0)
+ {
+ if (node->f2!=0)
+ node->weight = ((double)(node->f1)/(double)(node->f2));
+ else
+ node->weight = (double)(node->f1);
+ }
+ /*fprintf(stderr,"W=%lf\n",node->weight);*/
+ return node->weight;
+
+}
void
deleteNode(FrequencyNode* head,int bat_id)
@@ -365,8 +519,9 @@ CRKzeroFrequency(int *vid)
return MAL_SUCCEED;
}
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list