void Solver::constraints_create(int s, int t, int n){ // vector to store edges of complete graph std::vector<BIGINT> v; // calculate edges int e=n*(n-1)/2, i; Constraint c; std::vector<int> tmp; // computing minimum size of constraint int shift = (n-1)*(n-2)/2; // remove all unnecessary constraints BIGINT min_constraint = 1; min_constraint<<=shift; // get combinations for K_s v.clear(); tmp.clear(); get_combinations(v,n,s,tmp,-1); c.sign = '<'; c.rhs = s*(s-1)/2; for (i=0;i<v.size();++i){ c.lhs = v[i]; if (c.lhs >= min_constraint) constraint_add(c); //constraint_add(c); } // get combinations for K_t v.clear(); tmp.clear(); get_combinations(v,n,t,tmp,-1); c.sign = '>'; c.rhs = 0; for (i=0;i<v.size();++i){ c.lhs = v[i]; if (c.lhs >= min_constraint) constraint_add(c); //constraint_add(c); } }
int main_(){ std::vector<BIGINT> v; std::vector<int> tmp; // get combinations for K_s v.clear(); tmp.clear(); int n = 6; int s = 3; get_combinations(v,n,s,tmp,-1); }
void do_statistical_tests() { #ifndef TRACK_STATISTICS printf("Enable TRACK_STATISTICS to do statistical tests...\n"); return ; #else /* some sizes test to see how the bitfield or rather hashing function behaves depending on its size. */ unsigned int sizes_to_test[] = {10000, /* 10 thousands bits, about 1.25 kilobytes. */ 100000, /* 12.5 kilobytes. */ 1000000, /* 125 kilobytes */ 10000000 /* 1.25 megabytes. */}, number_of_sizes = 4, index_0, index_1, number_of_strings = 10000; /* create two set of strings both of which are completely disjoint (if the empty string is excluded), in principles their shouldn't be any collisions. */ char **inserted_strings = get_combinations(number_of_strings, "abcdefghi"), **non_inserted_strings = get_combinations(number_of_strings, "jklmnopqr"); printf("Testing with combinations.\n"); membership_type *membership; for (index_0 = 0; index_0 < number_of_sizes; index_0++) { membership = create_membership(sizes_to_test[index_0]); /* create a new membership. */ for (index_1 = 1; index_1 <= number_of_strings; index_1++) /* skip over the empty string */ insert_string(membership, inserted_strings[index_1]); for (index_1 = 1; index_1 <= number_of_strings; index_1++) /* skip over the empty string */ if (!is_member(membership, inserted_strings[index_1], 1)) error("Failed to insert value!"); for (index_1 = 1; index_1 <= number_of_strings; index_1++) is_member(membership, non_inserted_strings[index_1], 0); printf("Bitfield size %u number_of_strings %u\n", sizes_to_test[index_0], number_of_strings); printf("%u, %f%% collisions while inserting.\n", (unsigned int)(number_of_strings - membership->number_of_set_bits), (((unsigned int)(number_of_strings - membership->number_of_set_bits)/(double)(number_of_strings)) * 100)); printf("%u, %f%% collisions while searching.\n", (unsigned int)(membership->number_of_false_positives), (((unsigned int)(membership->number_of_false_positives)/(double)(number_of_strings)) * 100) ); printf("\n"); free_membership(membership); } for (index_0 = 0; index_0 < number_of_strings + 1; index_0++) { free(inserted_strings[index_0]); free(non_inserted_strings[index_0]); } printf("Testing with permutations.\n"); inserted_strings = permute_string("abcdefghi", number_of_strings); non_inserted_strings = permute_string("jklmnopqr", number_of_strings); for (index_0 = 0; index_0 < number_of_sizes; index_0++) { membership = create_membership(sizes_to_test[index_0]); /* create a new membership. */ for (index_1 = 0; index_1 < number_of_strings; index_1++) insert_string(membership, inserted_strings[index_1]); for (index_1 = 0; index_1 < number_of_strings; index_1++) if (!is_member(membership, inserted_strings[index_1], 1)) error("Failed to insert value!"); for (index_1 = 0; index_1 < number_of_strings; index_1++) is_member(membership, non_inserted_strings[index_1], 0); printf("Bitfield size %u number_of_strings %u\n", sizes_to_test[index_0], number_of_strings); printf("%u, %f%% collisions while inserting.\n", (unsigned int)(number_of_strings - membership->number_of_set_bits), (((unsigned int)(number_of_strings - membership->number_of_set_bits)/(double)(number_of_strings)) * 100)); printf("%u, %f%% collisions while searching.\n", (unsigned int)(membership->number_of_false_positives), (((unsigned int)(membership->number_of_false_positives)/(double)(number_of_strings)) * 100) ); printf("\n"); free_membership(membership); } for (index_0 = 0; index_0 < number_of_strings; index_0++) { free(inserted_strings[index_0]); free(non_inserted_strings[index_0]); } #endif }