Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 17. 11. 2011 05:30 — Editoval johnsmithx (17. 11. 2011 06:55)

johnsmithx
Zelenáč
Příspěvky: 12
Reputace:   
 

Jak vypočítat počet kombinací z omezené množiny

Dobrý den (ráno, případně noc),

mám takový hloupý problém a nevím si rady, jak ho vyřešit. Nedávno jsem naprogramoval software pro různé manipulace s kombinacemi, pak jsem implementoval blacklisting, aby bylo možné kombinace obsahující zadaná čísla zahodit a dnes jsem implementoval opak - whitelisting, tedy aby bylo možné vybrat pouze kombinace obsahující zadaná čísla a zahodit všechny ostatní. S implementací problém nebyl, ale u toho whitelistingu neumím dopředu vypočítat, kolik těch kombinací bude. Umím je vygenerovat, takže pak jejich počet umím i tupě sečíst dohromady, ale nevím, podle jakého vzorce bych mohl dopředu vypočítat, kolik jich bude. Snad vše objasní následující schématické zobrazení:

Code:

Sloupec A: všechny 3-kombinace z 1..5
    počet kombinací = K(3,5) = 5! / (3! * 2!) = 120 / 12 = 10

Sloupec B: blacklist čísla "2" (tj. všechny kombinace, které neobsahují číslo "2").
    počet kombinací = K(3,4) = 4! / (3! * 1!) =  24 /  6 =  4

Sloupec C: whitelist čísla "1" (tj. všechny kombinace, které obsahují číslo "1").
    počet kombinací =                ??????              =  6

Sloupec D: blacklist čísla "2" a zároveň whitelist čísla "1".
    počet kombinací =                ??????              =  3


       A            B            C            D

 1.  1,2,3                 1.  1,2,3
 2.  1,2,4                 2.  1,2,4
 3.  1,2,5                 3.  1,2,5
 4.  1,3,4    1.  1,3,4    4.  1,3,4    1.  1,3,4
 5.  1,3,5    2.  1,3,5    5.  1,3,5    2.  1,3,5
 6.  1,4,5    3.  1,4,5    6.  1,4,5    3.  1,4,5
 7.  2,3,4            
 8.  2,3,5            
 9.  2,4,5            
10.  3,4,5    4.  3,4,5

Sloupec A je jasný, všechny 3-kombinace z množiny 5 prvků. Celkem 10 kombinací.
Obecný vzorec K(k,n).

Sloupec B je taky jasný, všechny kombinace bez jednoho čísla, to je vlastně jinými slovy všechny kombinace z množiny o 1 prvek menší. Celkem 4 kombinace.
Obecný vzorec pro b blacklistovaných prvků by byl K(k,n-b), kde b nesmí být větší než n-k.

Sloupec C - pouze kombinace, které obsahují konkrétní prvek. Vím, že takových kombinací je 6, ale nevím, jak se k tomu číslu dostat.

Sloupec D kumuluje podmínky sloupců B a C. Taky nevím, jak se dostat k číslu 3, ale předpokládám, že až budu vědět, jak vyřešit C, tak budu i vědět D.

Ještě jednou se omlouvám za asi hloupý dotaz :-)

//EDIT: tak po půlhodině tupého zírání na výše uvedenou tabulku a druhé půlhodině nevěřícného ověřování jsem asi došel k řešení.
Ono se vlastně todle (tabulka C):

1,2,3
1,2,4
1,2,5
1,3,4
1,3,5
1,4,5

dá chápat jako todle:

1,2
1,3
1,4
2,3
2,4
3,4

což jsou všechny 2-kombinace ze 4 prvků. Na to by šlo koukat jako na podmnožinu, kde je o 1 méně prvků a jsou z nich vytvořeny (k-1)-kombinace.

Takže obecně by se to snad dalo vyjádřit tak, že pokud chci ze všech k-kombinací z množiny n prvků vybrat pouze takové kombinace, které obsahují pouze vybrané prvky (jejichž počet je w, přičemž w nesmí být větší než k), tak to lze vypočítat jako počet (k-w)-kombinací z množiny (n-w) prvků, neboli K(k-w,n-w). Kdyby w se rovnalo k (tedy ve výsledku by měla být pouze jedna jediná kombinace), tak by se to počítalo jako n! / ( 0! * (n-0)! ) = n! / n! = 1, což souhlasí.

A tím pádem řešení pro sloupec D, který kombinuje dohromady blacklisting i whitelisting by byl obecný vzorec K(k-w,n-b-w), což by v tomto konkrétním případě bylo K(2,3) = 3, což také souhlasí.

Tak jsem si asi odpověděl sám, hm, omlouvám se za zbytečné vlákno :-( Jen bych poprosil, kdyby mi to pro jistotu někdo mohl zkontrolovat, že si nepletu pojmy s dojmy.

Offline

  • (téma jako vyřešené označil(a) johnsmithx)

#2 17. 11. 2011 08:20

zdenek1
Administrátor
Místo: Poděbrady
Příspěvky: 12436
Reputace:   897 
Web
 

Re: Jak vypočítat počet kombinací z omezené množiny

↑ johnsmithx:
kombinace obsahující prvek 1 = všechny kombinace - kombinace neobsahující prvek 1
ve tvém konkrétním případě
${5\choose3}-{4\choose3}$


Pořádek je pro blbce, inteligent zvládá chaos!

Offline

 

#3 17. 11. 2011 12:15 — Editoval johnsmithx (17. 11. 2011 13:03)

johnsmithx
Zelenáč
Příspěvky: 12
Reputace:   
 

Re: Jak vypočítat počet kombinací z omezené množiny

↑ zdenek1:

Díky, to je další možnost, jak to vypočítat. Že jsem to z té tabulky nevykoukal, když to přímo bije do očí, že 6 = 10 - 4..

Ale to moje řešení ${4\choose2}$ je kratší.. Každopádně dává to stejný výsledek jako tvé řešení. ${5\choose3}-{4\choose3} = {4\choose2}$


Tedy obecně by zřejmě mělo platit: ${n \choose k}-{n-1 \choose k} = {n-1 \choose k-1}$

..což je vlastně ${n \choose k} = {n-1 \choose k-1} + {n-1 \choose k}$, což je prej nějaká rekurzivní formule, aspoň to píšou tady. No to je vtipný, o kombinacích vůbec nich nevím a vymyslel jsem polovinu vzorce :-)
Tak díky, todle je vyřešeno, teď hurá na další problém.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson