You are on page 1of 1

OBLICZANIE KOSZTÓW OPERACJI:

ZADANIE
Koszt ciągu operacji jest sumą kosztów poszczególnych operacji.
Zaimplementować strukturę danych umożliwiającą wykonywanie ciągów operacji Koszt pojedynczej operacji jest sumą kosztów działań podejmowanych by ją wykonać.
następujących typów (𝑆 jest skończonym podzbiorem liczb typu integer, a 𝑙 jest liczbą typu Koszty działań:
integer):
wyszukanie: (przeglądanie listy 𝑆 do chwili napotkania elementu 𝑙) koszt jest równy
(1)acces(l,S) – wyznacz miejsce (wskaźnik) gdzie 𝑙 jest zapisany w strukturze
numerowi miejsca elementu 𝑙 na liście 𝑆 licząc od początku listy, albo liczbą
danych SL reprezentującej 𝑆 (przy założeniu, że 𝑙 ∈ 𝑆)
elementów na liście 𝑆 gdy elementu 𝑙 nie ma na liście
koszt: wyszukanie + transpozycje
(2) insert(l,S) – wstaw element 𝑙 do zbioru 𝑆 przy założeniu, że 𝑙 ∉ 𝑆
wstawianie, usuwanie: (wstawienie, usunięcie elementu z listy 𝑆) koszt jest równy 1
koszt: wyszukanie + wstawianie + transpozycje
(3) delete(l,S) – usuń element 𝑙 ze zbioru 𝑆 przy założeniu, że 𝑙 ∈ 𝑆
transpozycje: (ciąg pojedynczych transpozycji) koszt to liczba wykonanych transpozycji (z
koszt: wyszukanie + usunięcie + transpozycje
wyjątkiem tej, która polega na zmianie miejscami elementu 𝑙, który jest
Zaimplementować rozwiązanie podstawowe B i co najmniej jedno z pozostałych, tak aby argumentem operacji z bezpośrednim poprzednikiem tego elementu na liście 𝑆 w
można było zliczać koszty ciągów operacji. chwili rozpoczęcia operacji)

Praktycznie używane rozwiązania listowe:

B (podstawowe): nie dokonujemy żadnych transpozycji

MF (przesuń na początek): przy wykonywaniu operacji accsess(l,S) i insert(l,S) ustawiamy element 𝑙 na początku listy 𝑆 dokonując
odpowiedniej liczby transpozycji

TR (przesuń o jedno miejsce): po wykonywaniu operacji access(l,S) i insert(l,S) przesuwamy element 𝑙 o jedno miejsce w kierunku początku
listy (wykonując jedną transpozycję)

FC (licznik częstości): dla każdego elementu 𝑙 listy 𝑆 zapisujemy ile razy do tej pory 𝑙 był argumentem operacji access(l,S) i insert(l,S) (czyli dla
każdego elementu 𝑙 listy 𝑆 mamy licznik częstości: przy wstawianiu licznik staje się 1 i jest powiększany o jeden po każdej operacji access(l,S);
po operacji delete(l,S) wartość licznika jest nieokreślona); lista 𝑆 jest utrzymywana w postaci posortowanej względem malejących liczników
częstości.

You might also like