Zaawansowane algorytmy i struktury danych/Ćwiczenia 5: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Sank (dyskusja | edycje)
Sank (dyskusja | edycje)
Nie podano opisu zmian
Linia 4: Linia 4:
Zaproponuj efektywny algorytm obliczania najkrótszych ścieżek z jednego wierzchołka w [[dag|DAGu]] o dowolnych wagach krawędzi.
Zaproponuj efektywny algorytm obliczania najkrótszych ścieżek z jednego wierzchołka w [[dag|DAGu]] 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">


Linia 17: Linia 17:
'''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.
'''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">


Linia 42: Linia 42:


== Zadanie 3 ==
== Zadanie 3 ==
{{kotwica|zadanie 2|}}
{{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>.


# Uzasadnij, że relacja mieszczenia się jest przechodnia.
# Opisz skuteczną metodę określania, czy jedna <math>d</math>-wymiarowa skrzynka zagnieżdża się w drugiej.
# Przypuścimy, że dany jest zbiór <math>n</math> <math>d</math>-wymiarowych skrzynek <math>{B_1, B_2,\ldots, B_n}</math>. Podaj skuteczny algorytm określający najdłuższy ciąg \{B_1,B_2,\ldots,B_n\} skrzynek mieszczących się w sobie nawzajem, tzn. takich, że <math>B_{j}</math> mieści się w <math>B_{j+1}</math> dla <math>j = 1, 2,\ldots, n - 1</math>. Podaj czas działania algorytmu ze względu na <math>n</math> i <math>d</math>.


Zaproponuj jak wykorzystać algorytm Bellmana-Forda do sprawdzenia, czy w grafie <math>G=(V,E)</math> i wagach krawędzi opisanych funkcją <math>w:E \to \mathcal{R}</math> istnieje cykl o ujemnej wadze.


<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">
Dodaj nowy wierzchołek <math>s</math> i skonstruuj graf <math>G'=(V',E')</math> i
# 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>.
funkcję wagową <math>w'</math> taką, że:
# 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>.
{{wzor2|
<math>V' = V \cup \{s\}</math>,
}}
{{wzor2|
<math>E' = E \cup \{(s,v): v \in V\}</math>,
}}
{{wzor2|
<math>w'(u,v) = \begin{cases}w(u,v), & \mbox{jeżeli} (u,v)\in E\\ 0, & \mbox{jeżeli} u=s\\0, \mbox{w pozostałych przypadkach}\end{cases}</math>.
}}


Zauważmy, że w grafie <math>G'</math> są te same cykle co w grafie <math>G</math>. Jednak teraz wszystkie te cykle są osiągalne z wierzchołka <math>s</math>. Możemy więc do wykrycia cykli o ujemnej wadze użyć algorytmu Bellmana-Forda uruchomionego dla wierzchołka <math>s</math>.
Najpierw sortujemy wymiary skrzynek
</div>
</div>


== 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 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 ze kurs 1 jednostka 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.
# Podaj skuteczny algorytm drukowania takiego ciągu walut, jeżeli on istnieje. Ponadto, zanalizuj czas działania tego algorytmu.
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Rozwiązanie'''
<div class="mw-collapsible-content" style="display:none">
</div>
</div>
</div>
</div>

Wersja z 21:56, 27 lip 2006

Zadanie 1

Zaproponuj efektywny algorytm obliczania najkrótszych ścieżek z jednego wierzchołka w DAGu o dowolnych wagach krawędzi.

Rozwiązanie

Zadanie 2

Układ ograniczeń różnicowych zadany jest poprzez zbiór zmiennych X={x0,,xn} oraz zbiór nierówności liniowych O={xi0xj0b0,,ximxjmbm}, gdzie ik,jkX, bk dla k=0,,m. Rozwiązaniem układu ograniczeń różnicowych jest wartościowanie zmiennych X dla którego spełnione są wszystkie nierówności z O. Zaproponuj efektywny algorytm znajdujący rozwiązanie układu ograniczeń liniowych.

Rozwiązanie

Zadanie 3

{{{2}}}

Skrzynka d-wymiarowe o wymiarach (x1,x2,,xd) mieści się w skrzynce o wymiarach (y1,y2,,yd) jeżeli istnieje permutacja p zbioru {1,2,,d} tak, że xp1<y1,xp2<y2,,xpd<yd.

  1. Uzasadnij, że relacja mieszczenia się jest przechodnia.
  2. Opisz skuteczną metodę określania, czy jedna d-wymiarowa skrzynka zagnieżdża się w drugiej.
  3. Przypuścimy, że dany jest zbiór n d-wymiarowych skrzynek B1,B2,,Bn. Podaj skuteczny algorytm określający najdłuższy ciąg \{B_1,B_2,\ldots,B_n\} skrzynek mieszczących się w sobie nawzajem, tzn. takich, że Bj mieści się w Bj+1 dla j=1,2,,n1. Podaj czas działania algorytmu ze względu na n i d.


Rozwiązanie

Zadanie 4

{{{2}}}

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 n walut c1,c2,,cn i n×n tabelę R kursów walutowych, tak ze kurs 1 jednostka waluty ci wynosi R[i,j] jednostek waluty cj. Podaj skuteczny algorytm stwierdzający istnienie następującego ciągu walut takich że:

  1. 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.
  1. Podaj skuteczny algorytm drukowania takiego ciągu walut, jeżeli on istnieje. Ponadto, zanalizuj czas działania tego algorytmu.
Rozwiązanie