Výpis kombinací

Od: Datum: 29.04.14 16:14 odpovědí: 7 změna: 30.04.14 22:15

Dobrý den,

potřebuji pomoc učených při řešení následujícího příkladu:

Mám 5 mužstev, které mohou svůj zápas buď vyhrát (tip 1), anebo zremizovat (tip 0), anebo prohrát (tip 2). Dle jednoduchého vzorce zjistím, že počet všech kombinací je 243 (tzn. počet stavů -3 umocněno na počet mužstev - 5). Já ale potřebuji vypsat všech 243 kombinací. Pokud mě paměť neklame, tak žádný vzoreček na to neexistuje, pomohlo by snad makro v Excelu nebo obecně ve Visual Basicu. Hledal jsem na netu, ale tam jsou trochu jiné příklady, než potřebuji já. Výsledky tedy potřebuji např. v tomto formátu (čteno po sloupcích):

Mužstvo_A výhra, remíza
Mužstvo_B výhra, výhra
Mužstvo_C výhra, výhra ... atd
Mužstvo_D výhra, výhra
Mužstvo_E výhra, výhra

Pokud si na to někdo troufne, budu rád a předem děkuji. Pokud však nájdete na netu přesně to, co potřebuji, budu rád i za ten odkaz. To víte: více hlav, více zelí (anebo rozumu?). Děkuji


Seznam odpovědí:
 
moment čekejte prosím, probíhá přenos dat...
Zobrazení struktury odpovědí v otázce
Skrytí struktury odpovědí v otázce
Zobrazení struktury odpovědí v otázce

 

Odpovědi na otázku:
Datum: 29.04.14 16:36
avatar

Úplně tomu nerozumím. Chápu-li dobře, tak jsou tam ještě další, nejmenovaná družstva (minmálně jedno, pokud se ty zápasy hrají postupně), se kterými těch pět družstev hraje, takže výsledky družstev A,B atd jsou navzájem nezávislé. Pokud je tomu tak, tak bych napsal řádek záhlaví s jmény družstev , pod něj bych napsal postupně 245 řádků s výsledky a tu bych systematicky vyplňoval, Začal bych třeba samými výhrami, pak bych měnil v posledním sloupci výsledek na remízu a na prohru následně bych "couvl" a v předposledním sloupci bych změnil výhru na remízu a poslední sloupec bych nastavil na původní stav (výhra) a postupoval bych v něm stejně jako teď. Atd. Takže začátek tabylky by vypadal asi takto (proti "smrsknutí" tabulky vkládám tečky):

...A...;...B...;...C...;...D...;...E...

...2...;...2...;...2...;...2...;...1..

...2...;...2...;...2...;...2...;...0...

...2...;...2...;...2...;...1...;...2...

...2...;...2...;...2...;...1...;...1...

...2...;...2...;...2...;...1...;...0...

...2...;...2...;...2...;...0...;...2...

A takdále

Ohodnoceno: 0x
 
Od: dnesnitazatel
Datum: 29.04.14 16:47

Postup, který navrhujete, je správný, s tím jsem začal také. Problém je ale v tom, že časem můžu udělat chybu, místo 2 napíšu 1 a celá kombinace je pak v háji. Právě proto potřebuji výpis "počítačový", ne lidský. Potřebuji na 100% získat kombice výsledkú v sloupcích pro 5 mužstev, aby se žádný sloupec neopakoval, i když víme, že těch kombinací je přesně 243. Pro doplnění - tento problém je vlastně problém bývalé Sazky, kdy se tipovalo 13 zápasů, já to mám omezeno pouze na 5 mužstev (zápasů). Tři stavy (prohra, remíza, výhra, nebo: 2, 0, 1) zůstávají.

Od: dnesnitazatel
Datum: 29.04.14 17:33

Pro pochopení mého příspěvku uvedu úplně jednoduchou variantu:
Mám 3 žárovky a 2 stavy (svítí, nesvítí - anebo 1 a 0). Výpis všech 8 kombinací (tzn. 2 stavy umocněno na 3 žárovky = 8) - čteno po sloupcích:

žárovka_A;1;1;1;0;1;0;0;0
žárovka_B;1;1;0;1;0;1;0;0
žárovka_C;1;0;1;1;0;0;1;0

(Těchto 8 kombinací vypíšu snadno, ale těch 243 ...)

Tento příklad pak potřebuji převést na 5 zápasů (namísto 3 žárovek) a 3 stavy (namísto 2).
Možná by to šlo přes množiny, ale těm vůbec nerozumím, možná přes binární hodnoty, možná přes subřetězce, ... nevím, jen tak plácám.

Od: axus®
Datum: 29.04.14 17:44
avatar

Pokud mas k dispozici treba matlab, tak tam vypis kombinaci udelas pomoci funkce "combnk".

Pro reseni v Excelu bych se inspiroval nasledujicim:

http://www.mrexcel.com/forum/…-basic-applications-code.html

Ohodnoceno: 1x
 
Od: dnesnitazatel
Datum: 29.04.14 18:03

OK, ten odkaz od axuse je přesně to, co potřebuji. Tamní tazatel se ptá přesně na to, co já, akorát těch mužstev má 9, já 5. Bohužel, od března 2011 mu na to nikdo rozumně neodpověděl. Zkusím se podívat po MATLAB. Děkuji za snahu.

Datum: 29.04.14 18:26
avatar

Jinými slovy, potřebujete formulovat tento algoritmus v nějakém formálním jazyce, případně dát matematický vzorec pro n-tý řádek tabulku. . Myslím, že Excel by to zvládl. Muhu též popsat předchozí algoritmus tak, že začnu nikoli řádkem 2,2,2,..., ale 0,0,0,.. atd , chápu ho jako trojkové číslo a následující řádek získám přičtením jedničku. Algoritmus přičtení jednočky mohl formulovat tak, že přičítám modulo 3 s přenosem. Asi takto (s použitím slovního algoritmu, abych se vyhnul konkrétnímu programovacímu jazyku:

Algoritmus přičtení 1 k číslu a5a4a3a2a1

Jestliže je a5a4a3a2a1 = 22222, je toto číslo posledním řádkem tabulky, jsem hotov.

Začnu přičítat jedničku od konce, tedy počítám a1, respektive ai pro i = 1

Je-li ai =0 nebo 1, změním ai na ai+1 a posunu se vlevo, tj. zvětším i o jedna, a postup opakuji.

Vzhledem k tomu, že samé dvojky jsem ze zpracování vyloučil, tento postup skončí dřív, než bych měl přejít na i = 6, a dostal jsem další řádek tabulky.

Ohodnoceno: 0x
 
Od: dnesnitazatel
Datum: 30.04.14 22:15

Ahojky,

takže jsem to nakonec vyřešil selským rozumem procedurou v PHP. Pokud to někomu pomůže, zde je výpis:

$sloupec = 1;
echo "
Rozpis pro 5 zápasů (A, B, C, D, E) a 3 stavy (0, 1, 2):
";
for ($x=0; $x<=2; $x++)
{
for ($y=0; $y<=2; $y++)
{
for ($z=0; $z<=2; $z++)
{
for ($a=0; $a<=2; $a++)
{
for ($b=0; $b<=2; $b++)
{
echo "
Sloupec ".$sloupec.": A".$x.", B".$y.", C".$z.", D".$a.", E".$b."
";
$sloupec = $sloupec + 1;
}
}
}
}
}

 

 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz

 
Copyright © 2004-2016 Poradna Poradte.cz. Všechna práva na poradně Poradte.cz vyhrazena.