• Nie Znaleziono Wyników

Laboratorium 1 – sortowania tablic-część 1 Cele:

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium 1 – sortowania tablic-część 1 Cele:"

Copied!
5
0
0

Pełen tekst

(1)

Laboratorium 1 – sortowania tablic-część 1 Cele:

1. Zastosowanie wybranych algorytmów sortowania, poznanych w poprzednim semestrze (bąbelkowe, przez wstawianie, przez selekcję, pozycyjne, stogowe) do sortowania danych typu strukturalnego Osoba wg wybranej składowej lub wybranych składowych (najpierw wg składowej nazwisko, a w przypadku identycznych nazwisk wg składowej imie)

2. Wyznaczenie liczby operacji typu porównania, przypisania, wywołania funkcji, operacji arytmetycznych, indeksowań występujących w algorytmach sortowania o złożoności n2, nlgn oraz n w zależności od rozkładu danych:

2.1. dane losowe (kody ASCII, liczby całkowite i rzeczywiste) generowane po ustawieniu generatora liczb losowych za pomocą funkcji srand(stala), gdzie stala może posiadać dowolną wartość całkowitą,

2.2. dane posortowane itp.

W celu porównania liczby operacji zastosowanych w kodach źródłowych algorytmów rozkład i liczba danych (np. 5000) muszą być identyczne.

3. Zastosowanie tablic typu: dynamiczne tablice wskaźników na dynamiczne struktury i przy sortowaniu przestawiane wskaźników na dane, jednak istnieje możliwość zastosowania przejściowo statycznych tablic struktur, dynamicznych tablic struktur oraz statycznych tablic wskaźników na dynamiczne struktury.

4. Proponowane zadanie może mieć charakter „bazodanowy”. Wybór opcji powinien umożliwiać wybór operacji:

4.1. wstawianie do tablicy danych o zadanym rozkładzie danych 4.2. wyświetlania tablicy,

4.3. wyboru sortowań 4.4. wybór rozkładu danych

4.5. prezentację uzyskanych wyników (zapisanych na ekranie oraz w pliku tekstowym). Zapamiętanie wyników liczenia operacji w pliku pozwoli porównać wyniki dla sortowań badanych w laboratorium 2.

Laboratorium 2 – algorytmy typu „dziel i zwyciężaj”: sortowanie tablic– część 2 i wyszukiwania w tablicach posortowanych

Cele:

1. Kontynuacja laboratorium 2 w odniesieniu do algorytmów sortowania szybkiego i przez łączenie (algorytmy typu „dziel i zwyciężaj”). Zastosowanie kopii programu z laboratorium 1 i zastąpienie lub uzupełnienie dotychczasowych sortowań nowymi sortowaniami (korekta opcji do wyboru sortowań).

2. Dodanie nowych opcji do wyboru operacji wyszukiwań w tablicach posortowanych:

2.1. binarnego „z powtórzeniami” (algorytm typu „dziel i zwyciężaj”) 2.2. binarnego „bez powtórzeń” (algorytm typu „dziel i zwyciężaj”) 2.3. sekwencyjnego

oraz i wyznaczenie liczby operacji typu porównania, przypisania, wywołania funkcji, operacji arytmetycznych, indeksowań. Badania te należy wykonywać dla kluczy, które:

występują w tablicy, są mniejsze od najmniejszej danej i są większe od największej danej powtarzając w pętli np. 1000 razy każde z poszukiwań.

3. Jedna z opcji programu powinna podać średnią liczbę operacji występujących podczas wyszukiwań oraz prezentację uzyskanych wyników na ekranie.

4. Badania powtórzyć dla wyszukiwania binarnego, którego kod został przekształcony do postaci rekurencyjnej – porównać, czy sposób zakodowania algorytmu tego wyszukiwania w sposób zasadniczy zmienił liczbę operacji .

5. W celu porównania liczby operacji dla algorytmów wyszukiwania liczba danych (np.

5000) musi być identyczna.

(2)

Laboratorium 3 – sortowanie plików Cele:

1. Badania algorytmów sortowania danych w pamięci zewnętrznej - sortowania plików:

naturalnego, wielokierunkowego, polifazowego do sortowania danych typu strukturalnego Osoba wg wybranej składowej (np. wg składowej nazwisko)

2. Wyznaczenie liczby operacji typu porównania, przypisania, wywołania funkcji, operacji arytmetycznych, ewentualnych indeksowań tablic pomocniczych występujących w algorytmach sortowania w zależności od rozkładu danych:

2.1. dane losowe (kody ASCII, liczby całkowite i rzeczywiste) generowane po ustawieniu generatora liczb losowych za pomocą funkcji srand(stala), gdzie stala może posiadać dowolną wartość całkowitą,

2.2.dane posortowane itp.

W celu porównania liczby operacji dla algorytmów rozkład i liczba danych (np. 5000) muszą być identyczne. Należy liczyć operacje we/wy: fwrite, fread, fclose, fopen itd., które są wolniejsze od innych operacji występujących w kodzie algorytmu.

3. Proponowane zadanie może mieć charakter „bazodanowy”. Wybór opcji powinien umożliwiać wybór operacji:

3.1 wstawianie do pliku danych o zadanym rozkładzie danych 3.2 wyświetlania zawartości pliku,

3.3 wyboru sortowań, 3.4 wyboru rozkładu danych

3.5 prezentację uzyskanych wyników zapisanych na ekranie.

(3)

Laboratorium 4 –ADT kolejki priorytetowej i realizacja za pomocą list wiązanych Cele:

1. Zastosowanie struktur wiązanych, zwanych również dynamicznymi lub rekurencyjnymi strukturami danych. Realizacja kolejki priorytetowej w postaci ADT za pomocą jednej z wybranych list: jednokierunkowej lub dwukierunkowej, uporządkowanych lub nieuporządkowanych. Należy wyspecyfikować i zdefiniować wszystkie funkcje kolejki priorytetowej:

1.1 Wstaw,

1.2 Usun_najwiekszy, 1.3 Pusty,

1.4 Dla_kazdego – rekurencyjna (przejście przez wszystkie elementy listy) 1.5 Dla_kazdego – nie rekurencyjna (przejście przez wszystkie elementy listy)

za pomocą jednej z list dla danych typu strukturalnego Osoba przetwarzanych wg wybranej składowej (np. wg składowej nazwisko).

2. Funkcja Dla_kazdego (funkcja przechodząca przez wszystkie elementy listy o przekładowym nagłówku void Dla_kazdego(Kolejka_P kolejka_p, funkcja wykonaj), gdzie typ funkcja jest zdefiniowana jako typedef (void (*funkcja)(dane) oraz typedef struct Osoba dane) dla kolejki i może np. wyświetlać dane umieszczone w elementach kolejki na ekranie (jeśli podstawiona funkcja pod parametr funkcyjny wykonaj typu funkcja potrafi wyświetlić na ekranie dane umieszczone w elementach kolejki) lub zapisywać je w pliku (jeśli podstawiona funkcja pod parametr funkcyjny wykonaj typu funkcja potrafi zapisywać w pliku dane umieszczone w elementach kolejki). Funkcja ta powinna być zrealizowana w dwóch postaciach: nie rekurencyjnej i rekurencyjnej; W przypadku wywołania funkcji rekurencyjnej należy wyznaczyć eksperymentalnie, dla jakiej liczby danych następuje przepełnienie stosu programu. Porównać obliczenia z oszacowaniem teoretycznym (szacując zajętość stosu programu przy każdym wywołaniu funkcji rekurencyjnej). Ten eksperyment ma pokazać, że dla funkcji o czasie trwania liniowo zależnym o liczby danych lepsze jest rozwiązanie nie rekurencyjne, gdyż pozwala racjonalniej wykorzystać pamięć przeznaczoną na dane bez ograniczania tej możliwości przepełnieniem stosu programu.

3. Wyznaczenie liczby operacji typu porównania, przypisania, wywołania funkcji, operacji arytmetycznych, wyłuskań występujących przy wstawianiu 1000 danych, zależnych od rozkładu wstawianych danych. Przy wstawianiu generowane są: dane losowe (kody ASCII, liczby całkowite i rzeczywiste) po ustawieniu generatora liczb losowych za pomocą funkcji srand(stala), gdzie stala może posiadać dowolną wartość całkowitą; dane posortowane itp. Następnie należy policzyć liczbę wymienionych operacji przy usuwaniu wszystkich elementów z kolejki. Ważne są sumaryczne liczby operacji występujących w kodzie funkcji do wstawiania i usuwania.

4. Proponowane zadanie może mieć charakter „bazodanowy”. Wybór opcji powinien umożliwiać wybór operacji:

4.1 wstawianie do kolejki danych o zadanym rozkładzie danych

4.2 wyświetlania kolejki za pomocą funkcji przejścia przez kolejkę Dla_kazdego, 4.3 usuwania największego elementu

4.4 wybór rozkładu danych

4.5 prezentację uzyskanych wyników (zapisanych na ekranie oraz w pliku tekstowym.

Zapamiętanie wyników liczenia operacji w pliku pozwoli porównać wyniki dla kolejki, budowanej na bazie jednego z drzew poszukiwań binarnych, badanej w laboratorium 5.).

(4)

Laboratorium 5 - ADT kolejki priorytetowej i realizacja za pomocą drzew binarnych Cele:

1. Zastosowanie struktur wiązanych, zwanych również dynamicznymi lub rekurencyjnymi strukturami danych. Realizacja kolejki priorytetowej w postaci ADT za pomocą jednego z drzew poszukiwań binarnych: drzewa ze wstawianiem jako liść, drzewa ze wstawianiem do korzenia, drzew wyważanych lub drzew czerwono-czarnych. Należy wyspecyfikować i zdefiniować wszystkie funkcje kolejki priorytetowej:

1.1 Wstaw,

1.2 Usun_najwiekszy, 1.3 Pusty,

1.4 Dla_kazdego – rekurencyjna (przejście uporządkowane przez drzewo)

za pomocą jednego z wymienionych drzew dla danych typu strukturalnego Osoba wg wybranej składowej (np wg składowej nazwisko).

2. Funkcja Dla_kazdego (funkcja przechodząca prze wszystkie elementy listy o przekładowym nagłówku void Dla_kazdego(Kolejka_P kolejka_p, funkcja wykonaj), gdzie typ funkcja jest zdefiniowana jako typedef (void (*funkcja)(dane) oraz typedef struct Osoba dane) dla kolejki i może np. wyświetlać dane umieszczone w elementach kolejki na ekranie (jeśli podstawiona funkcja pod parametr funkcyjny wykonaj typu funkcja potrafi wyświetlić na ekranie dane umieszczone w elementach kolejki) lub zapisywać je w pliku (jeśli podstawiona funkcja pod parametr funkcyjny wykonaj typu funkcja potrafi zapisywać w pliku dane umieszczone w elementach kolejki). Funkcja ta powinna być zrealizowana w postaci rekurencyjnej. W przypadku funkcji rekurencyjnej należy wyznaczyć teoretycznie (szacując zajętość stosu programu przy każdym wywołaniu funkcji rekurencyjnej), dla jakiej liczby danych zostanie przepełniony stos programu.. Ten eksperyment ma pokazać, że dla funkcji o czasie trwania logarytmicznie zależnym od liczby danych dobre jest rozwiązanie rekurencyjne, gdyż pozwala racjonalnie wykorzystać pamięć przeznaczoną na dane bez ograniczania tej możliwości przepełnieniem stosu programu.

3. Wyznaczenie liczby operacji typu porównania, przypisania, wywołania funkcji, operacji arytmetycznych, wyłuskań występujących przy wstawianiu 1000 danych, zależnych od rozkładu wstawianych danych. Przy wstawianiu generowane są: dane losowe (kody ASCII, liczby całkowite i rzeczywiste) po ustawieniu generatora liczb losowych za pomocą funkcji srand(stala), gdzie stala może posiadać dowolną wartość całkowitą, dane posortowane itp. Następnie należy policzyć liczbę wymienionych operacji przy usuwaniu wszystkich elementów z kolejki. Ważne są sumaryczne liczy operacji występujących w kodzie funkcji do wstawiania i usuwania.

4. Proponowane zadanie może mieć charakter „bazodanowy”. Wybór opcji powinien umożliwiać wybór operacji:

4.1. wstawianie do kolejki danych o zadanym rozkładzie danych

4.2. wyświetlania kolejki za pomocą funkcji przejścia przez kolejkę Dla_kazdego, 4.3. usuwania największego elementu

4.4. wybór rozkładu danych

4.5. prezentację uzyskanych wyników (zapisanych na ekranie oraz w pliku tekstowym. Zapamiętanie wyników liczenia operacji w pliku pozwoli porównać wyniki dla kolejki, budowanej na bazie wybranej listy wiązanej, badanej w laboratorium 4.).

(5)

Laboratorium 6 – algorytmy grafowe – techniki budowy algorytmów: „z powrotami”,

„podziału i ograniczeń”, programowania dynamicznego, algorytmy „zachłanne”

Cele:

1. Zadanie dotyczy budowy macierzy incydencji grafu oraz macierzy sąsiedztwa grafu za pomocą listy podlist lub tablicy wskaźników na podlisty. Listy mogą być jednokierunkowe, dwukierunkowe lub cykliczne jedno- lub dwukierunkowe.

2. Zadania mogą dotyczyć budowania map terenu z wyróżnionymi obiektami (miasta lub stacje benzynowe lub skrzyżowania ulic itp)

3. Podstawowymi operacjami są:

3.1. budowa reprezentacji grafu 3.2. wyświetlenia grafu na ekranie,

3.3. wykonanie funkcji przejścia przez graf, realizującej rozwiązanie wybranego problemu zgodnie ze specyfikacją podaną w punkcie 4.

Operacje powinny być zdefiniowane z zachowaniem zasad ADT tzn. operacje na listach, kolejkach itp. powinny być operacjami ADT, natomiast operacje tworzące graf są już funkcjami klienta wykorzystującymi funkcje ADT, jednak bez operacji we/wy, które pogarszają złożoność obliczeniową. Operacje wew/wy natomiast powinny pojawić się w funkcjach interfejsu użytkownika wywołujące również funkcje klienta.

4. Każdy z programów powinien reprezentować jeden z wybranych problemów:

4.1. przeszukiwania „w głąb”: algorytm DFS (algorytmy „z powrotami”) – np. różne drogi wyszukane na mapie prowadzące z miejscowości A do miejscowości B i przechodzące przez wszystkie osiągalne miejscowości

4.2. przeszukiwania „wszerz”: algorytm BFS (algorytmy z „podziałem i ograniczeń”) – np. znajdowanie najkrótszej drogi na mapie, prowadzącej z miejscowości A do miejscowości B i przechodzącej przez wszystkie osiągalne miejscowości.

4.3. najkrótsze ścieżki między wszystkimi parami wierzchołków: algorytm Floyda (algorytm programowania dynamicznego) – np. znajdowanie najkrótszych dróg na mapie między wszystkimi parami miejscowości

4.4. drzewa najkrótszych ścieżek: algorytm Dijkstry (algorytmy zachłanne) – np.

wyszukiwanie najkrótszych dróg z wyznaczonej miejscowości do innych wskazanych miejscowości

4.5. minimalne drzewa rozpinające: algorytm Prima (algorytmy zachłanne) – np.

tworzenie minimalnej sieci dróg

Cytaty

Powiązane dokumenty

tycznych: MM 57109 firmy National Semiconductor (USA) , S3C-310 Intel (USA) oraz AM 9511 firmy Ad va nc ed Micro Devices (USA) dołączenie do systemu FMS-5 Jednostki

Formularz zgłoszenia zamiaru realizacji operacji odpowiadającej zakresowi operacji własnej LGD, Procedura oceny i wyboru operacji własnych LGD w ramach poddziałania „Wsparcie

Zaproponow ano algorytm rozw iązania sform ułow anego w pracy problem u decyzyjnego z zadanym poziom em pewności, w którym w ykorzystano dekom pozycję opracow aną

Tytuł: REHABILITACJA

 umie rozwiązać zadania tekstowe związane z polem powierzchni ostrosłupa.  umie obliczyć

Kryterium preferuje wnioskodawców korzystających z doradztwa Biura LGD w zakresie przygotowania wniosku o przyznanie pomocy.  3 pkt – wnioskodawca korzystał z doradztwa LGD

Uczeń na podstawie wykresu funkcji potrafi podać przedziały otwarte, w których pochodna funkcji przyjmuje wartości dodatnie, ujemne2. Uczeń potrafi na

Uczniowie piszą 10-minutową kartkówkę sprawdzającą umiejętność stosowania kolejności wykonywania działań w obliczaniu wyrażeń arytmetycznych.. Zadaje pracę domową. Prosi,