void EncodingGraph::encode() {
SetIteratorEncodingSubGraph *itesg = subgraphs.iterator();
+ model_print("#SubGraph = %u", subgraphs.getSize());
while (itesg->hasNext()) {
EncodingSubGraph *sg = itesg->next();
sg->encode();
uint leftSize = 0, rightSize = 0, newSize = 0;
uint64_t totalCost = 0;
+ bool merge = false;
+// model_print("**************decideEdge*************\n");
+// model_print("LeftNode Size = %u\n", left->getSize());
+// model_print("rightNode Size = %u\n", right->getSize());
+// model_print("UnionSize = %u\n", left->s->getUnionSize(right->s));
+
if (leftGraph == NULL && rightGraph == NULL) {
leftSize = convertSize(left->getSize());
rightSize = convertSize(right->getSize());
newSize = (rightSize > newSize) ? rightSize : newSize;
totalCost = (newSize - leftSize) * left->elements.getSize() +
(newSize - rightSize) * right->elements.getSize();
+ if(leftSize == newSize && rightSize == newSize){
+ merge = true;
+ }
} else if (leftGraph != NULL && rightGraph == NULL) {
leftSize = convertSize(leftGraph->encodingSize);
rightSize = convertSize(right->getSize());
newSize = (rightSize > newSize) ? rightSize : newSize;
totalCost = (newSize - leftSize) * leftGraph->numElements +
(newSize - rightSize) * right->elements.getSize();
+ if(leftSize == newSize && rightSize == newSize){
+ merge = true;
+ }
} else {
//Neither are null
-
//Are we already merged?
if (leftGraph == rightGraph)
continue;
-
leftSize = convertSize(leftGraph->encodingSize);
rightSize = convertSize(rightGraph->encodingSize);
newSize = convertSize(leftGraph->estimateNewSize(rightGraph));
newSize = (rightSize > newSize) ? rightSize : newSize;
totalCost = (newSize - leftSize) * leftGraph->numElements +
(newSize - rightSize) * rightGraph->numElements;
+// model_print("LeftGraph size=%u\n", leftGraph->encodingSize);
+// model_print("RightGraph size=%u\n", rightGraph->encodingSize);
+// model_print("UnionGraph size = %u\n", leftGraph->estimateNewSize(rightGraph));
+ if(rightSize < 64 && leftSize < 64){
+ merge = true;
+ }
}
-
- if ((totalCost * CONVERSIONFACTOR) < eeValue) {
+// model_print("******************************\n");
+ if (merge) {
//add the edge
mergeNodes(left, right);
}