Najbardziej wydajna byłaby prawdopodobnie wersja Patricia trie, która łączy się z max-heap. Za każdym razem, gdy czytasz słowo, find
to na trie, przejdź do sterty i increase-key
. Jeśli nie jest w trie, add
to i ustawić odpowiednio jego klucz w stercie.
Z Fibonacci heap, increase-key
jest O(1)
.
A nie tak nieracjonalne rozwiązaniem jest użycie Map<String, Integer>
, dodając Hrabia każdym razem, gdy słowo jest napotkane, a następnie zwyczaj sortowania ITS entrySet()
na podstawie zliczania, aby uzyskać top 50.
Jeśli sortowanie O(N log N)
jest niedopuszczalne, użyj selection algorithm, aby znaleźć 50 najlepszych w O(N)
.
Która technika jest lepsza naprawdę zależy co prosisz dla (tj komentarzu czy to jest bardziej pytanie niż [algorithm]
[java]
pytanie jest bardzo wymowne).
Najbardziej przydatny jest algorytm wyboru Map<String, Integer>
i algorytm wyboru, ale rozwiązanie Tria Patricia wyraźnie bije na samą wydajność przestrzenną (ponieważ wspólne przedrostki nie są przechowywane w nadmiarze).
Czy to zadanie domowe? – XpiritO
Wątpliwy komentarz do zadania domowego. –
To brzmi bardziej jak pytanie algorytmiczne niż pytanie java. –