1. Etap 1

advertisement
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
Download