Algoritmo BFPRT: encuentre el K-ésimo elemento más pequeño en la matriz.

1. Breve descripción y análisis de problemas experimentales

  1. Pregunta experimental :

Encuentre el K-ésimo elemento más pequeño en la matriz.

  1. Ejemplo de problema :

Por lo general, necesitamos encontrar los números K principales entre una gran cantidad de números. Por ejemplo, en el motor de búsqueda, busque las 1000 palabras más populares en las que los usuarios hacen clic en ese día; en la selección de funciones de texto, busque las palabras principales clasificadas desde problema grande a pequeño Este problema también se llama problema TOP-K .

  1. Problemas con los algoritmos convencionales:

El algoritmo convencional se refiere a la clasificación utilizando el algoritmo de clasificación rápida. La complejidad temporal promedio de la clasificación rápida es O(nlogn), pero hay casos en los que la complejidad temporal es O(n²). De hecho, solo los primeros K números pequeños/grandes son necesarios, no hay necesidad de ordenar otros números redundantes, y el algoritmo de ordenación rápida desperdicia tiempo de ordenación redundante.

  • Breve descripción del proceso experimental y análisis de la complejidad del tiempo

1. Algoritmo BFPTR

Algoritmo BFPTR, también conocido como algoritmo de la mediana. Según el análisis del algoritmo, su peor complejidad temporal es solo O(n) . La diferencia entre este y el método convencional (es decir, el algoritmo de clasificación rápida) está solo en la clasificación seleccionada. en cada clasificación Si se especifica el número En el algoritmo convencional, la selección de números de clasificación es aleatoria, pero en el algoritmo BFPRT, la matriz se divide primero en grupos de cinco adyacentes, y si quedan menos de cinco en el final, también se divide en grupos Para un grupo, forme una nueva matriz con la mediana en cada grupo, y luego encuentre la mediana de la nueva matriz como el número de comparación seleccionado Resuelva recursivamente para asegurarse de que cada número de comparación esté en el medio de la matriz, y finalmente reduce la complejidad del tiempo a O(n).

  1. Breve descripción de los pasos experimentales.

① Agrupe la matriz original y divídala en cinco grupos. Al final, si quedan menos de cinco, también se puede contar como un grupo.

②Ordene cada grupo obtenido internamente, tome la mediana y guárdela en una nueva matriz.

③Encuentre la mediana de la nueva matriz y use este número como el número de comparación m* para realizar el proceso de partición , es decir, almacene el número menor que m* en S1 y coloque el número mayor que m* en S2.

④ Situación de evaluación 1: si k es exactamente igual a |m*| en este momento, se emite

Situación de juicio 2: Si k>|m*| en este momento, acortar el  BFPRT recursivo( a , low , m.position-1 , int  key )

Situación de juicio 3: Si k<|m*| en este momento, acorte el  BFPRT recursivo( a , m.position+1 , high ,  int  key )

 Figura 1 Diagrama esquemático del algoritmo BFPRT

  1. Análisis de complejidad temporal de algoritmos

La peor complejidad temporal del algoritmo BFPRT es O(n).Sea T(n) la complejidad temporal, entonces es fácil tener la siguiente fórmula:

                                               (1)

                                                              ② ③

Entre ellos, ① proviene de encontrar la mediana en el grupo, y ② proviene del proceso BFPRT(). El m* inicialmente seleccionado es primero mayor que 1/2 en la matriz mediana, es decir, (1/2)*( n/5) del total, y entre los n/10 números, deben ser mayores o iguales a 3 números de los 5 grupos originales, por lo tanto, en el peor de los casos, se seleccionan 7/10 partes cada vez que ③c*n proviene de otro proceso, como la clasificación.

  1. Reflexiones sobre problemas experimentales y nuevos intentos :

En la explicación del algoritmo, se usó 5 para agrupar la matriz, pero ¿por qué no usar otros números para agrupar? Usé el programa para comparar en el experimento.

Debido a que incluso la agrupación es inconveniente para tomar la mediana, no se considera En el experimento, elegí 7 y 9 para agrupar la matriz original, y encontré que cuando la longitud de la matriz es la misma, el tiempo de cálculo de agrupar por 5 es generalmente mejor que el de la agrupación por 7 , 9 El caso de la agrupación.

Analiza las razones:

  1. En primer lugar, cuantos más elementos hay en cada grupo, peor es el peor caso de los datos: por ejemplo, un grupo de 7, los peores datos se dividen por 4:10 o 2:5, que es más alto que la proporción de 3 :7, y es aún peor. uniforme.
  2. Esto aumentará el número de recursiones.

La siguiente figura muestra los resultados del algoritmo BFPRT para agrupar 5, 7 y 9 en el caso de 200 puntos

 5 grupos

7 grupos

  9 grupos

Después de la comparación, se puede ver que la eficiencia del tiempo de cálculo del algoritmo de 5 grupos es generalmente la más alta y el tiempo de ejecución es más rápido.

La siguiente figura muestra los resultados del algoritmo BFPRT en el que se agrupan 5, 7 y 9 en el caso de 500 puntos

5 grupos

7 grupos

9 grupos

De manera similar, después de la comparación, se puede ver que el algoritmo de 5 grupos generalmente tiene la eficiencia de tiempo de cálculo más alta y el tiempo de ejecución es más rápido.

Supongo que te gusta

Origin blog.csdn.net/qq_52913088/article/details/127010629
Recomendado
Clasificación