changeset 6:661876a2502e

py: dp
author Lewin Bormann <lbo@spheniscida.de>
date Sun, 19 Feb 2023 12:50:44 +0100
parents 1ae2e0c2ea18
children 1ecfe01af17e
files python/dp.py
diffstat 1 files changed, 44 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/dp.py	Sun Feb 19 12:50:44 2023 +0100
@@ -0,0 +1,44 @@
+
+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