Rekurze - kombinatorika   otázka

Algoritmy

Dobrý den,

již nějaký čas si lámu nad problémem s jedním v podstatě asi jednoduchým problémem. Bohužel už na miliontý pokus jsem nedosáhl správného výsledku, vždy buď kvůli problémům s rekurzí resp asi s představivostí (zkoušel jsem to i bez ní (bez rekurze, ne bez představivosti), ale v takovém kvantu kódu se ztrácím) nebo kvůli problémům s kombinatorikou. Neumím dostat všechny hodnoty nebo se mi naopak opakují...

Chtěl bych Vás poprosit, zda by někdo nenapsal obecně, jak daný problém vyřešit. Nepotřebuji ani tak konkrétní kód, jak třeba i obecný popis.

(Problém se v popisu pokusím zjednodušit)

Mám pole s nějakými hodnotami např poleHodnot (počet prvků může být pokaždé jiný) a výsledkem bych chtěl mít pro zjednodušení např "pole polí" (např pole X polí Y), kde v každém poli Y budou prvky z poleHodnot, které v součtu dají hodnotu Z (která se také může měnit). Prvky z poleHodnot se mohou v poli Y libovolně opakovat (např pokud Z = 6, pak může pole obsahovat 2,2,2). Pole X by mělo obsahovat tolik polí Y, kolik je možných kombinací - s tím, že v poli Y záleží na pořadí tzn může/musí být pole s hodnotami 1 a 2 i pole s hodnotami 2 a 1.

Moje představa je tedy asi funkce, kde vstup bude hodnota Z, poleHodnot a pole X. Funkce mi vrátí pole X naplněné polemi Y vit výše.

Jak jsem již psal, budu rád pokud mi to napíšete nějak obecně, ale nevadí ani ve VB.NETu nebo C# případně i něčem jiném. Jde mi o to problém (resp řešení) pochopit a zvládnout to napsat sám.

Předem díky za jakoukoli odpověď

S pozdravem

Jakub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Koukněte na tohle:

http://ericlippert.com/tag/permutations/

Neřeší to sice vaší úlohu, ale třeba v tom najdete nějakou inspiraci.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback