Más que sobre LINQ para [inserte aquí su proveedor favorito], esta pregunta se trata de buscar o filtrar colecciones en memoria.Rendimiento LINQ en memoria
Sé que LINQ (o métodos de búsqueda/filtrado de extensión) funciona en objetos que implementan IEnumerable
o IEnumerable<T>
. La pregunta es: debido a la naturaleza de la enumeración, ¿es cada complejidad de consulta al menos O (n)?
Por ejemplo:
var result = list.FirstOrDefault(o => o.something > n);
En este caso, cada algoritmo llevará al menos O (n) menos list
se ordena con respecto a 'something'
, en cuyo caso la búsqueda debe tomar O (log (n)): debe ser una búsqueda binaria. Sin embargo, si entiendo correctamente, esta consulta se resolverá mediante enumeración, por lo que debería tomar O (n), incluso en list
se solicitó anteriormente.
- ¿Hay algo que pueda hacer para resolver una consulta en O (log (n))?
- Si quiero rendimiento, ¿debería usar Array.Sort y Array.BinarySearch?
> Incluso con la paralelización, sigue siendo O (n). Buen punto – Lucas