Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Daniel Horák:26.5.2020 10:59

Potřebuji třídit hodnoty ne sestupně nebo vzestupně, ale prokládaně. Např. tabulka v excelu, která má v daném sloupci 0,0,0,0,0,0,1,1 by po takovém "seřazení" vypadala 0,0,0,1,0,0,0,1. Hledám výraz, pod kterým takovou funkci nebo algoritmus hledat (pokud vůbec existuje)

Zkusil jsem: Při hledání pomocí google vyšlo jako opak řazení většinou náhodné řazení. Nechci data řadit náhodně, ale tak, aby stejné hodnoty byly proloženy co nejdále od sebe.

Chci docílit: Mám x jídel a chci je seřadit tak, aby se co nejméně opakovala podobná jídla brzy po sobě.

 
Odpovědět
26.5.2020 10:59
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Daniel Horák
DarkCoder:26.5.2020 12:02

Můžeš tomu říkat třeba "Průměrné rozložení (opakování) hodnot v rozsahu" (To jsem si teď vymyslel). Je úplně jedno jak se to má jmenovat. Navíc proč někde hledat řešení když si to můžeš sám naprogramovat. Pokud znáš celkový počet hodnot a jednotlivé podíly, můžeš si určit procentuální zastoupení obou z nich.

Budu-li mít například celkem 12 hodnot (8x 0 a 4x 1), pak procentuální zastoupení jedniček je:
Ntotal / N1 = 12 / 4 = 3. Každá třetí. Rozložení tedy bude: 0 0 1 0 0 1 0 0 1 0 0 1.

Nahoru Odpovědět
26.5.2020 12:02
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Daniel Horák
DarkCoder:26.5.2020 12:18

To dále můžeš rozvinout v přesnější rozložení. Pokud na 1 jedničku připadají 2 nuly, vychází o něco lepší rozložení následovné:

0 1 0 0 1 0 0 1 0 0 1 0 nežli 0 0 1 0 0 1 0 0 1 0 0 1

Obdobně pokud na jednu 1 připadá šest 0, pak

0 0 0 1 0 0 0 vypadá lépe než 0 0 0 0 0 0 1

Při opakování celých řad se to pak slije, rozdíl je tak pouze na začátku.

To ale neplatí u všech, v případě 2 jedniček na 6 nul následující rozložení vypadá lépe,
ale ve skutečnosti při opakování dochází k většímu rozdílu mezi nulou a jedničkou.

0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0

Zde tedy varianta 0 0 0 1 0 0 0 1 ve výsledku je lepší.

Nahoru Odpovědět
26.5.2020 12:18
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.5.2020 13:33

Zajimavy problem. Na to by asi dokazal odpovedet jen ucitel VS informatiky.

Reseni by nemuselo byt slozite. Budes si zaznamenavat vzdalenost posledniho vyskytu. Nebo ji pocitat. A kdyz bude mensi nez neco, tak ten prvek presunes na konec nebo mu das treba +5, nebo swap(n, n+5).

list_items = [a, b, c, d, e]
list = []
list[] += random (list_items)
list[] += random (list_items)
// prover druhou serii prirazenych itemu s predchozi (i_start=count(list_items)), treba do hloubky 3
if (list[i]==list[i-1] || list[i]==list[i-2] || list[i]==list[i-3]) // i-- by slo pouzit misto i-1, i-2, i-3
  {
  save = list[i] // uloz
  remove(list[i]) // odstran
  add(list, save) // pridej na konec
  }
// timto zpusobem to bude pomale pro 100.000 polozek, protoze napodobujes insert sort
// a tez, randomem nezajistis, ze nevznikne stejne poradi

A cely ten zpusob je uplne na nic, pokud se jedna o jidelni listek, protoze tam je vyhodnejsi pripravovat jidla, ktera maji treba podobnou prilohu. Takze nemusis delat 2 uplne ruzna jidla.
Jakoze, kdyz mas ze 3 jidel, 3 jidla, ktera maji brambory loupane - brambory rozmackane - ryzi, tak je to lepsi nez mit brambory - ryzi - knedliky, z hlediska rychlosti vyrobniho procesu (nebo treba bramborove placicky). Podobne treba u masa.

Editováno 26.5.2020 13:35
 
Nahoru Odpovědět
26.5.2020 13:33
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.5.2020 13:49

Nebo, jeste bych to resil mozna takto:

list_items = [a, b, c, d, e]
list = []
list[] += random (list_items) // A,B,C
// rozdelit ten nove pridane polozky na tretiny a promichat je jen v te skupine A B C
list[] += random (list[B]) // C nesmi byt prvni
list[] += random (list[C nebo A])
list[] += random (list[A nebo C])
// nebo
list[] += random (list[A]) // C nesmi byt prvni
list[] += random (list[C nebo B])
list[] += random (list[B nebo C])
// dale opakujes...
list[] += random (list_items) // nove pridane rozdelis opet do 3 podskupin A,B,C
 
Nahoru Odpovědět
26.5.2020 13:49
Avatar
Daniel Horák:26.5.2020 15:09

Navíc proč někde hledat řešení když si to můžeš sám naprogramovat

Kdyby takové řazení v excelu fungovalo, tak pro tento účel postačí. Pro mě vůbec načíst seznam jídel do pole a začít s ním nějak pracovat bude celkem makačka ;)
No, rozložit prvky dle procentuálního výskytu bude pro začátek nejpřijatelnější. Jde o to, aby se v jídelníčku nesešly dva dny po sobě kuřecí, hovězí, luštěniny, sladké apod.

je vyhodnejsi pripravovat jidla, ktera maji treba podobnou prilohu

ne, potřebuji naopak co největší rozmanitost

 
Nahoru Odpovědět
26.5.2020 15:09
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Daniel Horák
DarkCoder:26.5.2020 15:32

V excelu by to šlo samozřejmě také, není zde žádný složitý prvek. Pro začátek určitě postačí procentuální výskyt. Pro tyto účely bych osobně provedl důkladnější analýzu. Statistika je mocná. Proč třeba vařit taková jídla jako květakový mozeček když si ho za půl roku dál akorát hladový somálský pirát. :-)

Nahoru Odpovědět
26.5.2020 15:32
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.5.2020 15:49

"ne, potřebuji naopak co největší rozmanitost"
Nesledujes Polriecha :) To bys vedel, jak se dela byznys. Fakt jde o to, co nejvice odlehcit kuchari prace. Jedna vec je jidelni listek, kde je vsechno a mas pomalu se stridajici hosty. A druha, jsou menicka, kdy ten kuchar nemusi stihat.
A ja osobne jsem treba vdecny za to, kdyz mi vymeni prilohu, jako bram. kasi, kterou nerad, za brambory, pokud je vidim u jineho jidla jako prilohu.

 
Nahoru Odpovědět
26.5.2020 15:49
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.5.2020 15:54

Jo, jeste mne napadlo, ze tech skupin muzes udelat vic, nez jen ABC, ale treba to stridat, 4, 5. Aby se prvky vzajemne vice promichali.
Jinak, hodne jidel je podobnych. To taky asi neni dobre, kdyz se ti sejde svickova, rajska, spenat, vse s knedliky :) Jak to vidis na menicka.cz, tak se divas po jine restauraci, pokud nems na nic s knedlikem chut.
Zkratka to neni ta uplne easy problem, pokud z toho mas mit byznys a ne random promichani.

 
Nahoru Odpovědět
26.5.2020 15:54
Avatar
Daniel Horák:27.5.2020 8:59

Nesledujes Polriecha

Vcelku ho i sleduju, píše se myslím Pohlreich. Ovšem toto je provoz, kde se vaří jen dvě alternativy a víc než atraktivita se sleduje skladba z hlediska výživy. Dojde tedy i na ten květák. Požadavky výroby bude potřeba zohlednit taky. Např. na víkendy a svátky je potřeba vybírat jídla nenáročná na přípravu, aby je zvládli i pomocní kuchaři. Mám v plánu postupovat takto:

  1. Rozložit jídla procentuálním zastoupením co nejpravidelněji podle zařazení do skupiny např. (drůbež, vepřové, hovězí, sladké, mleté, bezmasé)
  2. Projít jednu položku po druhé a kontrolovat kolize dalších atributů (uho, červená omáčka, špenát...) pokaždé když najdu poblíž položku se stejným atributem, tak ji zaměním za jinou ze stejné skupiny v max. možné vzdálenosti.
  3. Na víkendy mě napadá: Spočítat nevíkendová jídla na 5. a 6. pozicích se sedmi různými začátky a z těch sedmi výsledků vybrat ten nejnižší/nejpříz­nivější. Potom ty špatné zase zaměnit podobně jako v druhém kroku.

Nečekám od toho dokonalý výsledek, nad kterým budou všichni jásat (u jídla je to vždycky nevděčné) ale základ, se kterým lze pracovat mnohem lépe, než s nahodilou hromadou.

 
Nahoru Odpovědět
27.5.2020 8:59
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.