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
Nenapada vas nejakej algoritmus jak sestrojit co nejefektivnejc posloupnost 1 a 0 tak, aby podmnoziny obsahovaly co nejvic ruznejch kombinaci. Priklad :v posloupnosti 01001101... jde najit 0,1,00,01,10,11,100,101,110,.... naopak neefektivni je posloupnost 01010101..., kde je hodne podmnozin stejnejch (podmnozinu beru jenom jako usek cisel za sebou bez preskakovani)
nejsem si jistej, jestli jsem to zformuloval zrovna srozumitelne, ale byl bych rad za jakoukoliv radu :)
Offline
↑ ChazyK:Ahoj, pochopil som, je to zaujímavé, no teraz ma nič konštruktívne nenapadá ku vytvoreniu. Iba ku analýze by ma možno napadol program, kde vstupom by bol náhodný reťazec a program by vytvoril spektrum toho čo tam vlastne našiel. Čítalo by sa len zľava do prava.
Offline
Záleží, zda je kladeno omezení na délku takové posloupnosti. Pokud ne, volme takovou posloupnost, kde za sebe poskládejme číslice binárního zápisu přirozených čísel v jejich přirozeném pořadí, tj. 0,1,10,11,100. Pak je zřejmé, že se v takové posloupnosti vyksytne libovolná konečná podposloupnost tvořená z 0 a 1. A možná i kdyby bylo dáno omezení na délku takové posloupnosti, pak by i tato konstrukce mohla být užitečná. Případně volme jen taková přirozená čísla, jejichž binární kód má nějakou pevnou konstantní délku.
Offline
prave me napadlo zacit libobolnym retezcem napriklad jenom 0, pak zkouset postupne vsechny moznosti(0,1,00,01,10,11,000,001,010,011,100,...) a pokud nova moznost nebude nalezena v posloupnosti bude dopsana nakonec
priklad:
[0], dalsi v poradi je 1, ta se nevyskytuje, takze se dopise na konec
[01], dalsi v poradi je 00, ta se nevyskytuje, takze se dopise na konec
[0100], dalsi je 01, ta se vyskytuje, nedeje se nic
[0100], dalsi je 10, ta se vyskytuje, nedeje se nic
[0100], dalsi je 11, ta se nevyskytuje, priradi se nakonec
[010011]
podle me by bylo mozne takto sestrojit generator pseudonahodnych cisel, z ruznych vstupu by vychazeli ruzne nekonecne retezce cisel
Offline

Mám takový pocit, že jsem kdysi na wikipedii viděl přesně to, co hledáš (tu „nejefektivnější“ posloupnost o dané délce), ale nemůžu si vůbec vybavit, jak se tomu říkalo nebo pod čím bych to našel. To jsem ti asi moc nepomohl…
Offline
↑ pietro: Já bych nebyl takový optimista. Posloupnost 00110 je kratší, také začíná nulou a také obsahuje všechny možné podřetězce nad abecedou {0,1} délky nejvýše dva.
EDIT1: Možná začít od konce, tedy od nejdelších požadovaných podřetězců, možná k tomu ještě i dovolit připisování jak na konec, tak na začátek. Ale to jen tak střílím od boku. Nějak mi to celé připomíná hledání minimální kostry grafu, pro což také existuje třeba známý snadný Borůvkův algoritmus (horší už je to s důkazem, že dělá to, co dělá -- to byl vlastně Borůvkův přínos, ten důkaz).
EDIT2: Navíc stejně jako minimální kostra, ani zde hledaná minimální posloupnost není jednoznačná. 11001, 01100 a 10011 obsahují taktéž všechny možné podřetězce nad abecedou {0,1} délky nejvýše dva. A tím dokonce výčet končí, protože zřejmě musíme mít 00 a 11 v nějakém pořadí a pak správně přidat 0 nebo 1 na začátek nebo na konec slova. Proto také délka 5 je pro tento účel nejmenší možná.
EDIT3: Idea, co jsem uvedl v EDIT1, funguje pro všechny možné podřetězce nad abecedou {0,1} délky nejvýše dva a nezáleží na pořadí, v jakém podřetězce stejné délky "přidáváme". Současně ji není možné omezit třeba jen na přidávání na konec. Představme si tuto posloupnost přidávání: 11, 01, 00, 10, 1, 0. Kdyby bylo dovoleno jen přidávání na konec, vzniklo by postupně 11 --> 1101 --> 110100, a to už je špatně. I s přidáváním na začátek (produkuje-li kratší výsledek než přidání na konec) vzniká postupně 11 --> 011 --> 0011 --> 00110, což je správně. Toto samozřejmě není žádný důkaz, leda tak podpůrný argument.
Offline
Mne slo prave o to, vytvorit nekonecnej retezec, o kterem by se dalo rict, ze jeho prvnich napriklad 5 mist obsahuje vsechny mozne podretezce delky 2, prvnich treba 20 mist obsahuje vsechny mozne podretezce delky 3 atd. A potom vysledny algoritmus upravit, aby fungoval i na vice nez jednorozmerne retezce, napriklad na matice.
Offline
↑ ChazyK: Jen formální připomínka: nebav se tady raději o podmnožinách a posloupnostech, i když samozřejmě chápeme, co tím zde myslíš. Celé toto téma je z oblasti tzv. formálních jazyků, kde se vyskytují pojmy jako slovo, abeceda, podslovo, případně řetězec a podřetězec.
Offline

Pokud chceme najít minimální posloupnost která obsahuje všechny řetězce délky (nejvýše) n, tak si sestavíme graf ze všech řetězců délky n-1, hrana vede vždy mezi řetězci bw a wb', kde b,b' jsou bity a w je řetězec délky n-2. Snadno nahlédneme, že graf je Eulerovský a Eulerovský tah v něm nám říká, jak danou posloupnost sestrojit (zapíšeme první řetězec a pak vždy poslední bit z řetězce, na který jsme došli). Toto jsme řešili ve škole na grafech a snad by se dalo dohledat a doklikat se k materiálům o opačném problému (kolik nejvýše různých podřetězců může obsahovat řetězec délky n) -- bohužel google nepomohl.
Offline
↑ Lukee: Díky za ChazyKa. "Superstring" bylo to, co se hledalo. A dá se o tom najít spousta zajímavých článků. V plné obecnosti je to NP těžký problém, což zasvěceným ledacos napoví. Dá se různě ustupovat z požadavků na "shortest". Zmíněno v tebou uvedeném odkazu, i s příklady nad obecnější abecedou než {0,1} třeba tady.
Offline