Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
aa:lab:12 [2021/01/11 12:57] pdmatei |
aa:lab:12 [2025/01/23 14:09] (current) dmihai |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Lab 12: NP-hard and NP-complete problems ===== | + | ====== TDA-uri și inducție structurală ====== |
+ | | ||
- | Consider the following problems: | + | 1. Definiți axiome pentru următorii operatori pe tipul ''List'': |
- | **k-Independent Set** | + | * ''reverse'' (inversează elementele dintr-o listă) |
+ | * ''filterEven'' (elimină elementele impare dintr-o listă) | ||
- | Let $math[G=(V,E)] be an undirected graph and $math[k] be a natural number. **k-Independent-Set** asks if there exists a subset $math[C\subseteq V] of size $math[k] of nodes from $math[G] such that all nodes from $math[G] are **independent**: $math[\forall u,v \in V . (u,v)\not\in E]. | + | 2. Definiți axiome pentru următorii operatori pe tipul ''BTree'': |
- | **Subset Sum** | + | * ''mirror : BTree → BTree'' (arborele oglindit pe verticală, i.e. pentru orice nod, copilul stâng devine copilul drept și vice-versa) |
+ | * ''flatten : BTree → List'' (lista cu toate elementele din arbore; observați că există mai multe ordini posibile) | ||
- | **Partition** | + | 3. Definiți axiome pentru următorii operatori pe tipul ''Map'': |
+ | * ''update : Map × K × V → Map'' (un Map cu o nouă asociere cheie:element) | ||
+ | * ''delete : Map × K → Map'' (șterge cheia și valoarea asociată) | ||
+ | |||
+ | 4. Demonstrați următoarele propoziții, folosind inducție structurală: | ||
+ | |||
+ | * $math[\forall t \in \texttt{BTree}. size(t) = size(mirror(t))] | ||
+ | * $math[\forall t \in \texttt{BTree}. size(t) = length(flatten(t))] | ||
+ | * $math[\forall l \in \texttt{List}. append(l, Empty) = l] | ||
+ | * $math[\forall l_1, l_2, l_3 \in \texttt{List}. append(l_1, append(l_2, l_3)) = append(append(l_1, l_2), l_3))] | ||
+ | * $math[\forall l_1, l_2 \in \texttt{List}. length(append(l_1, l_2)) = length(append(l_2, l_1))] | ||
+ | * $math[\forall l_1, l_2 \in \texttt{List}. reverse(append(l_1, l_2)) = append(reverse(l_2), reverse(l_1))]. | ||
+ | |||
+ | |||
+ | |||
+ | <note> | ||
+ | Soluțiile acestui laborator se găsesc [[https://ocw.cs.pub.ro/ppcarte/doku.php?id=aa:lab:sol:12|aici]] | ||
+ | </note> | ||