diff --git a/homework_2/report/homework_2_report.pdf b/homework_2/report/homework_2_report.pdf index 60669e4..f756e04 100644 Binary files a/homework_2/report/homework_2_report.pdf and b/homework_2/report/homework_2_report.pdf differ diff --git a/homework_2/report/homework_2_report.tex b/homework_2/report/homework_2_report.tex index f33a473..9dfd2b9 100644 --- a/homework_2/report/homework_2_report.tex +++ b/homework_2/report/homework_2_report.tex @@ -140,7 +140,7 @@ Η τάξη αυτή προσφέρει δυνατότητες χρονομέτρησης μίας ή και πολλαπλών κλήσεων αθροίζοντας τους χρόνους. \end{itemize} \par -Όλοι οι παραπάνω τύποι είναι templates, και βρίσκονται στα αντίστοιχα headers (.hpp) αντί στα αρχεία .cpp. +Όλοι οι παραπάνω τύποι είναι templates, και βρίσκονται στα αντίστοιχα headers (.hpp) αντί για αρχεία .cpp. Η συνάρτηση \textit{main()} που υλοποιεί τον αλγόριθμο, αλλά και αυτή που καλεί τα unit tests, μαζί με τον validator και το command line interface βρίσκονται στο αρχείο main.cpp. \subsection{Model version} @@ -232,7 +232,7 @@ Θα περίμενε λοιπόν κάποιος να υπάρχει ένας τρόπος να αποφευχθεί η μεταφορά δεδομένων που θα παραμείνουν. Πράγματι, όπως αποδεικνύεται και στο παράρτημα \ref{appendix:ExchangeOpt}, αν έχουμε δύο \textbf{ταξινομημένες} ακολουθίες που η μία θα κρατήσει τα μέγιστα $L_i$ και η άλλη θα κρατήσει τα ελάχιστα $S_i$, τότε τα δεδομένα που θα καταλήξουν να χρειάζονται ανταλλαγή \textbf{για την κάθε ακολουθία} βρίσκονται στο υποσύνολο επικάλυψης: \[ -E = \{l_i, l_{i+1}, ... , l_j\}, i \le j: \quad L_{min} \le l_x \le S_{max},\quad \forall l_x \in E + E = \{l_x\}_{x=i}^j: \quad L_{min} \le l_x \le S_{max} \] Δηλαδή στο κομμάτι της ακολουθίας με τα στοιχεία που είναι \textbf{\textit{μεγαλύτερα από το μικρότερο αυτής που κρατάει τα μεγάλα $L_{min}$ και μικρότερα από το μεγαλύτερο αυτής που κρατάει τα μικρά $S_{max}$}}. Αν το σύνολο επικάλυψης $E_1, E_2$ των ακολουθιών: @@ -367,11 +367,40 @@ Exch. Optimi-zation } & N1P2 - q=20 & \st{191 ms} &\st{72.5 ms}&\st{4.76 ms}& Ο αναγνώστης παρ' όλα αυτά μπορεί να βρει \href{\selfref}{εδώ} μια \textit{μελλοντική έκδοση} της αναφοράς η οποία όταν εκτελεστούν τα scripts θα συμπεριλαμβάνει τις μετρήσεις αυτές. \label{ft:measurements} } + +\newpage \appendix \section{Παράρτημα} \subsection{Υπολογισμός συνόλου ανταλλαγής ταξινομημένων ακολουθιών} \label{appendix:ExchangeOpt} -Έστω ... - +Έστω $L, S$ δύο ταξινομημένες ακολουθίες μεγέθους $N$, μία αύξουσα και μία φθίνουσα. +\[ + L=\{l_i\}_{i=1}^N, S=\{s_i\}_{i=1}^N, \quad l_i, s_i \in \mathbf{R} +\] +Έστω $f$ συνάρτηση η οποία παίρνει δύο ταξινομημένες ακολουθίες \( L = \{l_i\}_{i=1}^N \) και \( S = \{s_i\}_{i=1}^N \), και επιστρέφει δύο ακολουθίες \( L' = \{l'_i\}_{i=1}^N \) και \( S' = \{s'_i\}_{i=1}^N \): +\[ + f \colon (\mathbf{R}^N, \mathbf{R}^N) \to (\mathbf{R}^N, \mathbf{R}^N), \qquad + f(L, S) = (L', S') = \left(\{\max(l_i, s_i)\}_{i=1}^N, \{\min(l_i, s_i)\}_{i=1}^N\right). +\] +Όπου, η \( L' \) περιέχει τα μεγαλύτερα στοιχεία από τη σύγκριση στοιχείο με στοιχείο \( l_i \) και \( s_i \), ενώ η \( S' \) περιέχει τα μικρότερα. +Αν $l_{min}$ το μικρότερο στοιχείο της $L$ και $s_{max}$ το μεγαλύτερο στοιχείο της $S$, τότε: +\[ +\begin{aligned} + \exists E_L=\{e_i\}_{i=1}^m \subseteq L: e_i > s_{max} \ge s_i \forall i \\ + \exists E_S=\{s_i\}_{i=1}^m \subseteq S: s_i < l_{min} \le e_1 \forall i +\end{aligned} +\] +Άρα: +\[ + f(E_L, S_L) = \left(\{\max(e_i, s_i)\}_{i=1}^m, \{\min(e_i, s_i)\}_{i=1}^m\right) = \left(\{e_i\}_{i=1}^m, \{s_i\}_{i=1}^m\right) = (E_L, E_S) +\] +Επομένως υπάρχουν τα υποσύνολα $E_L\subseteq L, E_S\subseteq S$, τα οποία δεν επηρεάζονται από τη συνάρτηση $f$, και άρα δεν ανταλλάσουν τα στοιχεία μεταξύ τους. +Έτσι τα υποσύνολα τα οποία αλλάζουν στοιχεία είναι: +\[ +\begin{aligned} + L_{ex} = L \setminus E_L = \{l_{min}, \dots, s_{max}\}, l_{min} \le s_{max}\\ + S_{ex} = S \setminus E_S = \{l_{min}, \dots, s_{max}\}, l_{min} \le s_{max} +\end{aligned} +\] \end{document}