¿Qué complejidad de tiempo (en notación O grande) proporciona la especificación ES6 para las colecciones con clave (Set, Map, WeakSet y WeakMap)?
Mi expectativa, y la de la mayoría de los desarrolladores, es que las especificaciones y las implementaciones utilicen algoritmos de rendimiento ampliamente aceptados , en cuyo caso Set.prototype.has
, add
y delete
todos sean O (1) en el caso promedio. Lo mismo para los Map
y Weak–
equivalentes.
No me resulta del todo evidente si la complejidad temporal de las implementaciones fue obligatoria, por ejemplo, en la Especificación del lenguaje ECMAScript 2015 - 6ª edición - 23.2 Establecer objetos .
A menos que lo entienda mal (y ciertamente es muy posible que lo haga), parece que la especificación ECMA exige que las implementaciones (por ejemplo Set.prototype.has
) deben usar un algoritmo de tiempo lineal ( O (n) ). Me parecería sumamente sorprendente que la especificación no exigiera o incluso permitiera algoritmos más eficaces, y estaría muy interesado en una explicación de por qué este es el caso.