Algoritmo-Fuerza bruta

La idea principal del método de fuerza bruta es utilizar la idea más simple para resolver el problema. Generalmente, el rendimiento no es bueno, pero sigue siendo muy importante.

  1. En teoría, el método de fuerza bruta puede resolver varios problemas en el campo de la computabilidad.
  2. Es aceptable utilizar la fuerza bruta para resolver problemas de menor escala. Si no vale la pena el costo de diseñar un algoritmo más eficiente
  3. El método de fuerza bruta se puede utilizar como el resultado final del rendimiento del tiempo para medir algoritmos más eficientes

Encuentra el método de fuerza bruta en el problema

Búsqueda secuencial

Al buscar en orden, el algoritmo generalmente se puede optimizar adecuadamente, como establecer un centinela, etc., lo que puede mejorar el rendimiento del tiempo, pero solo reducir el coeficiente, y el orden de magnitud no cambiará.

  1. Dos números : códigos simples
  2. Oferta demostrar la seguridad 53 - II 0 ~ n- 1 números que faltan. - Simple Código

Problema de coincidencia de cadenas

Definición de concordancia de cadenas: Dadas dos cadenas S = ”s1s2s …… n” y T = ”t1t2t …… m”, el proceso de encontrar la subcadena T en la cadena principal S se denomina concordancia de cadenas (también llamado concordancia de patrones), T Modo llamado

Algoritmo BF

Fuerza bruta absoluta: comience desde el primer carácter de la cadena principal S y compare el primer carácter del patrón T, si son iguales, continúe comparando los siguientes caracteres de los dos; si no, comience desde el segundo carácter de la cadena principal S El primer carácter del patrón T se compara con cada carácter y se repite el proceso anterior. Si se comparan todas las cadenas en T, la coincidencia es exitosa; si la posición de la última coincidencia es nm, la cadena principal S Los caracteres restantes en no son suficientes para coincidir con todo el patrón T, y la coincidencia falla.

Algoritmo KMP

La idea básica es: la cadena principal no se retrocede
Inserte la descripción de la imagen aquí

Dibuje un diagrama simple. Para la cadena principal S y la subcadena T, la posición de la marca cruzada (es decir, j) es inconsistente. En este momento, el contenido de la subcadena 1 (abcd) y la subcadena 2 (abcd) de T son iguales, y la subcadena 1 Mueva el siguiente dígito (es decir, la posición k del asterisco) a la posición de la cruz y la comparación puede continuar. Esta idea puede mejorar rápidamente la eficiencia del emparejamiento.

Por lo tanto, este algoritmo debe calcular primero la cadena antes del carácter no coincidente, que es la subcadena más larga del prefijo verdadero y el sufijo verdadero. Agregar uno a la longitud de esta subcadena es la posición del carácter que debe desplazarse hacia la derecha cuando el carácter actual no coincide. Registramos este valor en la siguiente matriz.

El valor de next [j] significa que cuando j no coincide, la comparación se realiza a partir del k-ésimo carácter de T.

Método de cálculo de next [j]: Suponiendo que el valor de next [j] es k

  1. Si t [k] = t [j], entonces siguiente [j + 1] = k + 1
  2. Si t [k] ≠ t [j], debe verificar si t [siguiente [k]] es igual a t [j], si son iguales, entonces siguiente [j + 1] = siguiente [k] +1, de lo contrario, continúe hacia adelante Retrospectivo. La razón de esto es que el prefijo verdadero y el sufijo verdadero se cuentan en el siguiente, por lo que t [j] debe participar en la comparación, y el prefijo verdadero se ha calculado en la cadena anterior, por lo que puede usarlo directamente.

Entonces, la idea final del algoritmo es calcular primero el siguiente de T, y luego comparar S y T. Cuando la posición j de T es inconsistente, deslice T a la posición del siguiente [j] y continúe la comparación.

  1. 686. superponer repetidamente una coincidencia de cadenas - Código simple

Método de fuerza bruta en el problema de clasificación

Seleccionar ordenar

Escanee toda la secuencia, busque el registro más pequeño de toda la secuencia y el primer registro de la secuencia a intercambiar, para poner el registro más pequeño en su posición final en el área ordenada, y luego escanee la secuencia del segundo registro, repita el proceso .

  1. 912. matriz ordenada - Código medio

Ordenamiento de burbuja

Escanee toda la secuencia al comienzo del proceso de clasificación de burbujas, compare los registros adyacentes dos por uno durante el proceso de rotura e intercambie si el orden se invierte. Por último, el registro más grande se sumerge en la última posición de la secuencia, y el segundo escaneo será el segundo más grande El registro desciende a la segunda posición de la derivada, repita la operación, sabiendo que n-1 escaneos, se ordena toda la secuencia.

Existe una solución optimizada para la clasificación de burbujas

  • Si no hay intercambio, la clasificación se ha completado y no es necesario continuar clasificando
  • Si no hay cambio después de una posición determinada, significa que la clasificación se realiza después de la posición y no es necesario continuar la clasificación después de la posición.
  1. Oferta 21. Probar seguridad ajustada para que la matriz secuencialmente delante de par-impar - El código de código medio sea correcto, pero el tiempo de espera, el algoritmo es lento

Método de fuerza bruta en el problema de combinación

Generar objetos de matriz

¡El método de fuerza bruta genera {1,2, ..., n} n! arreglo. Suponiendo que se hayan generado (n-1)! Permutaciones, n se puede insertar en n posiciones en cada permutación de n-1 elementos para obtener todas las permutaciones con tamaño de problema n.

  1. 46. ​​Todo el arreglo - Código medio

Generar subconjunto

El conjunto A de n elementos = {a1, a2, ..., an} tiene una correspondencia uno a uno entre los 2 n mismos y las 2 n cadenas de bits de longitud n .

El núcleo reside en esta correspondencia uno a uno. El 0 y 1 en la cadena de bits representan la presencia o ausencia de un solo elemento en el conjunto.

  1. 78. subconjunto - Código medio

0/1 problema de mochila

El problema de la mochila 0/1 es encontrar uno de estos elementos con n elementos de peso {w1, w2, ……, wn} y valor {v1, v2, ……, vn} y una mochila con una capacidad de C El subconjunto más valioso, y debe poder caber en una mochila.

Usar la fuerza bruta para este problema es calcular un subconjunto de todos los elementos, uno por uno, para ver qué valor es el más alto. Necesita utilizar el esquema anterior para generar subconjuntos.

Esto no es una pregunta. Una es porque la función principal se ha realizado en el subconjunto de generación y la otra es que no se encuentra ninguna pregunta adecuada en LOCK. Si conoce una pregunta adecuada, puede recomendarla.

Problema de asignación de tareas

Suponga que hay n personas para ser asignadas a n personas para su ejecución, cada tarea solo se asigna a una persona, a cada persona solo se le asigna una tarea y el costo de asignar la j-ésima tarea al i-ésimo individuo es C [i, j] (1 < = i, j <= n), el problema de asignación de tareas requiere encontrar el plan de asignación con el menor costo total.

Si usa el método de fuerza bruta para este problema, es generar una matriz completa de todas las tareas, ¡el total es n! Y luego calcular qué valor es el más alto uno por uno, debe usar el esquema anterior para generar el objeto de matriz.

Esto tampoco es un problema, el motivo es el mismo que el problema de la mochila 0/1 La lógica central se completa en la generación del objeto de arreglo. En términos generales, el método de fuerza bruta resuelve el problema de combinación. A menos que el problema sea muy pequeño, el método de fuerza bruta es casi impráctico.

Método de fuerza bruta en problema gráfico

Problema del bucle hamiltoniano

Indique el problema de viajar alrededor del mundo planteado por el matemático irlandés Hamilton. Usó 20 órdenes del dodecaedro regular para representar 20 ciudades. Pidió comenzar desde una ciudad, pasar por cada ciudad exactamente una vez y luego regresar a la ciudad de partida.

Inserte la descripción de la imagen aquí

Resuelva el problema del bucle hamiltoniano con fuerza bruta

  1. Calcula la disposición total de todos los vértices, ¡un total de n! UNA
  2. Cada arreglo debe cumplir dos condiciones
    • Los vértices adyacentes tienen aristas
    • El primer vértice y el último vértice tienen aristas

Esta no es una pregunta, el núcleo sigue siendo organizar el todo y luego juzgar si hay bordes. Realmente use la fuerza bruta para hacerlo, piénselo, definitivamente se terminará el tiempo.

  1. Pregunta de la entrevista 04.01. Vía entre nodos - Medio

Problema de TSP

El problema TSP se refiere a un viajero que quiere viajar n ciudades y luego regresar a la ciudad de salida, lo que requiere que cada ciudad la experimente y solo una vez, y requiera el viaje más corto.

La diferencia entre este problema y el bucle hamiltoniano es la adición del requisito de distancia más corta.

Utilice la fuerza bruta para resolver el problema de TSP

  1. Calcula la disposición completa de todos los vértices, ¡un total de (n-1)! La mitad de estas permutaciones tienen caminos completamente opuestos, por lo que las posibles soluciones se reducen a (n-1)! / 2
  2. Atraviesa estas permutaciones y calcula la distancia, elige la distancia más corta

Yo tampoco hice esto.

  1. Plan Tour Parque de Atracciones LCP 16.- Difícil

Método de fuerza bruta en problemas geométricos

Pregunta reciente

El problema reciente requiere encontrar los dos puntos más cercanos en una geometría que contiene n puntos.

El proceso del método de fuerza bruta para resolver el problema del par más cercano es: calcular por separado la distancia entre cada par de puntos y luego encontrar el par con la distancia más pequeña. Para evitar calcular la distancia dos veces para el mismo par de puntos, solo considere cuál i <j Par de puntos (Pi, Pj).

  1. El número de buen número 1512. - códigos simples

Problema de casco convexo

Conjunto convexo: para la geometría finita de un punto en el plano, si los puntos en el segmento de línea con dos puntos cualesquiera P y Q en el conjunto como extremos pertenecen al conjunto, el conjunto se denomina conjunto convexo.

Casco convexo: El casco convexo de un conjunto de puntos S es el conjunto convexo más pequeño que contiene S, donde el más pequeño significa que el casco convexo de S debe ser un subconjunto de todos los conjuntos convexos que contienen S.

Versión de casco convexo: Casco convexo significa que dibuja un rango cerrado, que incluye todos los puntos del conjunto. El casco convexo más pequeño es utilizar los puntos del conjunto S para construir un rango cerrado, que contiene todos los puntos del conjunto.

Utilice el método de fuerza bruta para calcular el casco convexo: para dos puntos Pi y Pj en un conjunto S que consta de n puntos, si y solo si los otros puntos del conjunto están en el mismo lado de la línea que pasa por los dos puntos (Suponiendo que no hay tres puntos en la misma línea), su línea es parte del límite convexo del casco del conjunto. Después de verificar cada par de puntos, los segmentos de línea que satisfacen la condición constituyen el límite del casco convexo. La complejidad temporal de este esquema es O (n ^ 3).

Esto no se hace. El enfoque es similar al problema reciente. La principal diferencia es que después de encontrar el correcto, necesita hacer otro cálculo con los puntos restantes. Y no se encontraron problemas relacionados en Locke.

para resumir

Después de leer tantos tipos de preguntas, creo que el método de la fuerza bruta sigue siendo útil para algunos problemas, y sigue siendo útil para algunos problemas a menor escala, y no hay forma de problemas mayores.

El tipo aquí es más importante

Encontrar problemas: búsqueda secuencial, KMP

Problema de clasificación: clasificación por selección, clasificación por burbujas. Estos dos métodos no son eficientes y en el futuro se pueden utilizar algoritmos de clasificación más eficientes. Pero estos dos métodos también proporcionan muy buenas ideas.

Problema de combinación: generar objetos de clasificación , generar subconjuntos . Estos dos métodos tienen una complejidad temporal de O (n!) Y una complejidad temporal de O (2 ^ n). Aunque no son eficientes, son la base de muchos otros problemas, como el problema de la imagen, el problema de la mochila 0/1, el problema de asignación de tareas, etc.

Problemas geométricos: Recientemente, la idea general del problema y el problema del casco convexo es relativamente simple, y el bucle doble se puede resolver.

Entre estos, especialmente KMP, la generación de objetos de ordenación y la generación de subconjuntos , todavía es difícil escribir por sí mismo si tiene tiempo.

Al final

Si te gusta mi artículo, puedes seguir mi cuenta pública (Programador Mala Tang)

Revisión de artículos anteriores:

algoritmo

  1. Plan de aprendizaje de algoritmos
  2. Método de fuerza bruta

tecnología

  1. Hablando de microservicios
  2. Optimización del rendimiento de TCP
  3. Realización del límite de corriente 1
  4. Redis implementa bloqueos distribuidos
  5. Seguimiento de errores del código fuente de Golang
  6. El principio de realización de la atomicidad, consistencia y durabilidad de las transacciones
  7. Explicación detallada del proceso de solicitud de CDN
  8. La historia del servicio de blogs siendo aplastado
  9. Técnicas comunes de almacenamiento en caché
  10. Cómo conectarse de manera eficiente con pagos de terceros
  11. Versión concisa del marco de gin
  12. Un breve análisis de los bloqueos y transacciones de InnoDB

leyendo notas

  1. Revolución ágil
  2. Cómo ejercitar tu memoria
  3. Lógica simple después de la lectura
  4. Aire caliente después de la lectura
  5. Las analectas-pensamientos después de leer

Pensando

  1. Algunas opiniones sobre la gestión de proyectos
  2. Algunas reflexiones sobre los gerentes de producto
  3. Reflexiones sobre el desarrollo profesional de los programadores
  4. Pensando en la revisión del código
  5. Recomendación del editor de Markdown-typora

Supongo que te gusta

Origin blog.csdn.net/shida219/article/details/108306149
Recomendado
Clasificación