ACM - Псков

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ACM - Псков » Математика » Числа Каталана


Числа Каталана

Сообщений 1 страница 5 из 5

1

Материал из Википедии
http://ru.wikipedia.org/wiki/Числа_Каталана

Числа Катала́на — числовая последовательность, встречающаяся в многих задачах комбинаторики. Последовательность названа в честь бельгийского математика Каталана, хотя была известна ещё Л. Эйлеру.

Первые несколько чисел Каталана:

    1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452 … (последовательность A000108 в OEIS)

n-е число Каталана  C_n можно определить одним из следующих способов:

    * Количество разбиений выпуклого (n+2)-угольника на треугольники непересекающимися диагоналями.

   * Количество правильных скобочных структур длины 2n, то есть таких последовательностей из n левых и n правых скобок, в которых каждой открывающей скобке соответствует закрывающая.    :cool:
    Более точно: в правильной скобочной последовательности количество открывающих скобок равно количеству закрывающих, и в любом префиксе последовательности открывающих скобок не меньше, чем закрывающих.

    Например, для n=3 существует 5 таких последовательностей:

        ((())), ()(()), ()()(), (())(), (()())

    то есть C3 = 5.

    * Количество способов соединения 2n точек на окружности n непересекающимися хордами. 

    * Количество неизоморфных упорядоченных бинарных деревьев с корнем с n+1 листом.    :cool:

Задачи на эту последовательность встречаются регулярно!!! Маст хэв.
Накопаю инфы по использованию (быстрое вычисление,  примеры задач и т.д.) обязательно выложу.
А то как вспомню как мы сидели на одной тренировке с задачей на подсчёт кол-ва деревьев, аж дурно становится, какой это был бойан.  :mad:

2

Пример задачи 1625 на тимусе.
http://acm.timus.ru/problem.aspx?space=1&num=1625

Вывести числа Каталана с первого по 2n+1. ))

Быстрая формула рассчёта - Cat[n+1]=Cat[n]*2*(2*n+1)/(n+2)
Либо так Cat(n) = (4n - 2)!!!!/(n + 1)!

Мой код задачи 1625 на JAVА. Куда проще? )))

Код:
import java.io.*;
import java.util.*;
import java.math.*;

public class Main {

    static BigInteger old;
    static BigInteger four = BigInteger.valueOf(4);
    static BigInteger two = BigInteger.valueOf(2);
    static BigInteger sch;

    public static void main(String[] args) throws FileNotFoundException{
       Scanner in = new Scanner(System.in);
       PrintWriter out = new PrintWriter(System.out);
       int n = in.nextInt();
       old = BigInteger.valueOf(1);
       for(int i=1;i<2*n;i++){
           out.println(old.toString());
           sch = BigInteger.valueOf(i);
           old = old.multiply(four.multiply(sch).add(two)).divide(sch.add(two));
       }
       out.close();
   }
}

3

Класс. Не знал, что у чисел Каталана так много применений.

4

Супер. Я вообще про эти самые числа не знал :)

5

Надо теперь запомнить первые несколько, чтобы замечать эту последовательность в задачах. А применений у них действительно очень много.


Вы здесь » ACM - Псков » Математика » Числа Каталана