Przeczytałem previous question o złożoności czasowej dla TreeSet i odpowiedziano, że zajmuje to O (n) czas. Jednak nie rozumiem, dlaczego jest O (n) do iteracji zamiast O (n * nlogn).Dlaczego TreeSet Iteracja O (n) zamiast O (n * logn)?
Każde następne wywołanie odbywa O(logn) time
Więc jeśli iterację TreeSet tak:
while (iterator.hasNext()){ //Runs N times
System.out.println(iterator.next() + " "); //each next is O(logn)
}
by się spodziewać, że będzie O (n * logn), a nie O (n), ponieważ pętla while ma N iteracji, a każda iterator.next() wywołuje czas O (logn).
Dlaczego 'iterator.next()' jest O (log n). Musi tylko przejść do następnego węzła, to jest O (1), czyż nie? –
@JoseLuis nie dokładne, na podstawie patrząc na kod źródłowy. –
@ louis-wasserman Masz rację, bardzo mi przykro. Myślałem, że iterator() może zwrócić listę z posortowanymi węzłami, a następnie przejście do następnego węzła jest łatwe. –