const arr = ['a','b','c']; for (let char of arr) { console.log(char); }Creo que la complejidad temporal del código anterior es O (n).
const arr = ['a','b','c']; for (let char of arr) { console.log(arr.indexOf(char); }Sin embargo, ¿indexOf() busca todos los elementos? Si lo hace, creo que la complejidad del tiempo del código anterior puede ser O (n ^ 2)
Quiero saber si indexOf() busca todos los componentes en cuanto a bucle o no.
Para la complejidad del tiempo, siempre considera el peor de los casos (para las circunstancias del OP, cada carácter está en la lista en una posición no designada específicamente). Para tomar una matriz de ejemplo OP, hacer arr.indexOf('c') implicaría mirar cada posición hasta que se encuentre el carácter c (que es la última posición). Por lo tanto, suponiendo el peor de los casos, la ejecución tardaría O(n) tiempo para .indexOf() . Según el comentario de @Nick Parsons, hay formas de mejorar el tiempo del algoritmo de búsqueda subyacente utilizando estrategias como una búsqueda binaria (que es una complejidad de tiempo O(log n) , pero eso implica que los datos están en algún formato semiestructurado para cualquier concepto como búsqueda binaria para mejorar la complejidad del tiempo.
Si los proveedores de navegadores siguen la especificación del idioma, entonces la respuesta es NO. Debería volver una vez que se encuentre una coincidencia. En determinadas circunstancias, volverá incluso sin comprobar ningún elemento. Consulte ECMA262 .
Sin embargo, la complejidad sería la misma, O(n^2).
Sí, la función indexOf() tiene una complejidad de O(n). Si el índice proporcionado es negativo, la matriz aún se busca de adelante hacia atrás. Si el índice calculado es menor que 0, se buscará en toda la matriz.
Entonces su programa tendrá una notación grande de O (n ^ 2)
Puedes encontrar más sobre esto aquí en MDN