portal Michała Hanćkowiaka
Begin main content
Search · Index
No registered users in community Materiały
in last 10 minutes

ASD - Temat A - ćw. ogólno-algorytmiczne, sortowanie, drzewa BST

UWAGA: przy wszystkich zadaniach należy napisać kod tworzący "wydruki diagnostyczne"
demonstrujące, że kod działa prawidłowo...
i należy te wydruki WSTAWIĆ do sprawozdania!!!
sprawozdania należy pisać samodzielnie!!!

mały kompilator języka C dla Windows: tcc-0.9.23.zip (na wszelki wypadek;-);)
UWAGA: w pliku cc.bat należy wymienić ścieżkę "E:\kompC\" na ścieżkę do katalogu, do którego
rozpakowaliśmy zip-a... (także w opcjach -I oraz -L, czyli w 3 miejscach!!)
kompilacja: cc plik.c; powinień powstać "plik.exe"

tutoriale/ książki do języka C: -1-, -2-

edytor pokazujący nr linii tekstu (przydatne przy szukaniu błędów w programie): notepad++ download
wersji "Notepad++ minimalist package" można używać bez instalacji (??) i jest krótka

Zestaw A.1 (sortowanie)
proszę zrobić zadania 1 i 2 z tej strony (sort. przez selekcję i przez wstawianie)
najlepiej w jednym eksperymencie porównać czas działania obu algorytmów;
wprowadź liczniki operacji dominujących (obu, "=" jak i "<=");
dodatkowo proszę zbadać "wrażliwość pesymistyczną" obu tych algorytmów!
(tak dobrać dane, operacje dominujące itp, aby dało się wyciągnąć ciekawy wniosek...)

wykonaj zadanie 3 (wyszukiwanie proste i binarne) oraz zadanie 5 (MergeSort) z tej strony;
a także zadanie 6 (QuickSort) z tej strony;
w QuickSort należy samodzielnie zaimpl. procedurę podziałową Partition
(nie używać "trikowej"; za to można użyć pomocniczej tablicy...)

Zestaw A.2 (drzewa BST)
wykonaj zadanie 111, oraz przyjrzyj się zadaniom 110 i 112 (o listach) z tej strony
wskazówki: uruchom i przeanalizuj przykład listy.cc

wykonaj zadania 20 (impl. BST) z tej strony
do wizualizowania drzewa BST użyj proc PokazPreorder...

Zadanie A.2.1 "oczekiwana wysokość drzewa BST"
Zbadaj oczekiwaną wysokość drzewa BST powstałego przez wstawianie elementów z losowej permutcji liczb {1, ..., n}.
Wskazówki jak to zrobić znajdziesz tutaj, patrz zadanie 21.

Zadanie A.2.2 "wysokość BST bez rekurencji"
Wprowadź do drzewa BST możliwość obliczania wysokości dowolnego wierzchołka drzewa w STAŁYM czasie. Czas działania innych operacji powinien pozostać (asymptotycznie) taki sam!

Zadanie A.2.3 "BST_Delete"
Zaimplementuj operację usuwania wierz z drzewa BST.
Wskazówki: slajdy (str 13), uwagi do zadania 22

Zestaw A.3 (ogólne ćwiczenia algorytmiczne)
wykonaj (także programistycznie) zadania 1 i 2 tej strony

zadania poniżej są łatwiejsze i być może powinny być wykonywane w pierwszej kolejności...
(powinny to być procedury w jednym programie)

Zadanie A.3.1
WE: tablica A[1..n]
WY: max, min - maksymalni i minimalny element tablicy A.
Wymaganie dodatkowe: wszystko oblicz w jednym przebiegu przez A.

Zadanie A.3.2
WE: tablica A[1..n], n; A jest posortowane "<=" (niemalejąco)
WY: x = liczba różnych elementów w tablicy A
Wymaganie dodatkowe: wszystko oblicz w jednym przebiegu przez A.

Zadanie A.3.3
WE: tablica A[1..n]
WY: x = liczba różnych elementów w tablicy A

Zadanie A.3.4
WE: tablica A[1..n], n, m
WY: znaleźć element tablicy A który najczęściej występuje w A
Założenie: elementy tablicy A należą do zbioru {1, ..., m}

Zadanie A.3.5
WE: tablica A[1..n], n
WY: odwróć kolejność elementów tablicy A

Zadanie A.3.5a
Oszacuj pesymistyczną złożoność czasową algorytmów z zadań A.3.1-5.
Podaj jak rozumiesz "rozmiar danych WE" oraz czym jest "operacja dominująca".
Wynik przedstaw w postaci asymptotycznej O(???).

Zadanie A.3.6
Napisz algorytm generujący losową permutację zbioru {1, ..., n} w tablicy A[1..n]. Zakładamy że dysponujemy funkcją random(k) zwracającą liczbę wybraną ze zbioru {1, ..., k} z tym samym prawdopodobieństwem (=1/k). Wszystkie permutacje mają mieć to samo prawdopodobieństwo = 1/(n!), i ma to być oczywiste ...

Zadanie A.3.7
WE: tablice A[1..n], B[1..n] - tablice reprezentujące liczby w zapisie dziesiętnym (każdy element tablicy zawiera jedną cyfrę);
WY: tablica C[1..n+1] = wynik dodawania liczb zapisanych w tablicach A i B.

Zadanie A.3.8
WE: A[1..n], B[1..n], C[1..n] - posortowane "<=" tablice liczb;
WY: W[1..3n] - tablica W zawiera wszystkie elementy tablic A, B i C, oraz jest posortowana.
Wymaganie dodatkowe: algorytm powinien działać w czasie O(n); w szczególności nie wolno po prostu przepisać tablic A, B, C do W i potem posortować W.

Zadanie A.3.9
Zapisz algorytm który oblicza C:=A suma B, czyli sumę teoriomnogościową zbiorów liczb całkowitych A i B, a wynik umieszcza w C. Zbiory liczb są reprezentowane jako tablice w których liczby się nie powtarzają (tablice te NIE są posortowane !!!). Liczba elementów zbioru A jest równa dluA, czyli używane są elementy A[1], ..., A[dluA], podobnie z pozostałymi zbiorami. Zauważ, że wynik działania procedury, czyli C, także musi być prawidłową reprezentacją zbioru! Wymiary tablic A, B i C są następujące: A[1..n], B[1..n], C[1..2n]. Nie wolno używać żadnych pomocniczych tablic. Procedura musi działać w czasie O(n^2).

Zadanie A.3.10
Zapisz algorytm który oblicza C:=A suma B. Tym razem zbiory liczb są reprezentowane jako posortowane rosnąco tablice w których liczby się nie powtarzają. Obowiązują oznaczenia z poprzedniego zadania. Procedura musi działać w czasie O(n).
Wskazówka: przypomnij sobie algorytm scalania dwóch posortowanych ciągów liczb ... .






uwaga: portal używa ciasteczek tylko do obsługi tzw. sesji...