única vectores valores valor unica una triviales tiene tenga tendra solución soluciones solucion sistema que programacion para ordenamiento ordenacion numero métodos metodos matriz matrices lineales lineal infinitas incognita halle hallar filtrar exista elementos elemento ejemplos ecuaciones dato dado cuando constante condicion con complejidad cambiar búsqueda busqueda buscar binaria arreglos algoritmos algoritmo 3x3 algorithm sorting big-o

algorithm - vectores - que es sistema de ecuaciones lineales con solucion unica



Prepare la matriz en tiempo lineal para encontrar k elementos más pequeños en O(k) (2)

Esta es una pregunta interesante que he encontrado en la web. Dada una matriz que contiene n números (sin información sobre ellos), deberíamos preprocesar la matriz en tiempo lineal para que podamos devolver los k elementos más pequeños en tiempo O(k) , cuando se nos da un número 1 <= k <= n

He estado discutiendo este problema con algunos amigos, pero nadie pudo encontrar una solución; ¡Cualquier ayuda sería apreciada!


Para el paso de preprocesamiento, utilizaremos la selección basada en partición varias veces en el mismo conjunto de datos.

Encuentre el número n / 2 -th con el algoritmo. Ahora el conjunto de datos se divide en dos mitades, inferior y superior. En la mitad inferior vuelve a encontrar el punto medio. En su partición inferior, haga lo mismo y así sucesivamente ... En general, esto es O (n) + O (n / 2) + O (n / 4) + ... = O (n).

Ahora, cuando tenga que devolver los k elementos más pequeños, busque la x < k más cercana, donde x es un límite de partición. Todo lo que se encuentra debajo puede devolverse, y desde la siguiente partición debe devolver los números k - x . Dado que el tamaño de la siguiente partición es O (k) , la ejecución de otro algoritmo de selección para el número k - x th devolverá el resto.


Podemos encontrar la mediana de una lista y dividirla en un tiempo lineal.

Luego podemos usar el siguiente algoritmo: mantener un búfer de tamaño 2k .

Cada vez que el búfer se llena, encontramos la mediana y la partición a su alrededor, manteniendo solo los elementos k más bajos.
Esto requiere n/k pasos de encontrar la mediana y la partición, cada uno de los cuales lleva tiempo O(k) con una selección rápida tradicional. este enfoque requiere solo O(n) tiempo.

Además si necesita la salida ordenada. Lo que añade un tiempo adicional de O(k log k) . En total, este enfoque requiere solo O(n + k log k) tiempo y O(k) espacio.