Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
 def test_subsets(self):
     self.assertEqual(list(subsets([1, 2, 3], 2)),
                      [(1, 2), (1, 3), (2, 3)])
Exemple #4
0
    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))