>> Home >> Java >> Java: Kombinační čísla

 

Java: Kombinační čísla

 

V tomto článku si jemně nastíníme, co to kombinační číslo je, a jak si napsat jednoduchou metodu v jazyce Java k jeho výpočtu. Naprogramujeme si statickou metodu k výpočtu těchto čísel a budeme k ní také potřebovat metodu pro výpočet faktoriálu.

Kombinační číslo je funkce, která udává počet způsobů, jak vybrat k-prvkovou podmnožinu z n-prvkové množiny. Zde je již vzorec výpočtu zapůjčený z wikipedie.

  {n \choose k} = \frac{n \cdot (n-1) \cdots (n-k+1)}   {k \cdot (k-1) \cdots 1} = \frac{n!}{k!(n-k)!} \quad \mbox{if}\ 0\leq k\leq n \qquad (1)

 

Pokud jsou n a k shodné, nebo pokud je k 0, tak je výsledek vždy 1.

  {n \choose 0} = {n \choose n} = 1.

Zde je vypočítaný příklad, kombinačního čísla 7 nad 3.

 {7 \choose 3} = \frac{7!}{3!(7-3)!}
= \frac{7 \cdot 6 \cdot 5 \cdot 4 \cdot 3 \cdot 2 \cdot 1}{(3 \cdot 2 \cdot 1)(4 \cdot 3 \cdot 2 \cdot 1)}
= \frac{7\cdot 6 \cdot 5}{3\cdot 2\cdot 1}
=\frac{210}6
= 35.

 

Nejprve budeme muset vytvořit metodu faktorial(), kterou budeme využívat k výpočtu kombinačních čísel.

 

    public static long faktorial(int cislo) {
        
        int vysledek = 1;
        for(int i = cislo;i > 0;i--) {
            vysledek *= i;
        }
        return vysledek;
    }

 

O funkcionalitě této metody a dalších způsobech, jak implementovat faktoriál jsem již napsal tento článek.

 

Implementace do Javy:

 

    public static long kombinace(int n, int k) {
       
        long vysledek;
        if(n < 0 || k < 0 || n < k)
            return -1;
        if(k == 0)
            return 1;
        vysledek = faktorial(n) / (faktorial(k) * faktorial(n-k));
        return vysledek;
    }

 

Jak tato snadná metoda funguje je podle mého názoru zbytečné vysvětlovat.

 

Takto by již mohl vypadat celý zdrojový kód:

 

public class Main {
   
    public static long faktorial(int cislo) {
        
        long vysledek = 1;
        for(int i = cislo;i > 0;i--) {
            vysledek *= i;
        }
        return vysledek;
    }
   
    public static long kombinace(int n, int k) {
       
        long vysledek;
        if(n < 0 || k < 0 || n < k)
            return -1;
        if(k == 0)
            return 1;
        vysledek = faktorial(n) / (faktorial(k) * faktorial(n-k));
        return vysledek;
    }
   
    public static void main(String[] args) {
   
        System.out.println(kombinace(7, 2));
    }
}

 

Výpis tohoto programu by byl - 21

 

pridej.cz Přidat.eu záložku

 

Diskuze k článku


 

Zatím žádné komentáže k tomuto článku.

 

Přidat nový komentář