Data Structures 2
TeX

Data Structures 2

Projekt akademicki na przedmiot Struktury Danych II. Benchmarkuje pięć algorytmów sortowania w C dla wielu rozmiarów wejścia, a następnie generuje wykresy wydajności za pomocą Pythona/matplotlib.

Projekt akademicki z przedmiotu Struktury Danych II. Benchmarkuje pięć algorytmów sortowania w C dla wielu rozmiarów danych wejściowych, a następnie generuje wykresy wydajności za pomocą Pythona/matplotlib.

Raport wygenerowany przez kod Pythona opisujący wyniki algorytmów.

Algorytmy

Algorytm Przypadek średni Przypadek najgorszy
Sortowanie bąbelkowe O(n²) O(n²)
Sortowanie przez wybór O(n²) O(n²)
Sortowanie przez wstawianie O(n²) O(n²)
Sortowanie szybkie O(n log n) O(n²)
Sortowanie przez kopcowanie O(n log n) O(n log n)

Jak to działa

  1. Program w C (main.c + sorting.c) generuje losowe tablice liczb całkowitych o rozmiarach [100, 1000, 5000, 10000, 50000, 100000], uruchamia każdy algorytm na kopii danych i zapisuje metryki dla każdego uruchomienia (zamiany, porównania, czas wykonania) do plików binarnych w katalogu ./executions/.
  2. Skrypt w Pythonie (main.py) kompiluje i uruchamia program w C, odczytuje dane binarne i zapisuje wykresy wydajności do katalogu ./graficos/.

Wymagania

  • GCC
  • Python 3
  • matplotlib (pip install matplotlib)

Użycie

# Uruchom benchmark + wygeneruj wykresy
python main.py

Lub uruchom tylko benchmark w C:

make
./Trabalho_Pratico_II

Wyniki

Wykresy zapisywane do katalogu ./graficos/:

  • relatorio_completo.png — zamiany, porównania i czas w jednym wykresie
  • trocas_comparacao.png — zamiany dla każdego algorytmu
  • comparacoes_comparacao.png — porównania dla każdego algorytmu
  • tempo_comparacao.png — czas wykonania dla każdego algorytmu

Struktura projektu

.
├── main.c          # Program główny benchmarku
├── sorting.c       # Implementacje algorytmów
├── sorting.h       # Deklaracje funkcji
├── main.py         # Odczytywanie danych + generowanie wykresów
├── makefile
├── requirements.txt
└── executions/     # Pliki binarne z wynikami (generowane w czasie wykonania)