void FP_tree::powerset(int*prefix, int prefixlen, int* items, int current, int itlen, FSout* fout, int thread )const { if(current==itlen) { if(prefixlen!=0) { fout->printset(list[thread]->top, list[thread]->FS); fout->printSet(prefixlen, prefix, count[global_temp_order_array[thread][prefix[prefixlen-1]]]); } }else{ current++; powerset(prefix, prefixlen, items, current, itlen, fout, thread); current--; prefix[prefixlen++]=items[current++]; powerset(prefix, prefixlen, items, current, itlen, fout, thread); } }
void powerset(char **v, int n, struct node *up) { struct node me; if (!n) { putchar('['); while (up) { printf(" %s", up->s); up = up->prev; } puts(" ]"); } else { me.s = *v; me.prev = up; powerset(v + 1, n - 1, up); powerset(v + 1, n - 1, &me); } }
int main() { std::set<int> s = {2, 3, 5, 7}; auto pset = powerset(s); for (auto&& subset: pset) { std::cout << "{ "; char const* prefix = ""; for (auto&& e: subset) { std::cout << prefix << e; prefix = ", "; } std::cout << " }\n"; } }
std::set<Set> powerset(const Set& s, size_t n) { std::set<Set> result; if(n > 0) { std::set<Set> ps = powerset(s, n-1); for(auto&& ss : ps) { for(auto&& el : s) { Set subset(ss); subset.insert(el); result.insert(subset); } } result.insert(ps.begin(), ps.end()); } else { result.insert(Set()); } return result; }
int main() { int values[4] = { 2, 3, 5, 7 }; set_type test_set(values, values+4); powerset_type test_powerset = powerset(test_set); for (powerset_type::iterator iter = test_powerset.begin(); iter != test_powerset.end(); ++iter) { std::cout << "{ "; char const* prefix = ""; for (set_type::iterator iter2 = iter->begin(); iter2 != iter->end(); ++iter2) { std::cout << prefix << *iter2; prefix = ", "; } std::cout << " }\n"; } }
int main() { // this could be modified std::set<std::string> letters = { "Schedule A", "Schedule C", "Schedule D", "Schedule E", "Schedule F" }; // do not touch from here auto&& power = powerset(letters); for(auto&& set : power) { if(set.empty()) { continue; } std::cout << "\t- "; char comma[] = { '\0', ' ', '\0' }; for(auto&& elem : set) { std::cout << comma << elem; comma[0] = ','; } std::cout << '\n'; } }
int main(int argc, char **argv) { powerset(argv + 1, argc - 1, 0); return 0; }
void FP_tree::generate_all(int new_item_no, int thread, FSout* fout)const { powerset(prefix[thread], 0, list[thread]->FS, list[thread]->top, list[thread]->top+new_item_no, fout, thread); }
std::set<Set> powerset(const Set& s) { return powerset(s, s.size()); }