Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมนับจำนวน BST ที่มี n โหนดใน Python


สมมติว่าเรามีโหนดต่างกัน n โหนด ทั้งหมดมีความแตกต่างกัน เราต้องหาจำนวนวิธีที่เราสามารถจัดเรียงพวกมันเพื่อสร้างแผนผังการค้นหาแบบไบนารี ดังที่เราทราบสำหรับแผนผังการค้นหาแบบไบนารี ทรีย่อยด้านซ้ายจะมีค่าที่น้อยกว่าเสมอ และแผนผังย่อยด้านขวาจะเก็บค่าที่มากกว่า

เพื่อแก้ปัญหานี้ เราจะหาหมายเลขคาตาลัน หมายเลขคาตาลัน C(n) แสดงถึงแผนผังการค้นหาแบบไบนารีที่มี n คีย์ที่แตกต่างกัน สูตรก็เหมือน

$$C(n)=\frac{(2n)!}{(n+1)!\times n!}$$

ดังนั้นหากอินพุตเป็น n =3 เอาต์พุตจะเป็น 5 เพราะ

โปรแกรมนับจำนวน BST ที่มี n โหนดใน Python

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชัน ncr() นี่จะใช้เวลา n, r
  • res :=1
  • ถ้า r> n - r แล้ว
    • r :=n - r
  • สำหรับฉันในช่วง 0 ถึง r - 1 ทำ
    • res :=res *(n - i)
    • res :=ชั้นของ (res/(i + 1))
  • ผลตอบแทน
  • จากวิธีหลัก ให้ทำดังนี้
  • c :=ncr(2 * n, n)
  • ชั้นกลับของ c /(n + 1)

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

from math import factorial

def ncr(n, r):
   res = 1
   if r > n - r:
      r = n - r

   for i in range(r):
      res *= (n - i)
      res //= (i + 1)

   return res

def solve(n):
   c = ncr(2 * n, n)
   return c // (n + 1)

n = 3
print(solve(n))

อินพุต

3

ผลลัพธ์

5