Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
aa:lab:sol:7 [2023/12/06 22:27] stefan.sterea |
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(B = A, k = {\rm sum}(A) / 2\right) \ \ \ (B = A \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 \\ | + | |
| - | B = A \Rightarrow \sum_{i\in S} b_i = \frac{{\rm sum}(B)}2 = k \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 S} b_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 S} a_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 = B \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}(B, k) = {\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 = k \Rightarrow \sum_{i\in S} a_i = \sum_{i\notin S} a_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 S} a_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, \text{ alegem } S' = S, \text{ altfel alegem } S' = \{1, \dots, m\} \setminus S = \{1, \dots, m, m+1 \} \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)$\\ |
| - | \\ | + | (2) Caz 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 hamiltonian) la 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 E \land x \ne u \land y \ne u) \lor (x = s \land (u, y) \in E) \lor (y = 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 $ G$ care 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 \text{ fiind 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 \exists\ L' = [y_1', y_2', \dots, y_{n+1}']:\ n = |V|,\ y_i' \in V'\ \ \ \forall (1\leq i\leq n + 1),\ (y_i', y_{i+1}') \in E'\ \ \ \forall (1\leq i < n + 1),\ y_i' \ne y_j'\ \ \forall i \ne j \Rightarrow \\ s, t \in L', \text{ dar } {\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', \dots, y_n', t]. \\ \text{ Atunci }, [u, y_2', \dots, y_n'] \text{ este un ciclu hamiltonian in } G \text{ deoarece } (s, y_2') \in E' \iff (u, y_2') \in E \text{ si } (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.i. \ c_1 * \frac{n}{2} \le T_c(n/2) $\\ |
| - | \\ | + | $ <=> c_1 * n \le 2 * 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 $ G = (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)$ | + | $ (1) Pentru \ usurinta, \ vom \ demonstra \ restrictia \ T_c(n) \le c_2 n - 2 \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\ |\ u \text{ este accesibil din } s\} \cup \{x_u = 0\ |\ u \text{ nu 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) (v \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)(v \in V, (u, v) \in E), (\overline{x_u} \lor x_v) = 1 \Rightarrow I \vdash \phi \Rightarrow {\rm 2SAT}(\phi) = {\rm TRUE}$$ | + | (1) Caz de baza: n = 16 \\ |
| - | $ (\Longleftarrow)$ | + | $ 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] \text{ drum 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) \text{ apar in } \phi \Rightarrow (x_u = 1) \in I \\ (x_t = 0) \in I \Rightarrow t \text{ nu este accesibil din } s, \text{ deoarece 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 + 4 \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 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_9n, h_2 = \log_{\frac 9 8}n $\\ | ||
| + | |||
| + | $ S_1 = \sum_0^{h_1-1} n + 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} n + 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 = 0, k = 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 master, deci $ 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 arborelui, fiecare 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}n $\\ | ||
| + | |||
| + | $ S_1 = \sum_0^{h_1-1} n + 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-1} n + T(1) * 1 = n * h_2 + 1 = n*\log_{\frac 4 3} n + 1 \in \Theta(n\log n) $\\ | ||
| + | |||
| + | => $ T(n) \in \Theta(n \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** \\ | ||
| + | a = 1, b = 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** \\ | ||
| + | a = 2, b = 2 => d = 1 \\ | ||
| + | c = d = 1 (k = 0) => $ S(k) = \Theta(k \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 \( n = 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) $ \\ | ||