Zaawansowane algorytmy i struktury danych/Ćwiczenia 5: Różnice pomiędzy wersjami
Nie podano opisu zmian |
m Zastępowanie tekstu – „,↵</math>” na „</math>,” |
||
(Nie pokazano 3 wersji utworzonych przez 2 użytkowników) | |||
Linia 2: | Linia 2: | ||
{{kotwica|zadanie 1|}} | {{kotwica|zadanie 1|}} | ||
Zaproponuj efektywny algorytm obliczania najkrótszych ścieżek z jednego wierzchołka w [[dag| | Zaproponuj efektywny algorytm obliczania najkrótszych ścieżek z jednego wierzchołka w [[dag|DAG-u]] o dowolnych wagach krawędzi. | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie''' | <div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie''' | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Po pierwsze w | Po pierwsze w DAG-u nie ma cykli, a więc także nie ma cykli o ujemnej wadze. Zauważmy, że wszystkie ścieżki w DAG-u idą zgodnie z porządkiem topologicznym, a więc także te najkrótsze. Odległości DAG-u można więc policzyć wykonując [[#relaksacja|relaksację]] krawędzi w porządku topologicznym. | ||
</div> | </div> | ||
Linia 15: | Linia 15: | ||
{{kotwica|zadanie 2|}} | {{kotwica|zadanie 2|}} | ||
'''Układ ograniczeń różnicowych''' zadany jest poprzez zbiór zmiennych <math>X=\{x_0, \ldots, x_n\}</math> oraz zbiór nierówności liniowych <math>O=\{x_{i_0} - x_{j_0} \le b_0, \ldots, x_{i_m} - x_{j_m} \le b_m\} </math>, gdzie <math>i_k, j_k \in X</math>, <math>b_k\in \mathcal{R}</math> dla <math>k = 0,\ldots, m</math>. Rozwiązaniem układu ograniczeń różnicowych jest | '''Układ ograniczeń różnicowych''' zadany jest poprzez zbiór zmiennych <math>X=\{x_0, \ldots, x_n\}</math> oraz zbiór nierówności liniowych <math>O=\{x_{i_0} - x_{j_0} \le b_0, \ldots, x_{i_m} - x_{j_m} \le b_m\}</math>, gdzie <math>i_k, j_k \in X</math>, <math>b_k\in \mathcal{R}</math> dla <math>k = 0,\ldots, m</math>. Rozwiązaniem układu ograniczeń różnicowych jest wartościowanie zmiennych <math>X</math>, dla którego spełnione są wszystkie nierówności z <math>O</math>. Zaproponuj efektywny algorytm znajdujący rozwiązanie układu ograniczeń liniowych. | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie''' | <div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie''' | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Problem ten można rozwiązać poprzez sprowadzenie do problemu najkrótszych ścieżek z jednym źródłem i wykorzystanie algorytmu Bellmana-Forda. Mając dane zbiory <math>X</math> i <math>O</math> konstruujemy na ich podstawie graf <math>G=(X,E)</math> oraz funkcję wagową <math>w:E \to \mathcal{R}</math> w następujący | Problem ten można rozwiązać poprzez sprowadzenie do problemu najkrótszych ścieżek z jednym źródłem i wykorzystanie algorytmu Bellmana-Forda. Mając dane zbiory <math>X</math> i <math>O</math>, konstruujemy na ich podstawie graf <math>G=(X,E)</math> oraz funkcję wagową <math>w:E \to \mathcal{R}</math> w następujący | ||
sposób: | sposób: | ||
<center><math> | <center><math> | ||
E = \{(x_i, x_j) : x_{i} - x_{j} \le b \in O\} | E = \{(x_i, x_j) : x_{i} - x_{j} \le b \in O\}</math>,</center> | ||
</math></center> | |||
<center><math> | <center><math> | ||
Linia 33: | Linia 32: | ||
Łatwo teraz pokazać, że | Łatwo teraz pokazać, że w grafie <math>G</math> nie ma cyklu | ||
ujemnej długości jeżeli układ ograniczeń różnicowych ma rozwiązanie, | ujemnej długości, jeżeli układ ograniczeń różnicowych ma rozwiązanie, | ||
oraz odległości w grafie <math>G</math> zadają rozwiązanie tego | oraz odległości w grafie <math>G</math> zadają rozwiązanie tego | ||
układu. | układu. | ||
Linia 44: | Linia 43: | ||
{{kotwica|zadanie 3|}} | {{kotwica|zadanie 3|}} | ||
Skrzynka <math>d</math>-wymiarowe o wymiarach <math>(x_1, x_2, \ldots, x _d)</math> '''mieści się''' w skrzynce o wymiarach <math>(y_1, y_2,\ldots, y_d)</math> jeżeli istnieje permutacja <math>p</math> zbioru <math>\{1, 2,\ldots, d\}</math> tak, że <math>x_{p_1} < y_1, x_{p_2} < y_2, \ldots, x_{p_d} < y_d</math>. | Skrzynka <math>d</math>-wymiarowe o wymiarach <math>(x_1, x_2, \ldots, x _d)</math> '''mieści się''' w skrzynce o wymiarach <math>(y_1, y_2,\ldots, y_d)</math>, jeżeli istnieje permutacja <math>p</math> zbioru <math>\{1, 2,\ldots, d\}</math> tak, że <math>x_{p_1} < y_1, x_{p_2} < y_2, \ldots, x_{p_d} < y_d</math>. | ||
# Uzasadnij, że relacja mieszczenia się jest przechodnia. | # Uzasadnij, że relacja mieszczenia się jest przechodnia. | ||
Linia 54: | Linia 53: | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
# Jeżeli <math>p</math> to permutacja pokazująca, że <math>A</math> mieści się w <math>B</math>, a <math>p'</math> pokazuje, że <math>B</math> mieści się w <math>C</math>, to złożenie permutacji <math>p \cdot p'</math> pokazuje, że <math>A</math> mieści się w <math>C</math>. | # Jeżeli <math>p</math> to permutacja pokazująca, że <math>A</math> mieści się w <math>B</math>, a <math>p'</math> pokazuje, że <math>B</math> mieści się w <math>C</math>, to złożenie permutacji <math>p \cdot p'</math> pokazuje, że <math>A</math> mieści się w <math>C</math>. | ||
# W celu sprawdzenia, czy dwie skrzynki mieszczą się w sobie, można użyć metody zachłannej. Jeżeli chcemy sprawdzić czy skrzynka o wymiarach <math>(x_1, x_2, \ldots, x_d)</math> mieści się | # W celu sprawdzenia, czy dwie skrzynki mieszczą się w sobie, można użyć metody zachłannej. Jeżeli chcemy sprawdzić czy skrzynka o wymiarach <math>(x_1, x_2, \ldots, x_d)</math> mieści się w skrzynce o wymiarach <math>(y_1, y_2, \ldots, y_d)</math> to sprawdzamy, czy po ich posortowaniu zachodzi <math>x_i < y_i</math> dla <math>i = 1,\ldots, d</math>. | ||
Najpierw sortujemy wymiary skrzynek | Najpierw sortujemy wymiary skrzynek | ||
Linia 63: | Linia 62: | ||
{{kotwica|zadanie 4|}} | {{kotwica|zadanie 4|}} | ||
Arbitraż walutowy polega na operacji jednoczesnego kupna i sprzedaży waluty na tym samym rynku w celu osiągnięcia zysku wynikającego z różnic kursowych. Na przykład: załóżmy, że kurs wymiany 1 USD wynosi 46.4 | Arbitraż walutowy polega na operacji jednoczesnego kupna i sprzedaży waluty na tym samym rynku w celu osiągnięcia zysku wynikającego z różnic kursowych. Na przykład: załóżmy, że kurs wymiany 1 USD wynosi 46.4 rupii, kurs rupii w jenach japońskich wynosi 2.5, natomiast 1 jen kosztuje 0.0091 USD. Poprzez wymianę walut, spekulant może rozpocząć transakcję kupna USD: 46.4 × 2.5 × 0.0091 = 1.0556 USD, osiągając korzyść finansową w wysokości 5.56 %. Przypuścimy, że mamy dane <math>n</math> walut <math>c_1, c_2,\ldots, c_n</math> i <math>n \times n</math> tabelę <math>R</math> kursów walutowych, tak że kurs 1 jednostki waluty <math>c_i</math> wynosi <math>R[i,j]</math> jednostek waluty <math>c_j</math>. Podaj skuteczny algorytm stwierdzający istnienie następującego ciągu walut, takich że: | ||
# <math>R[i_1, i_2] \cdots R[i_2, i_3] \cdot R[i_{k-1}, i_k] · R[i_k, i_1] > 1</math>. Zanalizuj czas działania algorytmu. | # <math>R[i_1, i_2] \cdots R[i_2, i_3] \cdot R[i_{k-1}, i_k] · R[i_k, i_1] > 1</math>. Zanalizuj czas działania algorytmu. | ||
Aktualna wersja na dzień 21:44, 11 wrz 2023
Zadanie 1
Zaproponuj efektywny algorytm obliczania najkrótszych ścieżek z jednego wierzchołka w DAG-u o dowolnych wagach krawędzi.
Zadanie 2
Układ ograniczeń różnicowych zadany jest poprzez zbiór zmiennych oraz zbiór nierówności liniowych , gdzie , dla . Rozwiązaniem układu ograniczeń różnicowych jest wartościowanie zmiennych , dla którego spełnione są wszystkie nierówności z . Zaproponuj efektywny algorytm znajdujący rozwiązanie układu ograniczeń liniowych.
Zadanie 3
Skrzynka -wymiarowe o wymiarach mieści się w skrzynce o wymiarach , jeżeli istnieje permutacja zbioru tak, że .
- Uzasadnij, że relacja mieszczenia się jest przechodnia.
- Opisz skuteczną metodę określania, czy jedna -wymiarowa skrzynka zagnieżdża się w drugiej.
- Przypuścimy, że dany jest zbiór -wymiarowych skrzynek . Podaj skuteczny algorytm określający najdłuższy ciąg skrzynek mieszczących się w sobie nawzajem, tzn. takich, że mieści się w dla . Podaj czas działania algorytmu ze względu na i .
Zadanie 4
Arbitraż walutowy polega na operacji jednoczesnego kupna i sprzedaży waluty na tym samym rynku w celu osiągnięcia zysku wynikającego z różnic kursowych. Na przykład: załóżmy, że kurs wymiany 1 USD wynosi 46.4 rupii, kurs rupii w jenach japońskich wynosi 2.5, natomiast 1 jen kosztuje 0.0091 USD. Poprzez wymianę walut, spekulant może rozpocząć transakcję kupna USD: 46.4 × 2.5 × 0.0091 = 1.0556 USD, osiągając korzyść finansową w wysokości 5.56 %. Przypuścimy, że mamy dane walut i tabelę kursów walutowych, tak że kurs 1 jednostki waluty wynosi jednostek waluty . Podaj skuteczny algorytm stwierdzający istnienie następującego ciągu walut, takich że:
- Parser nie mógł rozpoznać (błąd składni): {\displaystyle R[i_1, i_2] \cdots R[i_2, i_3] \cdot R[i_{k-1}, i_k] · R[i_k, i_1] > 1} . Zanalizuj czas działania algorytmu.
- Podaj skuteczny algorytm drukowania takiego ciągu walut, jeżeli on istnieje. Ponadto, zanalizuj czas działania tego algorytmu.