Algorytmy i struktury danych 2 (ASD2)
Transkrypt
Algorytmy i struktury danych 2 (ASD2)
Algorytmy i Struktury Danych 2 (ASD2) Semestr zimowy 2008/2009 Kraków, 15.11.2008 (popr. 12.12.2008) Algorytmy i struktury danych 2 (ASD2) Kolokwium nr 1 (wersja poprawiona) Napisz algorytmy w pseudokodzie rozwiązujące poniższe problemy (zakładamy, iż dane wejściowe są już wczytane). Określ złożoność czasową i pamięciową podanych rozwiązań. Prosimy również o krótkie objaśnienie swojego rozwiązania (np. definicja podproblemu). Nie jest wymagana implementacja: sortowania, wyszukiwania binarnego, stosu, kolejki, kopca, funkcji min i max. W komentarzu należy opisać wszystkie klucze i kryteria. Zadanie 1. Zbiory niezależne Podana jest kolekcja n przedziałów domkniętych o końcach w liczbach całkowitych. Podzbiór przedziałów formuje zbiór niezależny, jeśli każde dwa różne przedziały ze zbioru mają puste przecięcie. Ile jest zbiorów niezależnych w podanej kolekcji? Uwaga: zbiór pusty jest oczywiście niezależny. Wejście: n — liczba przedziałów lewy[1, . . . , n], prawy[1, . . . , n] — tablice, zawierające odpowiednio lewe i prawe końce przedziałów Wyjście: Liczba zbiorów niezależnych w podanej kolekcji. Przykład: n=4 lewy = {1, 4, 6, 2} prawy = {3, 5, 8, 7} Wynik dla testu przykładowego: 9 Zadanie 2. Zakochany Bob Alicja i Bob dzielą się pizzą. Pizza jest okrągła i podzielona na n kawałków, niekoniecznie tej samej wielkości. Gracze biorą kawałki naprzemiennie. Alicja wybiera pierwszy kawałek dowolnie. Każdy kolejny wzięty kawałek musi sąsiadować z jakimś wcześniej wziętym kawałkiem. Bob jest zakochany w Alicji. Stara się on zatem, aby Alicja mogła wziąć jak najwięcej pizzy przy zachowaniu reguł jedzenia. Ile Alicja może zjeść z podanej pizzy, jeśli Bob jej sprzyja? Jaka jest kolejność jedzenia kawałków realizująca optymalny scenariusz dla Alicji? Wejście: n — liczba kawałków pizzy p[1, . . . , n] — wielkości odpowiednich kawałków (kawałek n-ty sąsiaduje z pierwszym) Wyjście: Optymalny wynik dla Alicji na podanej pizzy oraz dowolna kolejność jedzenia kawałków świadcząca ten wynik. Przykład: n=6 p = {1, 9, 10, 9, 1, 1} Wynik dla testu przykładowego: 28 — optymalny wynik Alicji 2, 1, 3, 6, 4, 5 — kolejność jedzenia świadcząca wynik Kolokwium Strona 1/2 Algorytmy i Struktury Danych 2 (ASD2) Semestr zimowy 2008/2009 Kraków, 15.11.2008 (popr. 12.12.2008) Zadanie 3. Prom Rozważmy prom mogący przewozić samochody przez rzekę w obu kierunkach. Oznaczmy jego pojemność (wyrażoną jako maksymalna liczba samochodów, które może zabrać) jako C, natomiast czas potrzebny na przepłynięcie rzeki w jednym kierunku jako T . Wiemy, że samochody chcące przedostać się z lewego brzegu na prawy zjawiają się na brzegu w chwilach A[1], A[2], . . . , A[m], natomiast samochody chcące pokonać rzekę w przeciwnym kierunku przyjeżdzają w chwilach B[1], B[2], . . . , B[n]. Twoim zadaniem jest obliczenie najwcześniejszej możliwej chwili, w której wszystkie samochody znajdą się w swoim docelowym miejscu. Możesz założyć, że prom może rozpoczynać i kończyć pracę po dowolnej stronie rzeki. Wejście: C — maksymalna liczba samochodów mogąca jednocześnie znajdować się na promie T — czas potrzebny na pokonanie rzeki w jednym kierunku m — liczba samochodów przyjeżdżających z lewej strony rzeki n — liczba samochodów przyjeżdżających z prawej strony rzeki A[1, . . . , m] — chwile, w których samochody przyjeżdżają na lewy brzeg rzeki B[1, . . . , n] — chwile, w których samochody przyjeżdżają na prawy brzeg rzeki Wyjście: Najwcześniejsza chwila, w której wszystkie samochody mogą znaleźć się w miejscu docelowym. Przykład: C = 2, T = 5, m = 2, A = {14, 23} B = {1, 8, 9, 10, 14} n=5 Wynik dla testu przykładowego: 31 Zadanie 4. Gra Mamy pudełka n typów, które charakteryzują się dwoma parametrami: masą m[i] i wytrzymałością w[i]. Wytrzymałość pudełka mówi, jaką maksymalną łączną masę możemy położyć na tym pudełku. Mamy dowolnie dużo pudełek każdego typu (tzn. dla każdego i mamy dowolnie dużo pudełek o masie m[i] i wytrzymałości w[i]). Dwóch graczy układa z pudełek wieżę, wykonując na zmianę ruchy. Pojedynczy ruch polega na położeniu na szczycie wieży dowolnie wybranego pudełka, ale tak, aby nie przekroczyć wytrzymałości żadnego z pudełek tworzących wieżę. Gracz przegrywa wówczas, gdy nie może wykonać kolejnego ruchu (tzn. gdy dołożenie któregokolwiek pudełka na szczyt spowoduje zawalenie się wieży). Czy gracz rozpoczynający ma strategię wygrywającą? Wejście: n — liczba typów pudełek m[1, . . . , n] — masy pudełek (liczby całkowite dodatnie) w[1, . . . , n] — wytrzymałości pudełek (liczby całkowite dodatnie) Wyjście: „Tak”, jeśli rozpoczynający ma strategię wygrywającą, „Nie” w przeciwnym przypadku. Przykład: n=2 m = {1, 2} w = {3, 2} Wynik dla testu przykładowego: „Tak” Komentarz do testu przykładowego: Rozpoczynający, aby wygrać, powinien rozpocząć od pudełka numer 1. Kolokwium Strona 2/2