diff --git a/test.c b/test.c index b9600ee..e9163c4 100644 --- a/test.c +++ b/test.c @@ -107,7 +107,7 @@ int main(int argc, const char *argv[]) for(int i = 0; i < order; i++) reduced[i] = reduced[group[i]]; - // count cosets + // step 4: assign indices to cosets ncosets = 0; for(int i = 0; i < order; i++) if(reduced[i] == i) @@ -124,7 +124,7 @@ int main(int argc, const char *argv[]) seen = (int*) malloc(ncosets*sizeof(int)); edgelists_simplified_used = 0; - // copy minima + // step 5: set up nodes from minima current = 0; for(int i = 0; i < order; i++) if(reduced[i] == i) { // is minimum @@ -139,7 +139,7 @@ int main(int argc, const char *argv[]) for(int i = 0; i < ncosets; i++) fprintf(stderr, "%s <=> %s\n", simplified_graph[i].wordlength == 0 ? "1" : alphabetize(simplified_graph[i].word, simplified_graph[i].wordlength, alphabet, buffer), simplified_graph[simplified_graph[i].opposite].wordlength == 0 ? "1" : alphabetize(simplified_graph[simplified_graph[i].opposite].word, simplified_graph[simplified_graph[i].opposite].wordlength, alphabet, buffer2)); - // find order relations + // step 6: find order relations for(int i = 0; i < order; i++) { edge = graph[i].bruhat_lower; while(edge) { @@ -149,8 +149,6 @@ int main(int argc, const char *argv[]) // found something if(!edgelist_contains(simplified_graph[this].bruhat_lower, that)) simplified_graph[this].bruhat_lower = edgelist_add(simplified_graph[this].bruhat_lower, that, edgelists_simplified, &edgelists_simplified_used); - // if(!edgelist_contains(simplified_graph[that].bruhat_higher, this)) - // simplified_graph[that].bruhat_higher = edgelist_add(simplified_graph[that].bruhat_higher, this, edgelists_simplified, &edgelists_simplified_used); ERROR(simplified_graph[this].wordlength <= simplified_graph[that].wordlength, "The order assumption is being violated!\n"); } edge = edge->next; @@ -159,7 +157,7 @@ int main(int argc, const char *argv[]) fprintf(stderr, "\nAdded %d edges.\n\n", edgelists_simplified_used); - // remove redundant edges + // step 7: remove redundant edges for(int i = 0; i < ncosets; i++) { memset(seen, 0, ncosets*sizeof(int)); queue_init(&queue); @@ -203,7 +201,7 @@ int main(int argc, const char *argv[]) } } - // reverse order + // step 8: revert order for(int i = 0; i < ncosets; i++) { edge = simplified_graph[i].bruhat_lower; while(edge) { @@ -214,9 +212,8 @@ int main(int argc, const char *argv[]) } } - + // output as graphviz dot file fprintf(stdout, "digraph test123 {\n"); - for(int i = 0; i < ncosets; i++) { edge = simplified_graph[i].bruhat_lower; while(edge) { @@ -227,19 +224,12 @@ int main(int argc, const char *argv[]) edge = edge->next; } } - fprintf(stdout, "}\n"); long nthickenings = enumerate_balanced_thickenings(type, simplified_graph, ncosets, alphabet, stdout); fprintf(stderr, "Found %ld balanced thickenings.\n", nthickenings); - /* for(int i = 0; i < order; i++) - printf("%s <= %s\n", - reduced[i] == 0 ? "1" : alphabetize(graph[reduced[i]].word, graph[reduced[i]].wordlength, alphabet, buffer2), - i == 0 ? "1" : alphabetize(graph[i].word, graph[i].wordlength, alphabet, buffer)); */ - - free(seen); free(simplified_graph); free(edgelists_simplified); diff --git a/thickenings.c b/thickenings.c index f468733..4855d62 100644 --- a/thickenings.c +++ b/thickenings.c @@ -365,19 +365,22 @@ static long enumerate_tree(const enumeration_info_t *info, signed char *level, i level[head] = HEAD_MARKER; int is_slim = transitive_closure(info, level, head, current_level); - int is_fat; + int is_balanced = 0; int count = 0; // we have a candidate, check if it is a balanced thickening; if so, write to stdout if(is_slim) { - is_fat = 1; + is_balanced = 1; for(int i = head - 1; i >= 0; i--) if(level[i] == 0) - is_fat = 0; + is_balanced = 0; + } - output_thickening(info, level, current_level, is_slim, is_fat, count); + // comment this out (or just put it inside the if block) to save 1/3 of the runtime + output_thickening(info, level, current_level, is_slim, is_balanced, count); - if(is_fat) { + if(is_slim) { + if(is_balanced) { count++; fwrite(level, sizeof(signed char), info->size, info->outfile); } else {