Kolokwium 1 1. Mediana jest środkowym elementem zbioru uporządkowanego (n/2, gdzie n jest liczbą elementów i ). a. zastosuj algorytm zliczania liczby poszczególnych wartości w zbiorze nieposortowanym (podobnie jak w algorytmie sortowania przez zliczanie). b. wyznacz wartość elementu środkowego c. wykonaj tabelkę kosztu algorytmu zapisanego w pseudokodzie lub języku C/C++. 2. Wyszukaj element największy i najmniejszy w zbiorze liczb w następujący sposób: a. podziel zbiór liczb na pary rozłączne (1-y i 2-i element, 3-i i 4-y element itd.) i w każdej parze wybierz liczbę większą lub równą i umieść ją w jednym zbiorze liczb oraz mniejszą lub równą w drugim zbiorze liczb b. poszukaj w zbiorze pierwszym największej liczby i w zbiorze drugim najmniejszej liczby. c. wykonaj tabelkę kosztu algorytmu zapisanego w pseudokodzie lub języku C/C++. Kolokwium 2 1. Posortuj dany ciąg liczb za pomocą sortowania stogowego pokazując ciąg liczbowy w poszczególnych etapach sortowania 2. Posortuj dany ciąg liczb za pomocą sortowania przez łączenie naturalne pokazując ciąg liczbowy w poszczególnych etapach sortowania – sortowanie zewnętrzne 3. Wyszukaj daną liczbę za pomocą wyszukiwania binarnego pokazując drzewo przeszukiwań dla następujących przypadków: wyszukiwanie liczby mniejszej od najmniejszej w danym ciągu liczbowym, wyszukiwanie liczby większej od największej w danym ciągu liczbowym oraz liczby, która znajduje się np. w elemencie tab[4]. 4. Podaj tabelkę kosztu funkcji rozdzielającej serie w sortowaniu przez łączenie naturalne 5. Podaj tabelkę kosztu funkcji łączącej serie w sortowaniu przez łączenie naturalne Kolokwium 3 1. Zbuduj kolejką priorytetową z danego ciągu liczbowego za pomocą algorytmu stogowego wstępującego pokazując ciąg liczbowy w poszczególnych etapach budowy kolejki oraz usun jeden największy element z kolejki oraz odbuduj struktur ę kolejki priorytetowej za pomocą algorytmu zstępującego. Uwaga: zadanie na ocenę 4.0. lub 2. Zaprojektuj funkcje Abstrakcyjne typu danych o nazwie Max, który: Zawsze wstawia liczbę przed równą liczbą, jeśli ta jest już w ciągu. W przeciwnym wypadku wstawia ją na początku ciągu. Usuwa dany element- jeśli jest wiecej tych elementów, usuwa wszystkie równe zadanej wartości Wyszukuje zadany element. Należy zdefiniować nagłówki funkcji oraz wyspecyfikować je wg zadanego wzoru: void Nazwa funkcji(parametry funkcji); {działanie: warunki wstępne: warunki końcowe: } np. void Inicjalizacja(stos & Stos); {działanie: inicjuje stos warunki wstępne: Stos wskazuje na pierwszy element warunki końcowe: stos zostaje zainicjowany jako pusty} Uwaga: Aby otrzymać oceną 5.0, należy wykonać implementację przynajmniej jednej funkcji zaprojektowanego typu danych w postaci funkcji działających na tablicy. Podczas wstawiania należy rozsuwać elementy, natomiast podczas usuwania należy zsuwać elementy tablicy. . Przykład Stos – algorytm Stos jest jednym z najważniejszych typów danych, które wstawiają i usuwają dane ze zbioru danych w tym samym miejscu zwanym szczytem stosu 1. ETAP 1 - OPIS ADT Nazwa typu: Stos elementów Własności typu: Potrafi przechować ciąg elementów o dowolnym rozmiarze Dostępne działania: Inicjalizacja stosu Określenie, czy stos jest pusty Dodanie elementu do stosu, Usuwanie ze stosu, Etap 2 - Budowa interfejsu typedef int dane; {typ informacji umieszczanej na stosie} const long N=11; struct stos { int pierwszy; dane tab[N]; }; void Inicjalizacja(stos & Stos); {działanie: inicjuje stos warunki wstępne: Stos wskazuje na pierwszy element warunki końcowe: stos zostaje zainicjowany jako pusty} inline int Pusty(stos Stos) { return Stos==NULL; } {działanie: określa, czy stos jest pusty; typ inline, bo często wywoływana warunki wstępne: Stos jest zainicjowany, warunki końcowe: funkcja zwraca 1, jeśli stos pusty, w przeciwnym wypadku 0} int Wstaw( stos& Stos, dane Dana); {działanie: dodaje element na początek ciągu, zwany szczytem stosu Stos warunki początkowe: Dana jest daną do wstawienia na szczyt zainicjowanego stosu warunki końcowe: jeśli to możliwe, funkcja dodaje daną Dana na szczyt stosu i zwraca wartość 1, w przeciwnym wypadku 0 } dane Usun(stos& Stos); {działanie: jeśli stos nie jest pusty, usuwa element ze szczytu stosu, czyli element ostatnio wstawiony do stosu warunki początkowe: Stos jest zainicjowanym niepustym stosem warunki końcowe: funkcja usuwa element na szczycie stosu i zwraca umieszczoną tam daną} Etap 3. Implementacja stosu za pomocą tablicy Założenie: najefektywniejsze rozwiązanie stosu za pomocą tablicy – szczyt stosu to ostatni element wstawiony tablicy począwszy od miejsca o indeksie 0 (jeśli liczba elementów w tablicy jest równa pierwszy, to kolejny element jest wstawiany na pozycji pierwszy, o ile jest miejsce w tablicy) void Inicjalizacja(stos& Stos) { Stos.pierwszy = 0; } inline int Pusty(stos Stos) { return Stos.pierwszy==0; } int Wstaw(stos& Stos, dane Dana) { if (Stos.pierwszy==N) return 0; Stos.tab[Stos.pierwszy++]= Dana; return 1; } dane Usun(stos& Stos) { int pierwszy= --Stos.pierwszy; dane d= Stos.tab[pierwszy]; return d;} //stos jest pusty, gdy liczba elementów jest równa zero //nie można wstawić do stosu, gdy jest pełen //wyznaczenie indeksu elementu usuwanego ze stosu