# Zk 24.1. 2006

<{ForumPost(poster="mike04", timestamp=2006-01-24 14:48:17)}>
Zkouska ma dve casti - 4 "lehke" priklady - cas: 60 min  
                                   1 velky priklad - cas: 90 min  
  
Veskera zadani nam psal na tabuly, takze nez dopsal posledni ze 4 lehkyh prikladu, mohl uz nekdo mit 1 priklad hotov. Dale je cas se ptat na zadani. Pote nastavi priblizne tech 60 minut.  
  
Po 4 lehkych prokladch je 5 minut pauza. Pote opet napise zadani velkeho prikladu.  
  
Nase priklady:   
Lehke - prolog  
1) Najdi maximalni nezavislou mnozinu v grafu (nemusi byt nejvetsi mozna)  
2) Kartezky soucin 2 grafu (bez orientace hran)  
Lehke Haskell:  
3) Najdi k nejmensich cisel v seznamu prirozenych cisel. (seznam neni setrizen. Lze predpokladat, ze se tam prvky neopakuji)  
4) data T12 a= Nil  
                   |N1 a (T12 a )  
                   |N2 a (T12 a ) (T12 a )  
pro tento strom napis fold a pomoci funkce fold napis funkci pro vypsani hodnot z vrcholu typu (N2 a b c) jako seznam (v preorder)  
  
Tezky priklad:  
Je dan seznam strojovych instrukci, pro nektere z instrukci je dan casovy odstup mezi nimi i a j -> r(i,j) a J(i,j) - jestli je mozne instukce i a j prohodit  (nemusi platit ze J(i,j) = J(j,i) )  
Pricemz nejmensi odstup mezi 2 instrukcemi je nejmene 1 a procesor zvladne zacit nejvyse 1 instrukci za cyklus.  
Ukol je nalezt posloupnost instrukci, ktera bude nejrychleji zpracovana v procesoru. Instrukci priradit cas, kdy se dostane na radu.  
  
K tezkemu prikladu dodal, ze nemusi byt supr efektivni.. Hlavne abychom ho zvladli napsat...  
  
Pro vysledku se chodi odpoledne - cas urci, pri odevzdani tezkeho prikladu
<{/ForumPost}>

<{ForumPost(poster="Trupik", timestamp=2006-01-24 14:55:05)}>
Ad 3 - ja myslel, ze ta funkce ma vratit k nejmensich prirozenych cisel, ktere ve vstupnim seznamu NEjsou? Ááá herdek...
<{/ForumPost}>

<{ForumPost(poster="tutchek", timestamp=2006-01-24 15:00:30)}>

 > mike04 wrote:Zkouska ma dve casti - 4 "lehke" priklady - cas: 60 min  
 >                                    1 velky priklad - cas: 90 min  
 >   
 > Veskera zadani nam psal na tabuly, takze nez dopsal posledni ze 4 lehkyh prikladu, mohl uz nekdo mit 1 priklad hotov. Dale je cas se ptat na zadani. Pote nastavi priblizne tech 60 minut.  
 >   
 > Po 4 lehkych prokladch je 5 minut pauza. Pote opet napise zadani velkeho prikladu.  
 >   
 > Nase priklady:   
 > Lehke - prolog  
 > 1) Najdi maximalni nezavislou mnozinu v grafu (nemusi byt nejvetsi mozna)  
 > 2) Kartezky soucin 2 grafu (bez orientace hran)  
 > Lehke Haskell:  
 > 3) Najdi k nejmensich cisel v seznamu prirozenych cisel. (seznam neni setrizen. Lze predpokladat, ze se tam prvky neopakuji)  
 > 4) data T12 a= Nil  
 >                    |N1 a (T12 a )  
 >                    |N2 a (T12 a ) (T12 a )  
 > pro tento strom napis fold a pomoci funkce fold napis funkci pro vypsani hodnot z vrcholu typu (N2 a b c) jako seznam (v preorder)  
 >   
 > Tezky priklad:  
 > Je dan seznam strojovych instrukci, pro nektere z instrukci je dan casovy odstup mezi nimi i a j -> r(i,j) a J(i,j) - jestli je mozne instukce i a j prohodit  (nemusi platit ze J(i,j) = J(j,i) )  
 > Pricemz nejmensi odstup mezi 2 instrukcemi je nejmene 1 a procesor zvladne zacit nejvyse 1 instrukci za cyklus.  
 > Ukol je nalezt posloupnost instrukci, ktera bude nejrychleji zpracovana v procesoru. Instrukci priradit cas, kdy se dostane na radu.  
 >   
 > K tezkemu prikladu dodal, ze nemusi byt supr efektivni.. Hlavne abychom ho zvladli napsat...  
 >   
 > Pro vysledku se chodi odpoledne - cas urci, pri odevzdani tezkeho prikladu

co je to fold?  

 > slovniky.atlas.cz wrote:**fold:** církev; přen., dát se složit, do sebe zapadat, falcovat, fald (tuku apod.), kotlina (v horách), lom (ohyb), ohyb (lom), ovčinec (církev); přen., ovčinec (ohrada pro ovce), ovinout (plachty), přehnout, zkrachovat; hovor., přestat vycházet (časopis), přitisknout, přivinout (plachty), rýha (geol.), salaš, sevřít (v náručí), složit (přehnutím zmenšit), stádo ovcí, svinout (plachty), zahnout, záhyb, zavírat se, vrása (rýha) (geol.), záhyb (plica) (med.), řasa (gyn.), zřasit, složit do záhybů (med.)

<{/ForumPost}>

<{ForumPost(poster="mike04", timestamp=2006-01-24 17:15:10)}>
v tomto pripade byla fold definovana takto:  
fold::b->(a->b->b)->(a->b->b->b)->T12 a->b  
  
  
b nahradi vrcholy konstruovane Nil   
na vrchol s konstruktorem N1 a  (T12 a) zavola funkci (a->b->b)  
a na N2 a (T12 a) (T12 a) zavola funkci  (a->b->b->b)  
  
cele se to vola rekurzivne  
  
Kdyz jsme se ho ptaly taky, tak uvedl, ze je to funkce z prednasky...  
Jeste ze jeden chytry clovek si ji pamatoval, a rekl, ze na prednasce byla definovana jinak, takze nam k tomu rekl trochu vic...
<{/ForumPost}>

<{ForumPost(poster="mike04", timestamp=2006-01-24 17:16:43)}>

 > Trupik wrote:Ad 3 - ja myslel, ze ta funkce ma vratit k nejmensich prirozenych cisel, ktere ve vstupnim seznamu NEjsou? Ááá herdek...

no sorry, to jsem ve spechu opomel. Je to tak, meli se hledat cisla, ktery tam nejsou.
<{/ForumPost}>

<{ForumPost(poster="Trupik", timestamp=2006-01-24 17:57:59)}>
Heh, tak Kuba to má. Po napsané písemce vás čeká ještě různě dlouhá disputace nad řešením. Krátké příklady má opravené, na velký se nejspíš vůbec nedíval - takže mi řekl "Tak mi povezte, ako ste to robil". Tak jsem mu to povedel, řekl, že moje řešení nieije příliš vhodné, ale odpustil mi to a za jedna (v malejch příkladech prej chyby nenašel).  
  
Jinak ten velkej jsem dělal tak, že jsem si každý nalezený řešení uložil do databáze a po prolezení všech jsem vybral nejlepší - ukládáním do databáze se mi všechno náramně zjednodušilo, ale asi to není ta pravá prologovina.   
  
V celku je asi jedno, jak kterej příklad vyřešíte - hlavně, že to máte, s efektivitou si není třeba lámat hlavu.  
  
Podle mě to bylo o poznání lehčí, než písemky, které jsou na fearu, ale možná časem přitvrdí (užitesi).
<{/ForumPost}>

<{ForumPost(poster="Dawe", timestamp=2006-01-24 21:45:04)}>
Já jsem se k tomu čtvrtýnu příkladu ani nedostal, ale ty tři jsem měl dobře.Jen po mně chtěl zoptimalizovat to.Pak se dostalo na velkej příklad a to byl trochu problé, spíš jsem popsal jakto řešit, než abych to programoval. Zvolil jsem ale asi dost přesné řešení a tudíž dost složité. Chtěl tam po mně, abych mu vymyslel (napsal v kódu) jak budu přesně dělat nějaký kroky mýho alg. No nakonec se mi to víceméně podařilo, ale docela mně to stálo úsilý. Řekl mi, že OK, ale za to že sem mu to vymyslel až tam, tak že za 2. Jsem nad míru spokojenej a hlavně rád že to mám za sebou.  
  
Jo ještě dodatek, původně tam plánoval dát místo k.součinu převést DNF na KNF (nebo naopak?).Ale když zjistil, že nikdo moc netuší, co to je, tak tam dal ten součin - myslím že i to docela helplo...  
Přeji všem hodně zdaru nejen u NP  
  
Ještě k výsledkům - co jsemmu do toho koukal tak většinou 1,2, někdy 3, 4 asi jen jedna. Teda byl jsem tam asi v půlce, takže jak se to vyvíjelo dál nevím...
<{/ForumPost}>

<{ForumPost(poster="Necroman", timestamp=2006-01-25 11:22:22)}>
OMG  :shock: , to ze jsou lehke priklady??  
Mohl by pls nekdo upresnit to zadani:  
1) Najdi maximalni nezavislou mnozinu v grafu (nemusi byt nejvetsi mozna)   
2) Kartezky soucin 2 grafu (bez orientace hran)  
Podle toho nemam paru, co se po me vubec chce...  
...asi jsem to kapku podcenil... jdu se ucit :oops:
<{/ForumPost}>

<{ForumPost(poster="Almer", timestamp=2006-01-25 11:58:44)}>

 > 2) Kartezky soucin 2 grafu (bez orientace hran)

Vezmes si mnozinu vrcholu jednoho grafu, a mnozinu vrcholu druheho. Provedes KS na techto mnozinach (vynasobis vse se vsim) a dostanes novou mnozinu vrcholu, kde plati, ze existuje hrana, pokud existovala mezi obema dvojicema vrcholu, ktere tedka tvori ty dva nove vrcholy  

 > 1) Najdi maximalni nezavislou mnozinu v grafu (nemusi byt nejvetsi mozna)

S tim neporadim...zkusi nekdo jiny
<{/ForumPost}>

<{ForumPost(poster="rastik", timestamp=2006-01-25 12:37:08)}>
U prikladov s grafom je zadana/pozadovana nejaka konkretna reprezentacia? Alebo si mozem vybrat taku, co mi bude najviac vyhovovat?
<{/ForumPost}>

<{ForumPost(poster="Trupik", timestamp=2006-01-25 13:32:47)}>

 > rastik wrote:U prikladov s grafom je zadana/pozadovana nejaka konkretna reprezentacia? Alebo si mozem vybrat taku, co mi bude najviac vyhovovat?

Ne, mohli jsme si vybrat. Já měl tu nejprimitivnější - seznam vrcholů + seznam dvojic vrcholů (mezi nimi je hrana)
<{/ForumPost}>

<{ForumPost(poster="Trupik", timestamp=2006-01-25 13:37:00)}>

 > Necroman wrote:
 > OMG  :shock: , to ze jsou lehke priklady??  
 > Mohl by pls nekdo upresnit to zadani:  
 > 1) Najdi maximalni nezavislou mnozinu v grafu (nemusi byt nejvetsi mozna)

vypadá to složitě, ale je to jednoduché: postupně bereš vrcholy a přidáváš je do množiny, přidat ho můžeš, jen jestli není spojen s žádným vrcholem, který již v množině je. Až probereš věechny vrcholy, máš požadovanou mnnožinu  

 > Necroman wrote:
 > 2) Kartezky soucin 2 grafu (bez orientace hran)  
 > Podle toho nemam paru, co se po me vubec chce...  
 > ...asi jsem to kapku podcenil... jdu se ucit :oops:

Formálně takhle :  
G1 = (V1, H1),  
G2 = (V2, H2),  
G3 = (V3, H3),  
    V3 = V1 x V2,  
    H3 = {((u1, v1)(u2,v2)) | u1, u2 z V1, v1, v2 z V2, (u1,u2) je v H1, (v1, v2) je v H2}
<{/ForumPost}>

<{ForumPost(poster="Dawe", timestamp=2006-01-25 13:38:33)}>
Nic o reprezentaci neříkal, takže jsem zvolil seznam dvojic vrcholů = hrany. Díky této reprezentaci se oba příklady na grafy řeší docela jednoduše.  
1) - znamená to že je to množina vrcholů, kde žádné dva vrcholy z množiny nejsou spojeny hranou. Maximální je tehdy, když už nelze zvětšit. že nemusí být ta největší znamená, že může existovat jiná (jiné vrcholy) která je větší.  
řešení: jednoduše se vezme libovolný vrchol a přidávají se další, pokud s těmi z množiny nemají žádnou hranu. Udělal jsem si seznam vrcholů, a z něho postupně bral vrcholy, a přidával je pokud neležely na hraně s žádným vrcholem ze stávající množiny.  
2)Jsou dva seznamy dvojic\[(a,b)...], \[(c,d)...]  
 a pro každé dvě takové dvojice se vytvoří \[(a,c),(a,d),(b,c),(b,d)], pak se seznam sleje s ostatnímy sznamy...  
  
Doufám, že jsem to napsal aspoň trochu pochopitelně...
<{/ForumPost}>

<{ForumPost(poster="Tuetschek", timestamp=2006-01-25 18:52:04)}>
Bylo nejaky omezeni na slozitost tech "lehkych" prikladu?
<{/ForumPost}>

<{ForumPost(poster="mike04", timestamp=2006-01-25 22:22:41)}>

 > Tuetschek wrote:Bylo nejaky omezeni na slozitost tech "lehkych" prikladu?

Hlavni kriterium bylo, abys to vyresil. Slozitost byla vedlejsi...
<{/ForumPost}>

<{ForumPost(poster="qwyxyo", timestamp=2006-01-26 02:29:50)}>
Ahojte...  
Moja otazka sa mozno mnohym uz v hlavicke zrodila... Kolko prikladov (myslim z tych "lahkych") staci aby som s usmevom a 3 v indexe odisiel od senora Hrica. Nie som asi jediny komu funkcionalne jazyky vobec nesadli ale chcu to mat z krku za kazdu cenu.  A pyta sa vobec na nejake teoreticke zaludnosti ohladom Prologu a Haskellu??? Alebo sa len na ustnej casti rozoberaju priklady?  
  
Dikes za odpoved:)
<{/ForumPost}>

<{ForumPost(poster="Dawe", timestamp=2006-01-26 06:30:05)}>
Z teorie nechtěl nic, alespoň po mně. Tejně tak nechtěl nic ohledně Schemu. Co ti bude stačit těžko říct. On se k tomu moc nevyjadřuje. Minimum bych tipoval tak na 1/2 z obou částí, ale to je fakt jen odhad.
<{/ForumPost}>

<{ForumPost(poster="lingvik", timestamp=2006-01-31 19:48:44)}>
Těžko říct, já měl dva a půl malého příkladu a ještě jsem těsně prošel s jedničkou. Myslím, že mnohem důležitější je velký příklad. Podobně jako v Programování II.
<{/ForumPost}>

<{ForumPost(poster="Necroman", timestamp=2006-01-31 21:27:32)}>

 > lingvik wrote:Těžko říct, já měl dva a půl malého příkladu a ještě jsem těsně prošel s jedničkou. Myslím, že mnohem důležitější je velký příklad. Podobně jako v Programování II.

No, v Programování II stačilo mít malý příklad bez chyby a prolezl jsi skoro jistě s trojkou  :D .
<{/ForumPost}>

<{ForumPost(poster="Kuba", timestamp=2006-01-31 23:05:39)}>

 > Necroman wrote:
 >  > lingvik wrote:Těžko říct, já měl dva a půl malého příkladu a ještě jsem těsně prošel s jedničkou. Myslím, že mnohem důležitější je velký příklad. Podobně jako v Programování II.
 > 
 > No, v Programování II stačilo mít malý příklad bez chyby a prolezl jsi skoro jistě s trojkou  :D .

Tak to u Kryla nee. Mel jsem maly za 1 a velky se mu nezdal a sel jsem.
<{/ForumPost}>

<{ForumPost(poster="lingvik", timestamp=2006-01-31 23:15:25)}>
Aha, tak já vycházel z mé zkušenosti, kdy jsem malý neměl vůbec (tedy bylo toho hodně, ale nebylo to dobře), ovšem velký jsem měl tak dobře, že to Holana nadchlo, zeptal se mě na AVL a dal mi za jedna.
<{/ForumPost}>

<{ForumPost(poster="Almer", timestamp=2006-01-31 23:31:30)}>

 > lingvik wrote:Aha, tak já vycházel z mé zkušenosti, kdy jsem malý neměl vůbec (tedy bylo toho hodně, ale nebylo to dobře), ovšem velký jsem měl tak dobře, že to Holana nadchlo, zeptal se mě na AVL a dal mi za jedna.

Presne stejne zadani, zeptal se na RB tree...jen mi dal na to asi 30s na pripravu, pak na to kouka, rekl, to nemate vse..a 3:)
<{/ForumPost}>

<{ForumPost(poster="hippies", timestamp=2006-02-01 21:11:27)}>

 > lingvik wrote:Aha, tak já vycházel z mé zkušenosti, kdy jsem malý neměl vůbec (tedy bylo toho hodně, ale nebylo to dobře), ovšem velký jsem měl tak dobře, že to Holana nadchlo, zeptal se mě na AVL a dal mi za jedna.

No tak mě u mazání ve stromě utek pointer, velká úplně dobře, ... Kryl 3-4, zeptal se na slejvání, řek sem všechno, i rejpání typu co kdyby se to sypalo takhle a ne takhle, tak řek 2-3 no zeptal se na konstruktor, tak sem řek vše až na tabulku virtuálních metod tak 3
<{/ForumPost}>

