The Postal Owl

Logged in: Santa Claus (home)   

Algoritmy a datové struktury 2

Back to the course

3. Série - 2. úkol (Arita 2 je dostačující)

Deadline: 2022-12-01 14:00 (35 days ago)

Tomáš Domes — 2022-11-16 22:12 (49 days ago) — reply

2. _Arita 2 je dostačující_:
Dokažte, že libovolnou booleovskou funkci s $k$ vstupy (tedy funkci, která pro každou kombinaci $k$ nul a jedniček vrátí jedničku nebo nulu) lze spočítat booleovským 
obvodem hloubky $\mathcal{O}(k)$ s $\mathcal{O}(2^k)$ hradly. (To speciálně znamená, že pro 
pevné $k$ lze booleovské obvody s nejvýše $k$-vstupovými hradly překládat na obvody 
s 2-vstupovými hradly. Hloubka přitom vzroste pouze konstanta-krát.)

Santa Claus — 2022-11-28 23:59 (37 days ago) — editreply

1. Pro každou možnou poslopnost na vstupu, kterých je $2^k$ si připravíme mezivýstup z hradla takto:

Všechny vstupy proženeme AND hradlem, vstupy, které mají být pro daný vstup nulové, nejdříve znegujeme. Toto nám zabere pro každou možnou posloupnost maximálně hloubku $k$ - a to pokud použijeme najivní AND hradlo postavené z $k-1$ binárních AND hradel.

2. Pro každý z těchto vstupů vytvoříme nulární hradlo, výstupem bude požadovaná hodnota pro danou posloupnost. Pak přivedeme na binární AND tuto konstantu a předpřipravený mezivýstup indikující danou posloupnost na vstupu.

3. Nyní máme $2^k$ výstupů, ty nyní proženeme OR hradlem. Protože už máme daleko větší počet mezivstupů, využijeme tentokráte nenaivní přístup, a sice na binární OR hradlo vždycky přivedeme mezivýstupy z předchozí vrstvy našeho velkého OR hradla.
Takto na každé vrstvě zmenšíme počet mezivýstupů na polovinu, celková hloubka velkého OR hradla bude $\log_2 2^k = k$.

Jediný výstup nám určuje požadovaný výstup.

## Správnost

Aby na výstupu byla jednička pro požadovanou posloupnost, musí být aktivní indikátor dané posloupnosti, což je právě jeden. Ten spojíme AND hradlem s požadovanou hodnotou: pokud je to nula, bude to vždy nula, jinak jednička pouze při aktivním indikátorovém mezivýstupu. No a jakmile máme tento jeden mezivýstup nastaven na jedničku, projde velkým OR hradlem až na výstup.

## Hloubka
1. Naivní AND s $k$ vstupy - hloubka $k$. Pro každý z $2^k$ vstupů, ale paralelně.
2. Nulární hradlo a jeden AND - hloubka $2$
3. Velké OR hradlo - jak jsem náhledl, hloubka $k$.


## Velikost
1. Naivní AND s $k$ vstupy - $k - 1$ hradel pro vstup, $k \cdot 2^k \in O(2^k)$
2. Nulární hradlo a jeden AND - hloubka $2 \cdot 2^k \in O(2^k)$
3. Velké OR hradlo - $2^k + 2^{k-1} + ... + 1 \in O(2^k)$ geometrická řada

## Optimalizace

Ve skutečnosti se můžeme vykašlat na vstupy, pro které máme dát nulu. Případně můžeme prohodit nulu a jedničku. Pokud chceme pro většinu vstupů vypsat stejný výstup, může nám toto velmi ušetřit prostor.

Tomáš Domes — modified 2022-12-10 17:29 (25 days ago) — reply

To je správně!

Points: 7.00

New post (You can use Markdown with KaTeX math here)

Preview: