Zadanie 4: Analiza Porównawcza Algorytmów Dopasowywania Wzorców (3 pkt)
Zaimplementuj następujące algorytmy dopasowywania wzorców (lub użyj tych, które zostały zaimplementowane w poprzednich laboratoriach):
- Naiwny algorytm dopasowywania wzorców
- Algorytm KMP (Knutha-Morrisa-Pratta)
- Algorytm Boyer-Moore
- Algorytm Rabin-Karp
- Algorytm Aho-Corasick (dla wyszukiwania wielu wzorców jednocześnie)
- Wyszukiwanie oparte na tablicy sufiksów
- Wyszukiwanie oparte na drzewie sufiksów (z wykorzystaniem implementacji algorytmu Ukkonena)
Następnie stwórz funkcję, która porównuje ich wydajność:
def compare_pattern_matching_algorithms(text: str, pattern: str) -> dict:
"""
Compare the performance of different pattern matching algorithms.
Args:
text: The text to search in
pattern: The pattern to search for
Returns:
A dictionary containing the results of each algorithm:
- Execution time in milliseconds
- Memory usage in kilobytes
- Number of character comparisons made
- Positions where the pattern was found
"""
results = {}
# Implement algorithm comparisons
# For each algorithm:
# 1. Measure execution time
# 2. Measure memory usage
# 3. Count character comparisons
# 4. Find pattern positions
return results
Przetestuj algorytmy na tekstach o różnych rozmiarach i wzorcach o różnej długości.
Ważne: Utwórz szczegółowe porównania wizualne przy użyciu odpowiednich wykresów dla:
- Czasu wykonania w zależności od rozmiaru tekstu
- Zużycia pamięci w zależności od rozmiaru tekstu
- Liczby porównań w zależności od rozmiaru tekstu
- Czasu wykonania w zależności od długości wzorca
Użyj skal logarytmicznych tam, gdzie jest to odpowiednie, aby wyraźnie pokazać różnice między algorytmami. Wyjaśnij kompromisy między algorytmami na podstawie swoich wyników.
Last updated on