2.1 Worst-Case EntropyにnノードのGeneral Ordinal Trees(一般順序木?)(一般じゃない順序木とは)の種類はn-1番目のカタラン数になるということが書いてあります。
Wikipediaの「()を正しく並べる方法」というのがそれに相当するもの(のはず)。
その下に二分木について書いてあるので、順序木無理ではと一瞬あせりますが、順序木は括弧で表現することができるのでkotonakiですね(のはず)(記憶がヤバイ)。
Rustのコードだと以下のような感じ。素朴な実装なのでnが大きくなると死にます。
fn catalan(n: u64) -> u64 { factorial(2 * n) / factorial(n).pow(2) / (n + 1) } fn factorial(n: u64) -> u64 { if n <= 1 { 1 } else { n * factorial(n - 1) } } fn main() { for i in 0..10 { println!("catalan({}) = {}", i, catalan(i)); } }
catalan(0) = 1 catalan(1) = 1 catalan(2) = 2 catalan(3) = 5 catalan(4) = 14 catalan(5) = 42 catalan(6) = 132 catalan(7) = 429 catalan(8) = 1430 catalan(9) = 4862