Site Tools


Hotfix release available: 2026-07-14c "Mort". upgrade now! [57.3] (what's this?)
Hotfix release available: 2026-07-14b "Mort". upgrade now! [57.2] (what's this?)
Hotfix release available: 2026-07-14a "Mort". upgrade now! [57.1] (what's this?)
New release available: 2026-07-14 "Mort". upgrade now! [57] (what's this?)
Hotfix release available: 2025-05-14b "Librarian". upgrade now! [56.2] (what's this?)
Hotfix release available: 2025-05-14a "Librarian". upgrade now! [56.1] (what's this?)
New release available: 2025-05-14 "Librarian". upgrade now! [56] (what's this?)
Hotfix release available: 2024-02-06b "Kaos". upgrade now! [55.2] (what's this?)
Hotfix release available: 2024-02-06a "Kaos". upgrade now! [55.1] (what's this?)
New release available: 2024-02-06 "Kaos". upgrade now! [55] (what's this?)
Hotfix release available: 2023-04-04b "Jack Jackrum". upgrade now! [54.2] (what's this?)
users:martin.kocicka:pdp:2b

This is an old revision of the document!


PAR - Vyřešené zkouškové příklady za 2 body

Spodní meze

U spodních mezí komunikačních operací dávejte pozor na to, že se jedná o spodní meze. Neměli byste tedy tvrdit, že nějaká operace trvá tolik a tolik, ale že teoreticky musí trvat nejméně takto. Tzn. upozornit v testu na to, že se jedná o spodní mez, ale že to vůbec neznamená, že takový alogirtmus existuje. Nemusí. Snad to dává smysl, Tvrdík za to bral body.

Spodní mez uzlového zatížení(load) při vnoření 3D mřížky M(z1,z2,z3) do 2D toroidu T(w1,w2)

Určete spodní mez na uzlové zatížení (load) vnoření 3-D mřížky <math>M(z_1, z_2, z_3)</math> do 2-D toroidu <math>K(w_1, w_2)</math>.

Bylo ve zkoušce: 2013-01-30, 2013-12-20

Řešení

Dle mého názoru se jedná o obecnou spodní mez pro load, který vnikne vnořením jednoho grafu do druhého.

Takže jednoduše poměr počtu uzlů grafu vnořovaného (M(…)) k počtu uzlů grafu, do kterého vnořujeme (K(…)).

<math>max(1, \fracz_1_cdot_z_2_cdot_z_3w_1_cdot_w_2) == \text{load}\left(\varphi,\xi\right)\geq\left\lceil \frac{\left|V\left(G\right)\right|}{\left|V\left(H\right)\right|}\right\rceil = \lceil \fracz_1_cdot_z_2_cdot_z_3w_1_cdot_w_2 \rceil</math>

Edit: Kdyz tam das horni celou cast, uz nemusis resit nejaky max(1,…), vzdy ten <math>\lceil zlomek \rceil</math> vyjde minimalne 1

Spodní mez pro uzlové zatížení (load) vnoření wBFn do M(n,n).

Bylo ve zkoušce: 2014-01-13

Řešení

Stejně jak předchozí, akorát s jinými hodnotami

- Motýlek dimenze n má více uzlů než mřížka M(n,n), proto uzlové zatížení musí být nutně větší nebo rovno poměru počtu uzlů obou grafů:
<math>|V(wBF_n)| = n*2^n
|V(M(n,n))| = n*n
load(\varphi , \xi ) \geq \lceil \frac{|V(wBF_n)|}{|V(M(n,n))|} \rceil = \lceil \frac{n*2^n}{n*n} \rceil = \lceil \frac{2^n}{n} \rceil</math>

<math>\frac{2^n}{n} \geq 2</math>, proto není třeba dělat max(1, load)

Spodní mez počtu kroků AAB/SF na Qn

Jaká je spodní mez počtu kroků nekombinujícího AAB na Qn. Všeportový. Odvoďte.

Řešení

  • V jednom kroku lze informovat max. n sousedů (kde n je dimenze)
  • Každý uzel musí dostat <math>N-1</math> zpráv, <math>N=2^n</math>
  • Spodní mez na počet kroků k obdržení všech zpráv je tedy <math>\lceil \frac{2^n-1}{n} \rceil</math>

Trocha teorie:

  • AAB - kolektivní komunikační operace typu vysílání všichni-všem
  • Přednáška 2014/10 slide 6 bod 2

Spodní mez počtu kroků OAB/SF na Qn

Jaká je spodní mez počtu kroků nekombinujícího OAB na Qn. Všeportový. Odvoďte.

Řešení

<math>\rho_{OAB}^{SF}\left(Q_{n},s\right)=\text{diam}\left(Q_{n}\right)=n</math>

Zdroj pošle paket všem sousedům a jakýkoli jiný uzel obdržený paket zkopíruje a pošle ho zbývajícím sousedům.

Spodní mez počtu kroků OAS/SF na Qn

Jaká je spodní mez počtu kroků nekombinujícího OAS na Qn. Všeportový. Odvoďte.

Řešení

  • Uzel musí postupně kontaktovat všechny ostatní uzly <math>2^{n}-1</math>. Ale za jeden krok může poslat pouze <math>n</math> zpráv. Nejrychleji tedy odešle všechny zprávy v <math>\lceil \frac{2^n-1}{n} \rceil</math> krocích.

<math> \rho_{OAS,k}^{SF}\left(G,s\right)=\left\lceil \frac{\left|V\left(G\right)\right|-1}{k}\right\rceil =\left\lceil \frac{2^{n}-1}{n}\right\rceil </math>

Spodní mez počtu kroků AAS/SF na Qn

Jaká je spodní mez počtu kroků nekombinujícího AAS na Qn. Všeportový. Odvoďte.

Řešení

  • Každý uzel <math>2^{n}</math> musí postupně kontaktovat všechny ostatní uzly <math>2^{n-1}</math>. Jedna zpráva z uzlu půjde alespoň dimenzi kroků. V jednom globálním kroku však může každý uzel <math>2^{n}</math> odeslat pouze zprávu do každé dimenze <math>n</math>. <math>(2^{n-1} \cdot 2^{n} \cdot n )/(2^{n} \cdot n)= 2^{n-1}</math>

:?: dotaz: Opravdu je tohle zduvodneni korektni? Vzdyt preci neni pravda, ze ostatnich uzlu je <math>2^{n-1}</math>. Ostatnich uzlu je <math>2^{n}-1</math>. Kdyz vezmu i samotny zdrojovy uzel (ve vzdalenosti 0) je pak prumerna vzdalenost od zdroje k <math>2^{n}</math> cilum <math>n/2</math>. Zpravy potrebuje rozesilat vsech <math>2^{n}</math> uzlu, ale v jednom kroku <math>2^{n}</math> uzlu zaroven odesila zpravy do <math>n</math> smeru. Vyjde to stejne, ale jak rikam, jde mi hlavne o ten duvod, kteremu dost nerozumim. (bliznjan)

:?: Opravdu to má být <math>2^{n-1}</math>? Já si spíš myslím, že když každý krok můžu vyslat maximálně <math>n*2^n</math> zpráv a obdržet celkem potřebuji <math>(2^{n}-1)*2^n</math> zpráv, tak by výsledek měl být spíš <math>1)</math>. Uzlová symetrie je dána vlastnostmi kartézského součinu, který uzlovou symetrii zachovává (a kružnice je uzlově symetrická).

Toroid je hranově symetrický, jen pokud má všechny dimenze stejně veliké - existuje automorfismus rotace. To je dáno tím, že k-ární n-toroid vznikne kartézskou mocninou kružnice o délce n, <math>K_n^k</math>, a kartézská mocnina zachovává i hranovou symetrii (4 přednáška, slide 7, video cca 2:10:00 konrétně pro toroid). Vlastnosti toroidu v PDF 4. přednášky na slajdu č. 30 (MI-PAR 2011/2012).

:?: Dodatek Graf je uzlove symetricky, pokud pro kazde dva uzly existuje automorfismus.
Automorfismus

  • je mapovani mnoziny uzlu na mnozinu ulzu,
  • zachovava vzdalenosti

Automorfismus rotace o jeden uzel, na K(4) je namapovani uzlu 1→2, 2→3, 3→4, 4→1

Dukaz automorfismu : pro libovolne dva sousedni uzly aplikujem automorfismus a ve vysledku jsou opet sousedni. Proste staci namalovat rotaci kruznice.

:!: Pozor, pokud do písemky napíšete jako zdůvodnění pouze automorfizmus pro K(z) a to, že kartézský součin zachovává uzlovou symetrii, Tvrdík vám to za plný počet neuzná. To, že kartézský součin zachovává automorfismus by se totiž muselo ještě samostatně dokázat. Chce to asi(?) opravdu přímo tam ten příklad automorfismu pro 2D napsat.

pozn.: k tomu dokazování - stačí aspoň ten důkaz naznačit, když uvidí, že víte jak na to, tak vám ty body dá:) Tzn. vyjít z automorfismů jednotlivých kružnic + definice kart. součinu a napsat si automorfismus pro uzly (u1,u2) a (v1,v2) a naznačit tam, že se využije těch automorfismů např. pro K(z1) a K(z2). Viz video z prosemináře.

Automorfismy hyperkrychle Qn

Automorfismy hyperkrychle Qn, kolik jich je a vysvětlit proč.

Bylo ve zkoušce: 2012-01-24

Řešení

:!:Viz CZ skripta [2006] str. 59 nebo záznam 7. prosemináře, čas 22:40

Qn má 2n uzlů (roven počtu n-bitových binárních řetězců), tudíž máme 2n možností odkud definovat počátek souřadného systému (tj. do kterého uzlu umístit nulu). Dále máme n! možností, jak uspořádat pořadí dimenzí (tj. který směr bude souřadnice X, Y atd.).

Formálněji řečeno, pro Qn existuje 2n přeložení (translací) a každé má n! permutací dimenzí.

  • Přeložení je automorfismus <math>\tau_{u \mapsto v}(x)= x\oplus (u \oplus v) = x\oplus y</math>, kde <math>\oplus</math> je bitová nonekvivalence (XOR).
  • Počet všech permutací n-bitového řetězce je <math>n!</math>

Celkový počet automorfismů je tedy <math>2^n\cdot {n!}</math>

Vnoření

Vnoření CBTn do Qn+1

Zdůvodněte proč nelze na CBTn pro n > 1 vnořit do Qn+1 s load = dil = 1.

Bylo ve zkoušce: 2012-01-10

Řešení

:!:Viz přednáška 5 slide 19 nebo CZ skripta [2006] str. 79, EN skripta [2009] str. 59

  • počet uzlů <math>CBT_n = 2^{n+1}-1</math>
  • počet uzlů <math>Q_{n+1}=2^{n+1}</math>
  • jestliže existuje vnoření <math>CBT_n</math> do <math>Q_{n+1}</math> s parametry load=dil=1, pak <math>CBT_n</math> musí být podgraf <math>Q_{n+1}</math>
  • protože <math>CBT_n</math> není podgrafem <math>Q_{n+1}</math>, vnoření nemůže existovat.
  • <math>Q_{n+1}</math> je vyvážený bipartitni graf ⇒ má stejný počet černých a bílých uzlů
  • <math>CBT_n</math> není vyvážený bipartitní graf

<math>\text{|bilych|} = 1+2^2 + 2^4 + … + 2^{2k}</math>

<math>\text{|cernych|} = 2+2^3 + 2^5 + … + 2^{2k+1} = 2 \cdot {\underbrace{(1+ 2^2 + 2^4 + … + 2^{2k})}_{\text{bile}}}</math>

  • |bílých| ≠ |černých| ⇒ <math>CBT_n</math> skutečně není vyvážený bipartitní graf.

<math>CBT_n</math> není vyvážený bip. graf a tudíž není podgrafem <math>Q_{n+1}</math>, nelze tedy vnořit <math>CBT_n</math> do <math>Q_{n+1}</math> s load=dil=1.


Nápad na jednodušší důkaz respektive interpretaci:

  • <math>CBT_n</math> má <math>2^n</math> listů, což si spočítáme jako rozdíl počtu uzlů <math>CBT_n</math> a <math>CBT_{n-1}</math>, ty listy jsou od kořene ve vdálenosti n.
  • Tak si najdeme, kolik uzlů je od libovolného uzlu v takové vzdálenosti v <math>Q_{n+1}</math>
  • když použijeme důkaz, který je o něco málo níže, zjistíme, že těch uzlů, na které by se měli namapovat listy je pouze <math>n+1</math>.
  • Což pro <math>n=1</math> ukazuje, že vnoření s danými parametry je možné, ale pro vyšší hodnoty už ne.
  • Tudíž nemůže být podgraf a nemůže dojít k vnoření s takovými parametry.

Pozn. by Vity: Obecně si namalujte strom, kde v každé úrovni obarvěte uzly jinou barvou a všimněte si, že s každou další úrovní má mnohem více uzlů poslední barvě než té předešlé barvy.

:?: Otazka: Zda se mi, ze se tu operuje s myslenkou: “(Graf A je vyvazeny bipartitni a graf B je nevyvazeny bipartitni) ⇒ graf B nemuze byt podgrafem grafu A”. To mi ale prijde jako blabol (nebo to alespon neplati obecne) - napr. kdyby graf A byl Q3 a graf B by vzniknul z grafu A odsranenim jednoho uzlu.

Trocha teorie:

  • CBT - úplný binární strom

Vnoření mřížky M do hyperkrychle Qn

Mřížku M(x, y, z) mapujeme do krychle Qn. Určete n a nalezněte zobrazovací fci [x,y,z] → Qn, dil = load = 1.

Řešení

:!:Viz skripta CZ [2006] str. 83 nebo přednáška 5, FIT slide 25, FEL slide 16, EN skripta [2009] strana 64 Lemma 4.24

<math>\normalsize M(x, y, z)</math> je podgrafem hyperkrychle <math>\normalsize Q_n, \:n= \lceil\log{x}\rceil+\lceil\log{y}\rceil+\lceil\log{z}\rceil,\: x, y, z \ge 2</math>. Toto vnoření je optimální pokud <math>\normalsize \lceil\log{x}\rceil+\lceil\log{y}\rceil+\lceil\log{z}\rceil=\lceil\log(x \cdot y \cdot z)\rceil</math>.

Mřížku rozdělíme na kartézský součin <math>\normalsize M(x)\times M(y)\times M(z)</math>. Každou z jednorozměrných mřížek <math>\normalsize M(a)</math> namapujeme do krychle <math>\normalsize Q_{\lceil {\log{a}} \rceil}</math>. Výsledné vnoření je dáno kartézským součinem <math>\normalsize Q_{\lceil {\log{x}} \rceil}\times{Q_{\lceil {\log{y}} \rceil}}\times {Q_{\lceil {\log{z}} \rceil}}</math>, tedy <math>\normalsize n=\lceil\log{x}\rceil+\lceil\log{y}\rceil+\lceil\log{z}\rceil=\lceil\log(x \cdot y \cdot z)\rceil</math>

Mapovací funkce je dána zřetězením mapovacích fcí pro jednorozměrné mřížky. Mapovací funkce jednorozměrné mřížky <math>M(a)</math> do krychle <math>Q_{\lceil{\log{N}\rceil}}</math> je nějaký Grayův kód.

Grayův kód pro vnoření je definování jako: (CZ skripta 79str. lepe)

nechť je b=bn-1…b0 bin. číslo pak BRGC (Binary reflected gray code) Gn pro b je definován jako:

1) bn-1=gn-1

2) bi=gn-1 +2 … gi+1 +2 gi pro i=n-2, … , 0

:!: V přednáškách 2015/16 přednáška 5, slide 17 je definice BRGC takováto: BRGC zakódování binárního čísla b = bn-1…b0 je Gn(b) = gn−1…g0, kde

1) <math>g_{n-1}=b_{n-1}</math>,

2) <math>g_{i}=b_{i+1}\mathtt{\,XOR\,}b_{i}</math> pro <math>i=n-2,\ldots,0</math>.

FIXME Je tu obecny popis “ze by se to delalo zretezenim mapovacich funkci”, ale chtelo by to dat vsechny tyhle informace dohromady a napsat tu finalni funkci

Důkaz možnosti vnoření kružnice do libovolného G s load=1, dil<=3

Dokažte, že do libovolného souvislého grafu G lze vnořit kružnice s n uzly s load = 1, dil ≤ 3.

Bylo ve zkoušce: 2012-01-31 4b

Řešení

:!:Viz přednáška 5 FIT [2012] slide 41, skripta CZ [2006] str. 89 nebo EN [2009] str. 72

  1. Najdeme kostru <math>{T_g}</math> (libovolnou) grafu G
  2. Procházíme kostru <math>{T_g}</math> do hloubky. Uzly v liché hloubce přidáme při prvním vstupu do daného uzlu, uzly v sudé hloubce přidáme při posledním vstupu do daného uzlu.

Load je vždy 1, protože do každého uzlu přidáme max. jeden uzel.
Dilatace je max. 3 a to pouze při přechodu mezi podstromy přes společný kořen. Důkaz, že dilatace nikdy nemůže být horší než 3 je indukcí za použití faktu, že stromy jsou rekurzivní.

Vnoření kružnice do libovolného G

Důkaz výpočetní ekvivalence 2D toroidu a 2D mřížky

Dokažte, že 2D toroid T(z1, z2) je výpočetně ekvivalentní s 2D mřížkou M(z1, z2).

Bylo ve zkoušce: 2012-01-17 a 2015-01-06 (ale obecně pro (z1, …, zn))

Řešení

:!:Viz přednáška 5, FIT slide 27, FEL slide 20 nebo CZ skripta [2006] str. 85

  • Sítě G a H jsou kvaziizometrické pokud G může být vnořen do H a naopak s konstantními měřítky vnoření.
  • G a H jsou výpočetně ekvivalentní pokud jedna může simulovat druhou s konstantním zpomalením.
  • Jsou-li sítě kvaziizometrické, tak jsou i výpočetně ekvivalentní (opačně to neplatí, protože vnoření nemohou postihnout dynamické chování aplikací na cílové síti).

<math>M(z_1,z_2)</math> se vnoří do <math>T(z_1,z_2)</math> s load = dil = ecng = 1, protože <math>M(z_1,z_2)</math> je podgraf <math>T(z_1,z_2)</math>.

<math>T(z_1,z_2)</math> lze vnořit do <math>M(z_1,z_2)</math> s load=1, dil=ecng=2 takto:

  1. provedeme dekompozici <math>T(z_1,z_2)</math> na <math>T(z_1)\times{T(z_2)}</math>
  2. vnořím dekomponové toroidy <math>T(x)</math> do dekomponovaných mřížek <math>M(x)</math>
  3. první polovinu <math>T(x)</math> uzlů namapuji na liché uzly <math>M(x)</math> a druhou polovinu uzlů <math>T(x)</math> namapuji na sudé uzly <math>M(x)</math>.

Mapování uzlů z toroidu do mřížky
Na liché uzly mapuji vzestupně a na sudé sestupně.

V podstatě je to stejné jako mapování kružnice na kostru, která je pouze lineárním seznamem. Viz předchozí úkol. Důkaz možnosti vnoření kružnice do libovolného G s load=1, dil⇐3.

Trocha teorie:

  • dil - dilatace - maximální délka obrazů zdrojových hran v cílové siti
  • load - zatížení - max počet zdrojových vrcholů mapovaných na 1 uzel
  • ecng - linkové zahlcení - maximální počet obrazů zdrojových hran procházejících skrz cílové linky, tj. kolik cest vede přes 1 hranu

Odvození vzorečku

Počet permutací nepřímé sítě

Kolik udělá permutací nepřímá síť, která má k úrovní, N čísel na vstupu, jeden přepínač 2 × 2.

Bylo ve zkoušce: 2012-01-03 a 2015-01-06

Řešení

:!:Viz přednáška 4, slide 37 FEL; slide 42 FIT; EN skripta [2010] str. 48

V každé úrovni je <math>\normalsize {\Large\lceil} \frac{N}{2} {\Large\rceil}</math> přepínačů. Pokud je N liché, tak poslední nemůže přepínat, takže se použije jen <math>\normalsize {\Large\lfloor} \frac{N}{2} {\Large\rfloor}</math>. Každý přepínač se může vyskytovat v jednom ze dvou stavů – rovně nebo křížem (=, ×). Každá úroveň tedy může vytvořit <math>\normalsize 2^large_lfloor_frac_n_2_large_rfloor</math> permutací. Protože síť má k úrovní, může tedy vytvořit <math>\normalsize {\rm min}\bigl(2^{\lfloor\frac{N}{2}\rfloor k}, N!\bigr)</math> permutací (N! je maximální počet permutací N prvků).

:?: V přednášce 4, slide 39 (2011), je “Přepínače 2 x 2 mohou být v 1 ze 4 stavů”, proč tady se tedy píše jen o dvou stavech?

:!: Po použití druhých dvou stavů (upper/lower broadcast) by již něslo o permutaci. Ztratil bych totiž jeden ze vstupů.

Průměr na oBFn

Odvodit průměr na oBFn.

Řešení

:!:Viz přednáška 4/2014, FIT slide 37

diam(oBFN) = 2*n

Stačilo pouze vysvětlit, že je to vzdálenost mezi nejvzdálenějšími uzly.

Já tam (za 2 body) napsal něco takového + nakreslil <math>oBF_3</math>. Předpokládám, že bez posledního odstavce by to tedy takto šlo použít i pro <math>wBF_n</math>:

<math>wBF_n</math> vzniká z <math>Q_n</math> nahrazením každého uzlu kružnicí <math>K(n)</math> a zároveň zdvojením hyperkubických hran tak, že nespojují jen dva stejnolehlé uzly, ale uzly sousední, jak nalevo, tak napravo. Průměr je vzdálenost mezi nejvzdálenějšími uzly, u <math>wBF_n</math> je tedy tvořen průměrem <math>Q_n</math>, což je <math>n</math> a průměrem <math>K(n)</math>, což je <math>\lfloor \frac{n}{2} \rfloor</math>.

<math>oBF_n</math> vzniká z <math>wBF_n</math> tak, že se “horní” uzel kružnice v rozdělí na dva a kružnice se vlastně nahradí mřížkou <math>M(n+1)</math>. Průměr <math>oBF_n</math> je tedy tvořen průměrem původní <math>Q_n</math>, což je <math>n</math> a průměrem <math>M(n+1)</math>, což je rovněž <math>n</math>.

<math>diam(oBF_n) = 2n</math>

Bylo ve zkoušce: 2015-01-28

Průměr na wBFn

Odvodit průměr na wBFn.

Bylo ve zkoušce: 2012-02-03

Řešení

:!:Viz přednáška 4, FIT slide 35, FEL slide 35 nebo skripta CZ [2006] str. 66, EN [2009] str. 47

Uzel ve <math>wBFn</math> je dvojice <math>(i,x), 0\leq{i}< n, x=B^n, B=\lbrace0,1\rbrace</math>.
Hrana je definována mezi uzly <math>(i,x)</math> a <math>(j,y)</math> pokud

  • a) <math>x=y</math> a <math>j=i\oplus_n{1}</math> (pohyb po kružnici)
  • b) <math>j=i\oplus_n{1}</math> a <math>y=neg_i{x}</math> (pohyb po hyperkubických hranách)

⇒ pokud se <math>{x}</math> a <math>{y}</math> liší v <math>{n}</math> bitech, je zapotřebí <math>{n}</math> hyperkubických hran ke změně <math>{x}</math> na <math>{y}</math>, teda z uzlu <math>(i,x)</math> se dostanu do <math>(i\oplus_n{n},y)=(i,y)</math>
V nejhorším případě musí ještě udělat <math>\left\lfloor {\frac{n}{2}} \right\rfloor</math> kroků v této kružnici ⇒ <math>n + \left\lfloor {\frac{n}{2}} \right\rfloor</math> kroků
⇒ <math>\phi(wBF_n)=n + \left\lfloor {\frac{n}{2}} \right\rfloor</math>

Pozn. by Vity: Ty pohyby po topologii možná vypadají děsně, ale podívejte se přitom na obrázek a co to dělá s těmi hranami - jak se mění index řádku <math>{i}</math> a index sloupce <math>{x}</math> (což je de facto sloupeček s tou kružnicí) a zjistíte, že to už dávno umíte.

Pozn. Když jsem si to zkoušel na obrázku pro n=3, zarazilo mě, že se nemůžu dostat po hyperkubických hranách do 010, jak tedy dokážu, že je výše zmíněný průměr správně? Musím se dostat za n tahů do správného sloupce. To udělám tak, že procházím bity odzadu. Pokud se shodují, udělám pohyb po kružnici, jinak udělám pohyb po hyperkubické hraně. Poté kontroluji další bit.

<math>wBF_n</math> je uzlově symetrický, proto je tato vzdálenost pro všechny uzly stejná

Odvoďte pro zadaný uzel v hyperkrychli výraz pro počet uzlů ve vzdálenosti i

Řešení

:!:Viz přednáška 4, FIT slide 25, FEL slide 20 nebo CZ skripta [2006] str. 59 a EN [2010] str. 41

  • Pro všechny uzly ve vzdálenosti i od našeho uzlu v Qn platí, že se jejich adresa liší v i bitech (dimenzích). Počet uzlů ve vzdálenosti i je <math>{n \choose i}</math>, tj. všechny možné kombinace i bitů.
  • Na vše se můžeme podívat stylem, že máme uzel, jehož adresa má samé nuly = n nul. Ve vzdálenosti i jsou uzly, jejichž adresa má (n - i) nul a i jedniček. Takže se ptáme, kolik existuje kombinací i jedniček a (n - i) nul ve vektoru délky n, tj. <math>{n \choose i}</math>.
  • Krychle je uzlově symetrická, z každého uzlu vypadá graf stejně, takže pro každý uzel platí to samé.

Odvoďte poloměr 2D toroidu

Bylo ve zkoušce: 2012-12-18 2012-05-18

Řešení

Poloměr je minimum z excentricit. Excentricita pro uzel udává, jak je od něj vzdálený nejvzdálenější uzel. 2D toroid nemusí být hranově symetrický, protože může mít různě dlouhé dimenze, ale je uzlově symetrický. Rozložit si ho lze na kartézský součin kružnic. Má-li kružnice <math>z</math> uzlů, nejvzdálenější v ní je ve vzdálenosti <math>\lfloor\frac{z}{2}\rfloor</math> – tedy je někde v pomyslné polovině, přičemž tam půjdu tou kratší stranou. Nejvzdálenější uzel ke každému uzlu bude takový, když se v každé dimenzi hnu o těch <math>\lfloor\frac{z}{2}\rfloor</math> – tedy excentricity všech uzlů by měly vyjít stejně, a to jako suma <math>\lfloor\frac{z_i}{2}\rfloor</math> přes všechny dimenze, tzn. ve 2D <math>\lfloor\frac{z_1}{2}\rfloor + \lfloor\frac{z_2}{2}\rfloor</math>, kde to <math>z</math> se mění a je to počet uzlů v dané dimenzi. Poloměr by měl být minimum z těchto stejných hodnot, takže je to to samé.

:?: Domněnka by voho: uzlově symetrické grafy mají excentricitu všech uzlů stejnou.

Edit by plech.d: Ano a to navíc znamená, že u US grafů je poloměr roven průměru.

Obecně:

<math>\text{radius}\left(K\left(z_{1},z_{2},\dots,z_{n}\right)\right)=\text{diam}\left(K\left(z_{1},z_{2},\dots,z_{n}\right)\right)=\sum_{i=1}^{n}\left\lfloor \frac{z_{i}}{2}\right\rfloor</math>

Odvoďte výraz pro poloměr n-rozměrné hyperkrychle Qn

Řešení

Poloměr grafu je minimum z excentrit. Excentricita uzlu je nejkratší možná vzdálenost do nejvzdálenějšího uzlu. Krychle je uzlově symetrická, všechny uzly budou mít stejnou excentricitu – nejvzdálenější uzel od zvoleného uzlu je ve vzdálenosti n – jde o to, že mám n dimenzí, a všechny musím zinvertovat. Hledáme minimum z hodnot, které jsou všechny n, takže výsledek by měl být n.

Ještě jinak: excentricita(u) = maximální vzdálenost z uzlu u na kraj grafu. Což v případě <math>Q_n=n</math> (vždycky)
poloměr = minimální excentricita (ze všech uzlu)
průměr = maximální excentricita (ze všech uzlu)
Takže poloměr v <math>Q_n</math> = průměr = n

:?: Domněnka by voho: uzlově symetrické grafy mají excentricitu všech uzlů stejnou.

Důkaz sporem by wabbit: Nechť G je uzlově symetrický graf a mějme automorfismus <math>f:f(v)=u</math>, předpokládejme že:

<math>\exists u, v \in V(G): exc(u) \gt exc(v)</math> potom by platilo že <math>exc(u) \gt exc(f(v))=exc(u)</math> což neplatí :-)

Odvoďte poloměr 3D mřížky

Bylo ve zkoušce: 2016-05-26

Řešení

<math>\text{radius}\left(M\left(a,b,c\right)\right)=\left\lceil \frac{a}{2}\right\rceil +\left\lceil \frac{b}{2}\right\rceil +\left\lceil \frac{c}{2}\right\rceil </math>

(sry za špatné formátování, ale je to třikrát horní část)

EDIT: podle mýho dolní celá část.

Odvození vzorce - kolik Qn obsahuje různých podkrychlí dimenze k, kde k<=n

Bylo ve zkoušce: 2014-02-12

Řešení

Dimenze k = počet *, např. 101*0* je dvourozměrná podkrychle

počet podkrychlí = (kolika způsoby můžeme rozmístit hvězdičky) * (počet kombinací zbývajících 0 a 1)

<math>n_choose_k{\cdot}2^{(n-k)}</math>

Podrobněji

Všimněmě si, že se jedná o zobecnění tvrzení o počtu hran na <math>Q_{n}</math>, kde se tvrdí, že to je <math>n\cdot2^n</math>, což odpovídá tomuto vztahu. Dimenze nám definuje jaké podkrychle hledáme. Dimenze 0 tedy znamená, že hledáme vrcholy a dimenze 1 počet hran.

Pokud hledáme vyšší dimenze, tak bereme v potaz dvě operace. Kolik kombinací dimenzí můžeme “zafixovat” (např pro dimenzy 2 jde o: <math>(d_1,d_2),(d_1,d_3),…(d_{n-1},d_n)</math>). Pro každé toto zafixování generujeme všechny možné variace s opakováním jedniček a nul. Máme však už jen omezené množství dimenzí. (Například pro dimenzi 2 už máme pouze <math>n-2</math> volných pozic pro variace. Na ty pozice postupně generujeme všechny možné variace: <math>(0,0…0),(0,0…0,1),…(1,1…1))</math>. Jejich význam je takový, že nám každá konkrétní variace definuje jednu konkrétní podkrychli.

Příklad

Mějme dimenzi 3, tudíž krychli.

  1. k=0, (body), každá variace definuje konkrétní souřadnice bodu [0,0,0] je bod
  2. k=1, (hrany), každá variace definuje konkrétní dva body, které tvoří hranu [0,0,*] ⇒ umožňuje dosadit [0,0,0] a [0,0,1], což nám jednoznačně určuje hranu
  3. k=2, (čtverec), každá variace definuje konkrétní 4 body, které dohromady tvoří čtverec [0,*,*] ⇒ umožňuje dosadit [0,0,0], [0,0,1], [0,1,0] a [0,1,1], což nám jednoznačně určuje čtverec
  4. k=3, (krychle), ta je v krychli jen jedna, neboť 3 proměnné dávají pouze jednu možnost [*,*,*] ⇒ umožňuje dosadit [0,0,0], [0,0,1], [0,1,0], [0,1,1], [1,0,0], [1,0,1], [1,1,0] a [1,1,1], což nám jednoznačně určuje krychli

Možností na zafixování dimenzí odpovídá problému “kolik kombinací k dimenzí můžu vybrat z n” ⇒ kombinace bez opakování

Kolik takových podkrychlí existuje odpovídá “kolik je možností jak zapsat 1 a 0 do <math>n-k</math> pozic” ⇒ variace s opakováním

Ostatní

Bijekce V(Q7) do V(Q7) - automorfismus hyperkrychle

Uvažujte bijekci <math>f: V(Q_7) \to V(Q_7)</math>, o níž pouze víme, že f(0101110) = 1010110 a f(1101010) = 0101111. Může být f automorfismem hyperkrychle Q7? Svoji odpověď zdůvodněte.

Bylo ve zkoušce: 2013-01-23, 2012-06-26, 2014-02-04

Řešení

Automorfismy v krychli vzniknou přeložením a permutace a nebo kombinací obojího. Ani jedna operace nemění hammingovu vzdálenost vzorů a obrazů (musí platit, že hammingova vzdálenost dvou obrazů odpovídá vzdálenosti jejich vzorů - aneb sousedi zůstávají sousedy!). Když si spočtu vzdálenost obrazů a vzorů, vyjde pro oba automorfismy jiná (vzory mají 2 a obrazy 5). Nejedná se o stejný automorfismus na krychli, neboť původně byli v krychli vzdálení 2 dimenze (cesta 2 hran) a v automorfismu by byli vzdáleni 5 (cesta o 5 hranách).

Nemůže - automorfismy hyperkrychle nastávají při kombinaci permutací a negací adresových bitů.
Když se ty dvě posloupnosti napíšou pod sebe, tak originální adresy mají 5 stejných sloupců. Nové adresy ale mají jen 2 stejné sloupce, což by nemělo nastat.

Pozn. by Kugel: Ja si myslím, že jednoduchšie to je takto: Povedzme, že prvé <math> f </math> nám definuje automorfizmus, teda je to buď posun alebo rotácia. Rotácia to určite nie je, pretože 0101110 má 3 jedničky po sebe a 1010110 nemá, takže rotácie určite nie. Ešte by to mohol byť posun. Definovaný takto: <math>{f}_{u \rightarrow v}(x) = x \oplus (u \oplus v)</math> teda <math>{f}_{u \rightarrow v}(1101010) = 1101010 \oplus (0101110 \oplus 1010110) = 0010010</math>, čo teda rozhodne nie je 0101111 ako ukazuje druhé <math> f </math> v zadaní. Pozn: Aby se zachoval automorfizmus musí se zachovat sousednost uzlů - sousedé musí zůstat sousedy, čehož docílíme aplikováním stejných operací na adresy uzlů. 7. proseminář, čas 22:40+

Pozor! Nestačí rotace nebo posun, ale může to také být jejich kombinace! Takže je třeba si vyzkoušet nalézt takovou funkci, XOR sám nestačí.

:!: Info přímo od Tvrdíka od zkoušky: Stačí aby byla stejná Hammingova vzdálenost vzorů a obrazů. Tečka. Na vzdálenosti změněnejch bitů nezáleží.

+1, dneska jsem to přesně tak napsal a dal mi dva body ještě než jsem si sednul :-)

Průnik krychlí

Jakou adresu a dimenzi má průnik dvou podkrychlí s1 = * 0 1 * * 0 * * 1 a S2 = 1 * * 1 * 0 1 * 0 v hyperkrychli Q9, Zdůvodněte.

Bylo ve zkoušce: 2012-01-31

Řešení

Formálněji: sloučení vznikne použitím této funkce f na jednotlivé bity:

  • f(0,0) = 0
  • f(1,1) = 1
  • f(0,1) = f(1,0) = prazdna množina
  • f(x,0) = f(0,x) = 0
  • f(x,1) = f(1,x) = 1
  • f(x,x) = x

Lidsky:

Pro každou dimenzi se snažíme vyhovět oběma krychlím. Pokud jedna použije “Jokera” neboli * tak tam může být jak 0 tak 1. Jestliže se krychle liší v nějaké dimenzi, tak potom nemají průnik. Pokud k takové situaci nedojde, tak výsledek je počet hvězdiček v průniku.

S1 x 0 1 x x 0 x x 1
S2 1 x x 1 x 0 1 x 0
Sloučení f(S1[i],S2[i]) 1 0 1 1 x 0 1 x Nan

Dimenze je 0 (:?: tím je myšleno Ø tedy žádný průnik :?:), neboť se krychle liší v poslední dimenzi. Výsledek znázorňuje dva protější čtverce, ale nemají průnik, neboť je každý v trochu jiné dimenzi.

Kdyby bylo zadání: <math>s_1 = *0101</math> a <math>s_2 = 1**1*01*1</math>

  1. sloučíme dohromady: <math>s = s_1 \cap s_2 = 1011*01*1</math>
  2. dimenze průniku je 2
  3. Průnik jsou body [1,0,1,1,[0|1],0,1,[0|1],1]

škola zkoušky s_řešením

1)
2^{n}-1)*2^n)/(n*2^n) = (2^{n}-1)/n</math>. Nebo se mýlím? :?: Reakce na předchozí otázku: Podle skript (10.1.4 Příklad výpočtů spodních mezí) to je skutečně těch <math>2^{n-1}</math>. Ohledně odečítání té jedničky si nejsem jistý, ale v tvém výpočtu chybí ta úvaha, že ta zpráva musí putovat přes další uzly, takže nestačí ji odeslat a zapomenout na ni jako by už neexistovala, ona totiž přidá práci ostatním uzlům (a stejnětak sousední uzly takto přidávají práci našemu jednomu uvažovanému uzlu) a té práce bude v celém grafu dohromady tolik, jak moc daleko ty zprávy musí odesílat. Tím, že pro každý uzel ve vzdálenosti <math>n</math> existuje uzel ve vzdálenosti <math>0</math>, pro každý ve vzdálenosti <math>n-1</math> existuje ve vzdálenosti <math>1</math> až po <math>n/2</math>, tak průměrně každá zpráva musí provést <math>n/2</math> kroků, proto je to potřeba vynásobit ještě právě tím <math>n/2</math>, díky čemuž ve finále obě <math>n</math> zmizí a <math>(2^{n})/(2)=2^{n-1}</math>. (bliznjan) :!: Vysvětlení ze skript (CZ 2006 str. 171): AAS je vlastně <math>2^{n}</math> operací OAS běžících současně a proto se celková práce opět sčítá, celková práce <math>h_{AAS}(Q_{n}) = 2^{n}*h_{OAS}(Q_{n}) = n*2^{2*n-1}</math>. Plně duplexní všeportová <math>Q_{n}</math> může provést v jednom paralelním kroku nejvýše <math>n*2^{n}</math> hopů. Proto celkovou práci pro AAS nemůže zvládnout dříve než v <math>\frac{n*2^{2*n-1}}{n*2^n} = 2^{n-1}</math> krocích. (maurever) Poznámka: Souhlasím s posledním vysvětlením, viz přednáška 10, slide 6, rok 2016. Jen doplním, že v této přednášce se počítá se spodní mezí <math>\eta</math> a nikoliv horní, nicméně vychází to stejně. A ještě pro úplnost tento vzorec: <math>\eta_{OAS}\left(Q_{n}\right)=\sum_{k=1}^{n}k*\binom{n}{k}=n2^{n-1}</math> ===== Spodní mez pro OAB/WH na toroidu ===== Odvoďte spodní mez pro OAB na toroidu <math>T(z_1,z_2,z_3)</math> s přepínáním WH. Startovní uzel je <math>[s_1,s_2,s_3]\quad s_i<z_i</math>.
Uzel je výstupně všeportový. ==== Řešení ==== :!:Viz skripta CZ [2006] str. 177 nebo přednáška 10 slajd 28
  • Nezávisí na vybraném počátečním uzlu, protože topologie je uzlově symetrická.
  • V každém kroku se informace posílá <math>2n</math> sousedům, což odpovídá stupni uzlu v toroidu. V kroku <math>\mathrm{i}</math> je informovaných <math>(2n+1)^i</math> uzlů.
Nejdřív zná tajemství jeden. Pošle to šesti a ví jich to sedm. Každý ze sedmi to pošle dalším 6. Tzn. že to bude znát dalších 42, ale předtím jich to už znalo 7.. 42+7=49.. Ještě mě napadlo sem rozepsat, proč to je zrovna <math>(2n+1)^k</math>.. Jak jsem psal výše, aktuální počet informovaných, je počet informovaných v předchozím kroku, krát <math>2n</math> (to proto, že každý může informovat max <math>2n</math> dalších uzlů), plus počet aktuálně informovaných.. Tzn. <math>Inf_i = Inf_{i-1}(2n) + Inf_{i-1} </math> <math>Inf_i = Inf_{i-1}(2n + 1) = Inf_{i-2}(2n + 1)(2n + 1) = …. = (2n+1)^i</math> Nakonec se akorát místo toho násobení těch závorek napíše mocnina… Všechny uzly budou informovány v <math>\mathrm{k}</math> krocích (uzlů je <math>\mathrm{N}</math>) ⇒ <math>N=(2n+1)^k</math> ⇒ <math>\log_{(2n+1)}{N}=k</math>
⇒ pro 3D je výsledek <math>\log_{7}{({z_1}{\cdot}{z_2}{\cdot}{z_3})}</math> Výše uvedený výpočet zapsaný obecně: <math>\rho_{OAB}^{WH}\left(G,s\right)=\left\lceil \log_{k+1}\left(\left|V\left(G\right)\right|\right)\right\rceil </math>, kde <math>k</math> je počet portů sítě, v případě toroidu tedy <math>(2*n)+1 = (2*3)+1 = 7</math>. Trocha další teorie:
  • OAB - kolektivní komunikační operace typu vysílá jeden všem
  • WH - červí technika přepínání
  • slajd 10/18, 10/28 2014
===== Spodní mez na počet kroků AAB/SF na 3D toroidu ===== Určete spodní mez pro počet kroků operace AAB na všeportovém 3D toroidu. BEZ kombinování paketů. ==== Řešení ==== :!: EN skripta pg. 168 Lemma 9.24
  • n= počet dimenzí
  • N= počet všech uzlů = <math>|V(T_n)|</math>
  • Uzel může v každém kroku přijmout 2n zpráv = <math> degree(T_n)</math>
  • Při AAB musí celkově přijmout N-1 zpráv
  • Všechny zprávy tedy přijme nejdříve po <math>\mathrm{k}</math> krocích, kde <math>\mathrm{k}=\frac{|V(T_n)|-1}{degree(T_n)}=\frac{N-1}{2n}</math>
Spodní mez pro <math>T(z_1,z_2,z_3)</math> tedy vychází <math>\rho_{AAB} = \frac2013-01-09]] a [[škola:předměty:mi-par:par_zkouska_2014-01-06|2014-01-06]]// ==== Řešení ==== Mřížka má evidentně lichý počet uzlů, které musím všechny právě jednou navštívit. Bez ohledu na počáteční uzel, neboť se do něj musím vrátit. Vykonám tedy **lichý** počet kroků. Nyní vytvořím 2D vektor, odpovídající rozměrům mřížky podle počtu hran, dostanu (000000,0000) - mezi sedmi uzly je šest hran, ve druhém rozměru pak čtyři. Zajímají mě skupiny hran, ne jednotlivé hrany, nebo dokonce uzly. Nyní si vyberu jakýkoli uzel a udělám jeden krok - podle vybrané hrany provedu negaci bitu ve vektoru. Můžu jich provést kolik chci, ale je zřejmé, že abych se dostal do výchozího uzlu, musím provést za každý krok právě jeden zpět. Tedy **sudý** počet kroků. **=> spor** :!: Dodatek by Empire: V podstate do funguje stejne jako je dukaz na Qn, jen misto negace je tu parita (0-suda, 1-licha) dane souradnice vektoru. Parita parity je stejny jako negace negace. Takhle mi to uznal. ==== Obecná varianta ==== ★ //Bylo ve zkoušce: [[škola:předměty:mi-par:par_zkouska_2016-01-28|2016-01-28]]// Formulujte a dokažte existenci Hamiltonovské kružnice na 2D mřížce M(z1,z2) FIXME postup je úplně stejný, jako v příkladě nahoře, akorát musíme rozhodnout, kdy má mřížka sudý a kdy lichý počet vrcholů možnosti jsou S*S, S*L, L*S, L*L - S = sudý (2k), L = lichý (2k+1) 2k * 2l = 4kl - vždy sudé (4* vše přebije) (2k+1) * 2l = 4kl + 2l - vždy sudé (2k+1) * (2l+1) = 4kl + 2k + 2l + 1 - vždy liché (+1 vše obrátí na liché) takže ham.kružnice existuje vždy, kromě případu, kdy obě dimenze mřížky jsou liché, pak má lichý počet vrcholů + parita z příkladu nad tímto. :!: To neni tak jednoduchy. Uz proto, ze treba v M(1,4) asi zadna Ham. kruznice neexistuje i kdyz ma sudej pocet uzlu. Navic to ze nejakej graf ma sudej pocet uzlu znamena jenom to, ze POKUD v nem existuje Ham. kruznice, pak bude mit sudou delku. Bude potreba obecne popsat konstrukci takovy kruznice. ===== Cykly liché délky na 2-D toroidu T(6,10) ===== Dokažte, že na 2-D toroidu T(6,10) neexistují cykly liché délky. ==== Řešení ==== **Důkaz:** 2-D toroid vznikne jako kartézský součin 1-D toroidů **K<sub>1</sub>(6)** a **K<sub>2</sub>(10)**. Na **K<sub>1</sub>** ani **K<sub>2</sub>** neexistuje cyklus liché délky, tato vlastnost se po operaci kartézského součinu zachová. Jinými slovy, pokud se pohybuji jen po hranách, které jsou shodné s mřížkou stejných rozměrů, vykonám vždy sudý počet kroků (jdu tam a zpátky, inkrementuju a potom dekrementuju nějakou souřadnici v libovolném pořadí). Abych udělal lichý počet kroků, musel bych použít hranu kružnice, která má lichou délku. ===== Cyklus liché délky v n rozměrné hyperkrychli ===== Dokažte, že cyklus v hyperkrychli nemůže být liché délky. ==== Řešení ==== Neberte to jako dogma, ale podle toho, jak mi vysvětloval Tvrdík je to:\\ - možnost Důkaz, že v malé (3D krychli, popřípadě 2D čtverci) není cyklus liché délky a analogicky nějak potvrditl, že přidáváním hran se prodlužuje kružnice=cyklus a zůstává tohle zachováno.\\ - asi lepší důkaz, ale složitější - důkaz indukcí: v n-D krychli budu tak dlouho odebírat dimenze, až se mi rozpadne cyklus na dva malé cykly a potom se musí dokázat, že každá z těch dvou částí bude dohromady sudá. - podle slajdu - negací bitů: pokud cyklus, tak končí a začíná v jednom uzlu. Ten má adresu <math>b_{n-1} b_{n-2} ... b_0</math>. Pokud chci dělat cyklus, musím z něj cestovat - každá jedna hrana v cyklu = negace nějakého bitu. Pokud se mám dostat do stejného bodu, musí těchto negací být sudý počet (vždycky tam a zpátky). Tedy sudý počet hran, tedy sudá kružnice. ====== Nejkratší cesty, počet cest ====== ===== Počet všech nejkratších cest mezi dvěma uzly v n-dimenzionální mřížce ===== ==== Řešení ==== Zde je třeba rozlišit, jestli se jedná o disjunktní cesty nebo všechny cesty. * Disjunktní cesty: * Uzlově disjunktní cesty nesmí sdílet žádný uzel, až na ty koncové. * Hranově disjunktní cesty nesmí sdílet žádnou společnou hranu. * Uzlově nebo hranově(?) disjunktních cest existuje tolik, v kolika se uzly liší dimenzích. * Všechny cesty: * Viz video z prosemináře 06/2008 od 2:30. Zde je to uvedeno pro 2 dimenze. * Pro dvě dimenze si představme obdélník o stranách x a y, v jehož rozích jsou vrcholy u a v. * Nejkratší cesty leží v tomto obdélníku. Všechny nejkratší cesty mají délku <math>\normalsize d=x+y</math>. * Cestu si můžeme představit jako d-rozměrný vektor čísel, každé číslo ve vektoru znamená směr, kterým se vydáme (index dimenze číslovaný od 0 - tedy v 2D mřížce např. 0=X, 1=Y). Pokud třeba směr x bude 0 a y bude 1, tak takový vektor může vypadat třeba <math>\normalsize (0,0,1,0,1,1,1)</math>. Odpovídá to cestě doprava, doprava, nahoru, doprava, nahoru, nahoru, nahoru. V tomto případě tedy <math>\normalsize x=3,\: y=4</math>. Cesta má délku <math>\normalsize d=7</math>. * Počet všech nejkratších cest tedy převedeme na úlohu vybrání 4 jedniček ze 7 možností, což je <math>\normalsize {{x+y}\choose{y</math>. Stejně tak můžeme vybrat 3 nuly ze sedmi možností, což je <math>\normalsize x_y_choose_x</math>. Obě čísla jsou stejná.
  • Nyní to zobecníme pro více dimenzí. Pro 3 dimenze to může vypadat třeba tak, že vektor bude obsahovat čísla 0, 1 a 2. Bude-li mít cesta délku např. <math>\normalsize d = x+y+z = 5+3+2 = 10</math> (např. vektor <math>\normalsize (0,2,0,1,1,0,0,1,0,2)</math>), nejprve vybereme 5 nul z deseti možností <math>\normalsize x_y_z_choose_x</math> a 3 jedničky z toho zbytku <math>\normalsize y_z_choose_y</math> (jde to udělat i v jiném pořadí). A tohle vynásobíme mezi sebou. <math>\normalsize x_y_z_choose_xy_z_choose_y</math>. A tak dále pro více dimenzí.
  • Popsaná kombinační čísla lze přepsat na podíl faktoriálů <math>(x + y)!\over(x!y!)</math>, ve kterém pro další dimenze stačí jednoduše přidat z a z! do čitatele i jmenovatele <math>(x + y + z)!\over(x!y!z!)</math> (výraz o dvě odrážky výše je ekvivalentní po vyčíslení kombinačních čísel). Obecne tedy <math>(\sum z_i)!\over \prod z_i!</math>
  • O co tady jde je počet permutací s opakováním, které přesně popisuje vzorec výše. <math>x + y + z</math> je totiž celková délka cesty, kterou permutujeme, a výsledek musíme podělit, protože „doprava“ na prvním místě je ekvivalentní s „doprava“ na třetím místě atd.
Jak přijít na ten vzoreček : Vycházet budeme ze stejné myšlenky. Jestliže se dva uzly liší ve třech dimenzích a liší se pro jednu dimenzi “5krát”, pro druhou “3krát” a pro třetí “2krát”, jde jenom o to, jaké všechny kombinace můžete získat v tom, jak se budete postupně přibližovat z jednoho uzlu do druhého. V našem případě si můžeme dimenze označit jako A,B,C a pak cesta může vypadat třeba nějak takhle : (A,A,A,B,B,B,C,C,A,A). Otázka je, kolik takových permutací mohu udělat. No jde o všechny, kde budu mít 5Aček, 3Bčka a 2 Cčka. A to je permutace s opakováním. <math>P(5, 3, 2)' = \frac{(5+3+2)!}{5!3!2!}</math> Pozn. by plech.d: Ještě bych si dovolil odvodit z uvedené permutace s opakováním úplný obecný vzoreček. Je-li <math>u_i</math> i-tá souřadnice bodu <math>u</math> a <math>v_i</math> i-tá souřadnice bodu <math>v</math> a <math>n</math> je počet dimenzí mřížky, pak tedy pro počet cest mezi <math>u</math> a <math>v</math> platí vztah: <math>\left|\mathcal{P}\left(u,v\right)\right|=\frac{\left({\displaystyle \sum_{i=1}^{n}}\left|u_{i}-v_{i}\right|\right)!}displaystyle_prod_i_1_n\left|u_{i}-v_{i}\right|!},\,u,v\in V\left(G\right) </math> ===== Počet všech nejkratších cest mezi dvěma uzly v Q_n ===== Odvoďte výraz pro počet různých nejkratších cest mezi 2 uzly u, v v Qn ve vzdálenosti d ≤ n. ==== Řešení ==== Vzdálenost d znamená, že se uzly u, v liší v d bitech. Pořadí, v jakém se tyto bity invertují (tedy se v krychli posouvám), je libovolné. Z toho vyplývá, že různých cest mezi těmito uzly je d! (všechny permutace). ===== Počet všech uzlově disjunktních nejkratších cest mezi dvěma uzly v Q_n ===== Odvoďte výraz pro počet uzlově disjunktních nejkratších cest mezi 2 uzly u, v v Qn ve vzdálenosti d ≤ n. ★ Bylo ve zkoušce: 2012-01-17 ==== Řešení ==== Vzdálenost d znamená, že se uzly u, v liší v d bitech. Pořadí, v jakém se tyto bity invertují (tedy se v krychli posouvám), je libovolné. Uzlově disjunktních cest je d, protože na začátku si můžu vybrat jaký ten bit zinvertuju, což je přesně d možností. Přes tyto uzly už nemohou jít jiné další cesty a jiný bit, než v kterém se ty 2 řetězce liší, zinvertovat nemůžu (vzdálil bych se). ====== Teorie ====== ===== Porovnání náhodného CRCW a CRCW shodného ===== Porovnat (a porovnání zdůvodnit) CRCW náhodný a CRCW shodný (common). ★ Bylo ve zkoušce: 2016-01-15 ==== Řešení ==== Silnější je náhodný CRCW. Náhodný (ARBITRARY) CRCW <math>\geq</math> Shodný (COMMON) CRCW Jakýkoliv algoritmus napsaný pro Shodný CRCW může beze změn běžet na náhodném. Shodný předpokládá, že když procesory v jednom kroku chtějí zapisovat do stejné paměťové buňky, musí být hodnota stejná. To jde bez problému udělat na náhodném, zápis reálně provede náhodně vybraný z nich, ale protože je hodnota stejná, ničemu to nevadí. Opačně to udělat nejde. Náhodný předpokládá, že v jednom kroku můžou do stejné paměťové buňky zapsat všechny, zápis se podaří náhodnému z nich (a algoritmus nesmí dělat předpoklady o tom, který z nich to bude). Kdyby se ale na Shodném CRCW pokusilo zapsat více procesorů najednou různou hodnotu do stejné paměťové buňky, nastane pro Shodný CRCW nedefinovaný stav. ===== Porovnání prioritního CRCW a CRCW shodného ===== Porovnat (a porovnání zdůvodnit) CRCW prioritní a CRCW shodný (common). ==== Řešení ==== CRCW: jsou dovoleny současná čtení a současné zápisy téže paměťové buňky. Prioritní (Priority) CRCW: Procesorům jsou přiděleny pevné priority. Zápis je povolen procesoru s nejvyšší prioritou. Shodný (Common) CRCW: Všem žádajícím procesorům je dovoleno dokončit zápis právě tehdy, když všechny zapisované hodnoty jsou stejné. Algoritmus musí zajistit splnění této podmínky. V opačném případě není algoritmus správný a stav počítače není definován. Prioritní CRCW je výpočetně silnější, protože algoritmus napsaný pro shodný CRCW poběží beze změn na prioritním CRCW, ale obráceně to neplatí. Kdyby prioritní běžel na shodném, pak bychom museli být schopní nechat zapisovat proces pouze s nejvyšší prioritou. Pokud by ovšem procesů, které chtějí zapisovat různou hodnotu, bylo více, pak pro shodný CRCW nastává nedefinovaný stav. V opačném případě, pokud má více procesů stejnou hodnotu, pak jeden z nich zapíše jako prioritní a tudíž dochází ke stejnému chování. Dodatek by Mirax: Pokud má běžet program pro prioritní CRCW na shodném CRCW, tak se může obecně stát, že více procesorů bude chtít zapsat najednou různou hodnotu do téže paměťové buňky. Toto je ovšem pro shodný CRCW nepřípustné. PDF přednáška 3/10 Trocha teorie:
  • CRCW - Concurrent Read Concurrent Write
===== Porovnání prioritního CRCW a CRCW náhodného ===== Který model je výpočetně silnější, prioritní nebo náhodný CRCW. Dokažte. ★ Bylo ve zkoušce: 2013-01-02 ==== Řešení ==== :!:Viz EN skripta [2010] str. 24 nebo CZ skripta [2006] str. 40 Výpočetní síla modelů: PRIORITY (prioritní) CRCW ≥ ARBITRARY (náhodný) CRCW ≥ COMMON (shodný) CRCW ≥ CREW ≥ EREW Náhodný (Arbitrary) CRCW: Ukončit zápis je povoleno náhodně vybranému procesoru. Algoritmus nesmí činit žádné předpoklady o tom, který procesor bude vybrán. Na náhodném nejde odsimulovat prioritní, protože k zápisu se vybírá náhodný procesor (to nemusí být vždy ten s největší prioritou). Naopak náhodný na prioritním odsimulovat lze, protože k zápisu se vždy vybere jeden procesor a ten jako prioritní zapíše. Prioritní je tedy výpočetně silnější. :!: Dodatek: U všech těhle porovnávání je dobré se nad tím zamyslet z pohledu, jak se bude chovat algoritmus napsaný pro tento typ CRCW na jiném typu CRCW - jestli máme algoritmus pro CRCW typu A a v pohodě se provede i na CRCW typu B, tak B je výpočetně silnější. :!: Dodatek by voho: Při simulaci na prioritním CRCW se každému procesoru přiřadí náhodné číslo jako priorita a tím se simuluje náhodné chování. - táto veta je kec, za ktorý dostanete -1bod, takže v žiadnom prípade to tam nepíšte. Prioritný simuluje náhodný bezo zmeny a náhodnému algoritmu je fuk ktorý P má akú prioritu. Jednoducho zapíše. Dodatek: Algoritmus pro arbitary počítá s tím, že se ukončení W při kolizi bude provádět náhodně, takže ho nerozhodí, když se ukončení W bude dělat podle nějaké priority. Naopak pokud alg. počítá s prioritou a vybere se random, tak to nemusí spočítat správný výsledek. ===== Superlineární zrychlení ===== Co je superlineární zrychlení a kdy může nastat? ★ Bylo ve zkoušce: 2013-01-16 a 2012-01-24 ==== Řešení ==== :!:Viz CZ skripta [2006] str. 6 nebo EN [2009] str. 4 K superlineárnímu zrychlení dochází pokud úloha spuštěná na p procesorech doběhne v čase menším než T/p, kde T je čas řešení pomocí jednoho procesoru, tedy čas sekvenčního řešení. Tedy pomocí p procesorů jsme úlohu spočetli víc jak p-krát dřív. O všem pojednává přednáška 2 (slajd 16). Nastává ve 2 případech:
  1. Stavový prostor, ve kterém hledáme řešení, byl rozdělen takovým způsobem (Rozděl a Panuj), že se po nějaké kratší době, než by odpovídalo času T/p, dostaneme do míst stavového prostoru, kde je hledané řešení.
  2. Další vliv mají paměti, kdy na více procesorech můžeme mít pro výpočet dostupno více paměti, takže se nedostaneme např. ke swapování na disk, které by mohlo zpomalovat výpočet jen na jednom pocesoru (zmíněno v první přednášce).
====== Automorfismy, symetrie apod. ====== ===== Uzlová a hranová symetrie 3D toroidu ===== Charakterizujte uzlovou a hranovou symetrii 3D toroidu <math>T(z_1,z_2,z_3)</math>, odpověď dokažte. ==== Řešení ==== Graf <math>{G}</math> je uzlově symetrický, když pro <math>\forall u_1 , u_2 \in V(G) \text{ }\exists</math> automorfismus <math>{f}</math> takový, že <math>f(u_1)=u_2</math>.
Graf <math>{G}</math> je hranově symetrický, když pro <math>\forall e_1 , e_2 \in E(G) \text{ }\exists</math> automorfismus <math>{f}</math> takový, že <math>f(e_1)=e_2</math>. Dokaz, ze kartazsky sucin zachovava uzlovu symetrie Toroid je uzlově symetrický, protože existuje např. přeložení (automorfismus) pro <math>\forall u , v \text{ } \tau_{u \mapsto v}(x)=(x_1\oplus_{_{z_{1}}}(v_1\ominus_{_{z_{1}}}u_1),x_2\oplus_{_{z_{2}}}(v_2 \ominus_{_{z_{2}}}u_2),x_3\oplus_{_{z_{3}}}(v_3 \ominus_{_{z_{3}}}u_3
users/martin.kocicka/pdp/2b.1496990578.txt.gz · Last modified: 2017/06/09 06:42 by martin.kocicka