view python/dp.py @ 6:661876a2502e

py: dp
author Lewin Bormann <lbo@spheniscida.de>
date Sun, 19 Feb 2023 12:50:44 +0100
parents
children 809f7d058647
line wrap: on
line source


from functools import cache


@cache
def number_of_binary_trees(n):
    if n == 0:
        return 1
    elif n == 1:
        return 1
    else:
        N = 0
        for i in range(0, n):
            N += number_of_binary_trees(i) * number_of_binary_trees(n-i-1)
        return N

@cache
def number_of_full_binary_trees(n):
    if n <= 1:
        return 1
    elif n%2 == 0:
        return 0
    else:
        N = 0
        # Only odd numbers possible.
        for nleft in range(1, n, 2):
            nright = n-1-nleft
            N += number_of_full_binary_trees(nleft) * number_of_full_binary_trees(nright)
        return N

@cache
def circle_chords(n):
    if n <= 1:
        return 0
    elif n == 2:
        return 1
    else:
        N = 0
        for i in range(0, n):
            for j in range(i+1, n):
                left = j - i - 1
                right = n - 2 - left
                N += 1 + circle_chords(left) * circle_chords(right)
        return N