Example #1
0
def apriori(min_support: int,
            transactionManager: TransactionManager,
            freq_items: List[FrequentItems] = []) -> List[FrequentItems]:

    if freq_items == []:
        unique_items = transactionManager.get_unique_items()
        first_set_items = [frozenset([frozenset([i]) for i in unique_items])]

        return apriori(min_support, transactionManager, first_set_items)

    sup_validator = lambda tx: transactionManager.get_support_count(
        tx) >= min_support
    next_freq_items = make_next_freq_items(freq_items[-1], sup_validator)
    if next_freq_items == frozenset():
        return freq_items

    new_freq_items = freq_items + [next_freq_items]
    return apriori(min_support, transactionManager, new_freq_items)