Jaką złożoność czasową (w notacji duże-O) zapewnia specyfikacja ES6 dla kolekcji z kluczem (Set, Map, WeakSet i WeakMap)?
Oczekuję, i spodziewam się tego od większości programistów, że specyfikacje i implementacje będą używać powszechnie akceptowanych algorytmów wydajności, w którym to przypadku Set.prototype.has
, add
i delete
wszystkie będą O (1) w przeciętnym przypadku. To samo dotyczy Map
i Weak–
odpowiedników.
Nie do końca jest dla mnie jasne, czy złożoność czasowa implementacji była wymagana np. W specyfikacji języka ECMAScript 2015 - wydanie 6 - 23.2 Ustaw obiekty .
O ile nie zrozumiem tego źle (a na pewno jest to bardzo możliwe), wygląda na to, że specyfikacja ECMA nakazuje, aby implementacje (np. Set.prototype.has
) Używały algorytmu czasu liniowego ( O (n) ). Wydałoby mi się niezwykle zaskakujące, że bardziej wydajne algorytmy nie byłyby wymagane lub nawet dozwolone w specyfikacji, i byłbym bardzo zainteresowany wyjaśnieniem, dlaczego tak się dzieje.