Mam następujące informacje uczniów z odpowiednimi znakami i plasujenajlepszą strukturę danych do przechowywania znaków i szeregi studentów
Name Marks Rank
A 30 1
B 20 2
C 10 3
Rangę studenta jest odwrotnie proporcjonalna do cech studenta. Muszę znaleźć najlepszą strukturę danych do przechowywania powyższych informacji, aby następujące operacje były wykonywane w sposób najbardziej optymalny (najlepsza złożoność czasu). Można założyć, że nazwisko ucznia jest unikalne.
- Imię student, odnaleźć ślady i pozycjonowanie
- Biorąc pod uwagę rangę, odnaleźć ślady i nazwisko studenta
- znaków Aktualizacja studenta.
Mam na myśli wykorzystanie dwóch mapek na mapowanie uczniów i znaczników, a na mapowanie nazwisk i rang. Czy istnieje lepsza struktura danych dla tego ?. Czy istnieje sposób, w jaki mogę wykorzystać fakt, że pozycja jest odwrotnie proporcjonalna do ocen.
Hashmaps są (średnio) O (1) dla działania szukasz, więc nie można tego przebić. Wymagają jednak przestrzeni. Co możesz zrobić, to: Utwórz klasę z imieniem, znakami (? Jeden lub wiele), stopniem. Następnie dwie hashmapy dla nazwy i rangi, które wskazują na klasę tego użytkownika. Drogie, ale działa. – EsseTi
Inną opcją jest posiadanie porównywalnej klasy Name + Marks, metody porównywania do sortowania automatycznie według rangi oraz prostej listy do przechowywania wszystkich. Plusy: aktualizacja rankingu jest automatyczna, wymaga mniej miejsca, kod prawdopodobnie łatwiejszy do odczytania. Wady: wolniej niż hadhmaps, dostęp nie jest już o (1). – Joel
Dlaczego nie używać "Studenta klasy" z polami 'name' i' marks' i uzyskać ranking przez odwrotne sortowanie listy uczniów według "znaków"? Możesz także dodać atrybut "rank", który jest resetowany za każdym razem, gdy lista jest sortowana. –