Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
aa:lab:sol:7 [2023/12/06 22:24]
mihai.udubasa fix small typo
aa:lab:sol:7 [2025/11/16 23:00] (current)
aureliu.antonie edit substitie 2
Line 1: Line 1:
-====== Soluții Reduceri Polinomiale ====== ++=== 1. === 
-1. {\rm Partioning} \le_p {\rm SubsetSum}$. \\ +  ​* ​T_a(n) ​2T_a(n-1) + 1$
-Input pentru $ {\rm Partioning}$:​ o listă de numere $ A [a_1, \dots, a_n]$. \\    +
-Output pentru $ {\rm Partioning}$:​ $ {\rm TRUE/FALSE }$ dacă există o multime $ S \subseteq \{1, 2, \dots, ​n\}$ astfel incat $ \sum_{i\in S} a_i = \sum_{i\notin S} a_i$. \\ +
-Input pentru $ {\rm SubsetSum}$:​ o listă de numere $ B = [b_1, \dots, b_m]$ si un numar $ k \in \mathbb{N}$. \\ +
-Output pentru $ {\rm SubsetSum}$:​ $ {\rm TRUE/FALSE }$ dacă există o multime $ S \subseteq \{1, 2, \dots m\}astfel incat $ \sum_{i\in S} b_i = k$. \\+
  
-Gasim o transformare computabila in timp polinomial $ t : A \mapsto (B, k)$ astfel incat $ {\rm Partitioning}(A) = {\rm TRUE} \iff {\rm SubsetSum}(B, k= {\rm TRUE}$\\ +** nu se poate aplica master ** 
-$$ t(A) = \left(A, k = {\rm sum}(A) / 2\right) \ \ (\text{ eventual o copiere in } O(n), \text{ calculul lui } k \text{ in } O(n))$ +{{ :​aa:​lab:​sol:​10:​3_1.jpg?​600 |}
-(\Longrightarrow)$ $$ {\rm Partitioning}(A= {\rm TRUE} \Rightarrow \exists S: \sum_{i\in S} a_i = \sum_{i\notin S} a_i. \ \ \ \ \ + 
-\sum_{i\in S} a_i + \sum_{i\notin S} a_i = \sum_i a_i = {\rm sum}(A) \Rightarrow ​\sum_{i\in S} a_i = \frac{{\rm sum}(a)}2 \\ + 
-\Rightarrow ​\sum_{i\in S} b_i = \frac{{\rm sum}(B)}2 \Rightarrow {\rm SubsetSum}(B, k= {\rm TRUE}$$ +  * $ T_b(n) = T_b(n-1+ 1$ 
-(\Longleftarrow)$ $$ {\rm SubsetSum}(B, k) = {\rm TRUE} \Rightarrow ​\exists S: \sum_{i\in S} b_i = k \Rightarrow ​\sum_{i\notin S} b_i = \sum_i b_i - \sum_{i\in Sb_i = {\rm sum}(B) - k \\ B = A, k = \frac{{\rm sum}(A)}2 \Rightarrow ​\sum_{i\notin S} a_i = {\rm sum}(A) - \frac{{\rm sum}(A)}2 = {\rm sum}(A) / 2\Rightarrow ​\\ \sum_{i\in S} a_i = \sum_{i\notin Sa_i = {\rm sum}(A) / 2 \Rightarrow {\rm Partitioning}(A= {\rm TRUE}$+ 
-\\ +** nu se poate aplica master **\\ 
-\+Prin metoda arborelui obtinem n niveluri continand cate o constanta si un nod, deci T_b(n) = n * \Theta(1) = \Theta(n$. 
-2{\rm SubsetSum} ​\le_p {\rm Partioning}$ + 
-Gasim o transformare computabila in timp polinomial ​t : (B, k) \mapsto A$ astfel incat $ {\rm SubsetSum}(B,​ k) {\rm TRUE} \iff {\rm Partitioning}(A= {\rm TRUE}$\\ + 
-$$ t(B, k): A \cup \{a_{m+1} = 2k - {\rm sum}(B)\} \ \ \ (\text{un calcul in } O(m) \text{ și o adăugare/​copiere în } O(m)) $$ +  * $ T_c(n) = 2T_c(n/2) + \log(n)
-$ (\Longrightarrow)$ $$ {\rm SubsetSum}(Bk) = {\rm TRUE} \Rightarrow ​\exists S \subseteq \{1, \dots m\}: \sum_{i\in S} b_i = k \Rightarrow \\ \sum_{i\notin S} a_i = \left(\sum_i b_i - \sum_{i\in S} b_i \right) + (2k - {\rm sum}(B)) = \left({\rm sum}(B- k\right) + 2k {\rm sum}(B) = -k + 2k = k \\ +** Metoda substitutiei** ​\\ 
-\sum_{i\in S} a_i = \sum_{i\in S} b_i \Rightarrow ​\sum_{i\in Sa_i = \sum_{i\notin Sa_i = k \Rightarrow {\rm SubsetSum}(A= {\rm TRUE} $+Vrem sa demonstram ca $ T_c(n) = \Theta(n), \ presupunem ​T_c(1= 1\\ 
-(\Longleftarrow)$ $$ {\rm Partitioning}(A{\rm TRUE} \Rightarrow \exists S \subseteq ​\{1, \dots m, m + 1\}: \sum_{i\in Sa_i = \sum_{i\notin S} {\rm sum}(A) / 2 = ({\rm sum}(B+ a_{m+1}) / 2 = 2k/2 = k. \\ \text{Daca m+1 \notin S, \textalegem ​S' = S, \text{ altfel alegem } S' ​= \{1, \dots, m\\setminus S = \{1, \dots, m, m+\\setminus S \\ \text{Atunci,​ } m+1 \notin S', \sum_{i\in S'} b_i = \sum_{i\in S'} a_i = \text{ fie } \sum_{i\in S} a_i, \text{ fie } \sum_{i\notin S} a_i = k \Rightarrow {\rm SubsetSum}(B, k= {\rm TRUE} $+<​=> ​\exists c_1, c_2 > 0 a.i. c_1 n  ​\le T_c(n) \le c_2 n$\\ 
-\\ +$ Ca sa demonstram ​ca T_c(n) ​= \Theta(n)vom demonstra ​ca T_c(n) = O(n) (1) si T_c(n) = \Omega(n) \ (2)$\
-\\ +(2Caz de baza: n 16 \\ 
-3. {\rm HamiltonianCycle} \le_p {\rm HamiltonianPath}$ \\ +$ c_1 * 16  ​\le T_c(16)$\\ 
-Facem o transformare de la un graf nevid G = (V, E)(graful in care se cauta un ciclu hamiltonianla un graf nevid $ G' ​= (V', E')$ (graful in care se cauta un drum hamiltonian). Putem sa impartim un nod u in doua noduri s si t astfel incat toate muchiile care ies din u ies din s si toate care intra in u intra in t: +$ c_1 * 16  ​\le 42 $ \\ 
-$$ t(G) = G',\ V' ​V \setminus ​\{u\\cup \{s, t\}, u \in V, s, t \notin V,\ (x, y) \in E' ​\iff ((x, y) \in \land x \ne u \land y \ne u) \lor (x = s \land (u, y) \in E) \lor (t \land (x, u\in E\\ (\text{muchiile care pleaca din $ u$ in $ G$ pleaca din $ s$ in $ G'$cele care intra in $ u$ in G intra in $ t$ in $ G'$in rest, $ G'are toate muchiile din Gcare nu il au pe u$ la niciun capat})$+=> c_1 \le \frac{21}{8$\\ 
-(\Longrightarrow)$ $$ {\rm HamiltonCycle}(G{\rm TRUE\Rightarrow \exists\ L [y_1, y_2, \dots, y_n]:​\ ​n = |V|,y_i \in V\ \ \ \forall (1\leq i\leq n),(y_i, y_{i+1}) \in E\ \ \forall ​(1\leq i < n),\ (y_n, y_1) \in E,y_i \ne y_j\ \ \forall i \ne j \\ L \textfiind un ciclu, putem sa-l incepem din orice nod, deci vom renumerota nodurile astfel incat } y_1 u \Rightarrow ​\\ [s, y_2, y_3 \dots, y_{n-1}, t] \text{ este un drum hamiltonian in } G' ​\Rightarrow ​{\rm HamiltonianPath}(G') = {\rm TRUE$+(2) \ Pas inductiv $\\ 
-(\Longleftarrow)$ ​$$ {\rm HamiltonianPath}(G') = {\rm TRUE} \Rightarrow \existsL' ​[y_1', y_2', \dots, y_{n+1}']:|V|,\ y_i' \in V'\ \ \ \forall ​(1\leq i\leq + 1),\ (y_i', y_{i+1}') \in E'\ \ \forall ​(1\leq i < 1),\ y_i' \ne y_j'\ \ \forall i \ne j \Rightarrow \\ s, t \in L', \textdar } {\rm indegree}(s) = 0, {\rm outdegree}(t= 0 \Rightarrow L' \text{ incepe cu } s \text{ si se termina cu } t \Rightarrow L' = [s, y_2', ​\dotsy_n', t]\\ \textAtunci ​}, [u, y_2', \dots, y_n'​] ​\texteste un ciclu hamiltonian in G \textdeoarece ​} (s, y_2'\in E' \iff (u, y_2') \in E \textsi } (y_n', t) \in E' ​\iff (y_n', u) \in E \Rightarrow \\ {\rm HamiltonialCycle}(G') = {\rm TRUE} $$  +$ Presupunem ​ca T_c(n/2= \Omega(n/2) $\\ 
-\\ +$ <​=> ​\ \exists c_1 > 0 \ a.ic_1 * \frac{n}{2\le T_c(n/2) $\\ 
-\\ +$ <=> c_1 * n \le * T_c(n/​2) ​$\\ 
-4. {\rm GraphUnreachability} ​\le_p {\rm 2SAT}$ unde $ {\rm GraphUnreachability}$ intreaba daca NU exista nici un drum intre doua noduri $ s$ si $ t$ intr-un graf $ G$ \\ +<=> c_1 * n + \log n\le T_c(n) $\\ 
-Pentru graful ​(V, E)$, construim formula 2SAT care are cate o clauza de forma $ (\overline{x_u\lor x_v)$ pentru fiecare muchie $ (u, v) \in E$, clauzele $ (x_s \lor y) \land (x_s \lor \overline{y})$ (echivalent cu $ x_s$si clauzele $ (\overline{x_t} \lor y) \land (\overline{x_t} \lor \overline{y})$ ​(echivalent cu $ \overline{x_t}$). Valoarea unui literal ​x_u$ reprezinta daca nodul $ u$ este accesibil din $ s$, iar expresiile $ \overline{x_u} \lor x_v$ sunt echivalente cu implicatii logice "daca u este accesibil din s, v este accesibil din s" ​\\ +<=> c_1 * n \le c_1 * n + \log n\le T_c(n$\\ 
-$$ t : ((V, E), s, t) \mapsto ​\phi = (x_s \lor y\land (x_s \lor \overline{y}) \land \left(\bigwedge_{(u,​ v)\in E}(\overline{x_u\lor x_v)\right) ​\land (\overline{x_t} \lor y\land (\overline{x_t\lor \overline{y})$$ +$ => T_c(n\Omega(n) $\\ 
-(\Longrightarrow)$ +$ (1Pentru ​usurinta, \ vom demonstra ​restrictia ​T_c(n) \le c_2 n \log n $\\ 
-$$ {\rm GraphUnreachability}(G, s, t) = {\rm TRUE} \Rightarrow ​\nexists L \text{ drum in } G: L \text{ incepe in } s \text{ si se termina in } t \Rightarrow \\ \forall L_s [s, \dots, u] \text{ drum in } G, (u, t\notin E\  (\text{deoarece altfel } L_s \cup [(u, t)\text{ ar fi un drum care incepe in s$ si se termina in $ t$}) \Rightarrow ​\\ \text{Fie interpretarea } I \{x_u 1|\text{ este accesibil din } s\\cup \{x_u 0\ |u \textnu este accesibil din s\\cup \{y 0\}. \\ \text{Atunci }, (x_s \lor y\land (x_s \lor \overline{y}) = 1, (\overline{x_t} ​\lor y\land (\overline{x_t\lor \overline{y}) = 1, \forall (u \text{ accesibil din }s) (\in V, (u, v\in E), v \text{ este accesibil din } s, v\ne t, (\overline{x_u} \lor x_v) 1, \\ \forall ​(u \text{ inaccesibil din }s)(\in V, (u, v) \in E), (\overline{x_u} ​\lor x_v) = \Rightarrow I \vdash \phi \Rightarrow {\rm 2SAT}(\phi) = {\rm TRUE}$$ +(1Caz de baza: n 16 \\ 
-(\Longrightarrow)$ +$ T_c(16) \le c_2 * 16 2 * \log 16 $\\ 
-$$ {\rm 2SAT}(\phi) = {\rm TRUE} \Rightarrow \exists\text{interpretare ​}I: I\vdash\phi \Rightarrow ​(x_s 1) \in I, (x_t = 0)\in I. \\ \forall ​(u \in V, u \text{ accesibil din }s), \exists L [s, w_1, w_2 \dots, w_k, u] \textdrum in } G \Rightarrow \text{ clauzele ​} (\overline{x_s} \lor x_{w_1}) \land (\overline{x_{w_1}} \lor x_{w_2}) \land \dots \land (\overline{x_{w_k}} ​\lor x_u) \textapar in \phi \Rightarrow ​(x_u = 1) \in I \\ (x_t 0) \in I \Rightarrow t \textnu este accesibil din s, \textdeoarece altfel ​} (x_t = 1) \in I \Rightarrow {\rm GraphUnreachability}(G, s, t) = {\rm TRUE}$+$ 42 \le c_2 * 16 - 8 $ \\ 
-\\ +=> c_2 \ge \frac{25}{8$\\ 
-\\ +(1) \ Pas \ inductiv ​$\\ 
-5. {\rm 3SAT} \le_p {\rm kVertexCover}$ \\ +Presupunem ​ca T_c(n/2\le c_2 * \frac{n}{2} - 2 * \log \frac{n}{2$\\ 
-Stim de la curs ca {\rm 3SAT} \le_p {\rm kClique}$\\ +$ <=> 2 * T_c(n/2) \le c_2 * n - 4 * \log \frac{n}{2$\
-De asemenea, tot de la curs stim ca {\rm kClique} ​\le_p {\rm kVertexCover}$ \\ +$ <=> T_c(n) ​\le c_2 * n - 3 * \log n + 4$\\ 
-Din tranzitivitatea relatiei de reducere obtinem ca {\rm 3SAT} \le_p {\rm kVertexCover}$.+$ <=> T_c(n) ​\le c_2 * n - 3 * \log n \le c_2 * n - 2 * \log n, \forall n \ge 16 $\\ 
 +=T_c(n) ​O(n) $\\ 
 +$ T_c(n) ​\in \Theta(n) $\\ 
 +** Teorema Master ​ ** \\ 
 +a = 2, b = 2 => d = 1 $ \\ 
 +f(n= \log n => \ f(n) = O(\sqrt n) => c = \frac{1}{2} \ (c < d$\\ 
 +$ => T_c(n) \in \Theta(n$\\ 
 +  * $ T_d(n) T_d(n/9+ T_d(8n/9+ n$ 
 + 
 +** nu se poate aplica master ** 
 + 
 +{{ :​aa:​lab:​sol:​10:​3_4.jpg?​600 |}} 
 + 
 +Desenand arboreleobtinem unele ramuri ​care se termina mai repedealtele mai incet, asa ca vom incadra timpul lui T intre 2 limite, $ S_1 si S_2 $ 
 + 
 +h_1 = \log_9n, ​ h_2 = \log_{\frac 9 8}$\\ 
 + 
 +S_1 = \sum_0^{h_1-1n + T(1* 2 ^ {h_1} = n * h_1 +2 ^ {h_1} n*\log_9n + 2^{\log_9n} ​\in \Theta(n\log n) $\\ 
 +$ S_2 = \sum_0^{h_2-1} ​+ T(1* 1 = n * h_2 + 1 = n*\log_{\frac 9 8} n + 1 \in \Theta(n\log n) $\
 + 
 +=> $ T(n) \in \Theta(n ​\log n)$ 
 + 
 + 
 +  * $ T_e(n) = T_e(2n/3) + 1$ 
 +Cazul 2 al Teoremei Master cu $ c = \log_{frac 3 2}1 = 0k = 0 $ deci $ T_e(n) ​= \Theta(n^0 * \log^{0+1}n) \Theta(\log n) $ 
 +  * $ T_{Strassen}(n) = 7T_{Strassen}(n/2) + n^2 $ 
 + 
 +c = \log_27 \approx 2.81 => cazul 1 al teoremei master, deci T_{Strassen}(n) = \Theta(n ^ {\log_27}\approx  ​\Theta(n ^ {2.81}) $ 
 +  * $ T_{Karatsuba}(n) ​3T_{Karatsuba}(n/2) + 1 
 +$ c = \log_23 \approx 1.58 $ => cazul 1 al teoremei masterdeci $ T_{Karatsuba}(n) \Theta(n ^ {\log_23}) \approx  ​\Theta(n ^ {1.58}
 +  * $ T_{Quicksort}(n) = T_{Quicksort}(n-1+ O(n) $  
 + 
 +** nu se poate aplica master **\\ 
 +Folosind metoda arboreluifiecare nivel $ h $ va contine nodul $ T(n-h) $ si costul $ n-h $Obtinem formula $ T_{Quicksort}(n) = \sum_{i=0}^{n-2} (n-i+ 1 * T(1\frac {n(n+1)} 2 \in \Theta(n^2\\ 
 +  * $ T(n) = T(n/4) + T(3n/4) + n 
 +** nu se poate aplica master ** \\ 
 +Desenand arborele, obtinem unele ramuri care se termina mai repede, altele mai incet, asa ca vom incadra timpul lui T intre 2 limite, $ S_1 $ si $ S_2 $ 
 + 
 +h_1 = \log_4n, ​ h_2 = \log_{\frac 4 3}$\\ 
 + 
 +S_1 = \sum_0^{h_1-1n + T(1* 2 ^ {h_1} = n * h_1 +2 ^ {h_1} = n*\log_4n + 2^{\log_4n} ​\in \Theta(n\log n$\\ 
 +$ S_2 = \sum_0^{h_2-1n + T(1* 1 = n * h_2 + 1 = n*\log_{\frac 4 3n + 1 \in \Theta(n\log n) $\\ 
 + 
 +=> T(n) \in \Theta(\log n)
 +=== 2. === 
 +    * $ T_a(n) = T_a(\sqrt{n}) + 1 $ 
 +      Notam \( n = 2^k \) \
 +=> $ T_a(2^k) = T_a(\sqrt{2^k}) + 1$ \\ 
 +=> $ T_a(2^k= T_a(2^ \frac{k}{2}) + 1\\ 
 +fie S(k) = T_a(2^k) $ \\ 
 +=> S(k) = S(k/2) + 1 $ \\ 
 +**Teorema Master** ​\\ 
 +1b = 2 => d = 0 \\ 
 +c = d  = 0 (k = 0=>  $ S(k) = \Theta(\log k\
 +=> T_a(2^k\Theta(\log k) $ \\ 
 +=> $ T_a(n) ​= \Theta(\log \log n) $ \\ 
 + 
 +    * $ T_b(n) ​2 * T_b(\sqrt{n}) + \log n $ 
 +      Notam \( n 2^k \\\ 
 +=> $ T_b(2^k= 2 * T_b(\sqrt{2^k}) + k$ \\ 
 +=> $ T_b(2^k= 2 * T_b(2^ \frac{k}{2}) + k $ \\ 
 +$ fie \ S(k= T_b(2^k) $ \
 +$ => S(k= 2 * S(k/2+ k $ \\ 
 +**Teorema Master** ​\\ 
 +2b = 2 => d = 1 \\ 
 +c = d  = 1 (k = 0=>  $ S(k) = \Theta(\log k\\ 
 +=> $ T_b(2^k) = \Theta(k ​\log k) $ \\ 
 +=> $ T_b(n) = \Theta(\log n * \log \log n) $ \\ 
 + 
 +    * T_c(n) = \sqrt{n* T_c(\sqrt{n}) + n $ 
 +      Notam \( 2^k \) \\ 
 +=> $ T_c(2^k) = \sqrt{2^k* T_c(\sqrt{2^k}) + 2^k$ \
 +=> $ T_c (2^k) = \sqrt{2^k* T_c(2^ ​\frac{k}{2}) + 2^k $ \\ 
 +$ fie S(k) = T_c(2^k) $ \\ 
 +$ => S(k\sqrt{2^k * S(k/2+ 2^k $ \\ 
 +$ fie S(k) 2^k * P(k\\ 
 +$ => \ 2^k * P(k) = \sqrt{2^k\sqrt{2^k* P(k/2+ 2^k $ \\ 
 +$ => P(k) = P(k/2) + 1 \\ 
 +**Teorema Master** ​\\ 
 +a = 1, b = 2 => d = 0 \\ 
 +c = d = 0 (k = 0) =>  ​P(k) = \Theta(\log k) $ \\ 
 +=> S(k) = \Theta(2^k ​\log k) $ \\ 
 +=> T_c(2^k) = \Theta(2^k ​\log k) $ \\ 
 +=> T_c(n) = \Theta(n * \log \log n) \\