|
|
@@ -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} |