def find_optimum(relation, k): formulas = get_all_formulas(relation, True) logger.info("# formulas: %s", len(formulas)) logger.debug("possible formulas: %s", relation_rep(formulas)) all_subsets = list(subsets(formulas, k)) logger.info("# subsets: %s", len(all_subsets)) subset_costs = map(lambda x: cost(x, relation), all_subsets) ordered = [x for x in sorted(zip(subset_costs, all_subsets), key=lambda x: x[0])] best_cost = ordered[0][0] best = filter(lambda x: x[0] == best_cost, ordered) return best_cost, best
def find_optimum(relation, k): """ Finds the optimum set of formulas and its cost. This method generates all formulas, all subsets of formulas and then calculates the cost for every one of them. This can be very slow.""" formulas = get_all_formulas(relation, True) logger.info('# formulas: %s', len(formulas)) logger.debug('possible formulas: %s', relation_rep(formulas)) all_subsets = list(subsets(formulas, k)) logger.info('# subsets: %s', len(all_subsets)) subset_costs = map(lambda x: cost(x, relation), all_subsets) ordered = [x for x in sorted(zip(subset_costs, all_subsets), key=lambda x: x[0])] best_cost = ordered[0][0] best = filter(lambda x: x[0] == best_cost, ordered) return best_cost, best
def test_subsets(self): self.assertEqual(list(subsets([1, 2, 3], 2)), [(1, 2), (1, 3), (2, 3)])
def test_subsets(self): s = [1,2,3] expected = [[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]] actual = utils.subsets(s) #print 'actual: %s' % actual self.assertItemsEqual(expected, actual)
return seqs, list(idxs) if __name__ == '__main__': s1 = "cardouker" s2 = "carder" print(s1, "vs", s2) seqs, idxs = calc_lcss(list(s1), list(s2)) print("Consequtive:") for s, i in zip(seqs, idxs): print(s, i) seqs, idxs = calc_lcss(list(s1), list(s2)) print("Nonconsequtive:") for s, i in zip(seqs, idxs): print(s, i) utils.subsets([1, 2, 7, 1, 3, 9]) def update_current_maxsubseq(current, new_seq, k, elapsed, row): """ Updates current sequence with longest elements of new_seq, if applicable, i.e. if there's space left or a longer subseq is available :param current: :param new_seq: :param k: :return: """ should_sort = False if len(current) < k: # there's space to add a subsequence, add it current.append((new_seq, elapsed, row))