¿Qué es la fuerza bruta?

La solución de fuerza bruta es la técnica de aplicar todas las soluciones posibles para encontrar la solución exacta.

Ejemplo de la vida real:

Por ejemplo, si olvidó el código de desbloqueo de su bolsa de equipaje, ¿qué haría?

Supongo que primero probarías cualquier código que recordaras. Si aún no se desbloqueó, ¿qué intentarías después? ¿Terminarías rompiéndolo? Ahí es donde aparece el método de la fuerza bruta:

Solución de fuerza bruta: el código es un número de 3 dígitos y tiene solo 0-9 números en cada dígito, por lo tanto, la solución vendría entre 000 y 999. Todo lo que tiene que hacer es probar todas estas posibles soluciones de 000 a 999. En el peor de los casos, su maleta se desbloquea en 1000 intentos.

Ejemplo de programación:

Búsqueda lineal, clasificación de selección, clasificación de burbujas, etc.

La fuerza bruta es una búsqueda exhaustiva de todas las soluciones posibles para un problema. A menudo es fácil de implementar y casi definitivamente encontrará una solución (si la hay). La compensación aquí es el tiempo requerido. En términos de complejidad algorítmica, requerirá mucho tiempo y siempre que sea posible se deben emplear formas “más inteligentes” de resolver problemas.

Sin embargo, en algunos casos, la fuerza bruta es necesaria.

Considere el campo de la criptografía. Digamos que quieres descifrar una contraseña. Usted sabe que la contraseña tiene las letras a, b, c, doe Desearía enumerar todas las cadenas posibles usando estas letras y ver si alguna de las cadenas funciona.

En Python:

de itertools importa permutaciones para
cadena en permutaciones (“abcde”):
cadena de impresión

Esto produciría todas las palabras posibles (que es 5! = 120 [matemáticas] 5! = 120 [/ matemáticas]) que se pueden formar usando los caracteres “a”, “b”, “c”, “d”, ” mi”. (Suponiendo que no se repitan por el bien del ejemplo)

Piense en un número entre 1 y 2 mil millones, inclusive.

Puedo adivinar el número que estás pensando en usar este truco extraño. (¡Los informáticos me odian!)

Siempre y cuando me diga si tengo razón o no después de cada suposición, se garantiza que este método finalmente encontrará el número en el que está pensando.

Listo? Vamos a empezar.

  • ¿Es 1?
  • Si no, ¿es 2?
  • 3?
  • 4?
  • 5?
  • 6?
  • 7?
  • Seguramente debe ser 8.
  • ¿No? ¿Qué tal 9?
  • 10?
  • Debe ser 11.
  • ¿No? ¿Son las 12 entonces?
  • 13?
  • 14?
  • ¿15?

¿Ver? Infalible. Eventualmente habré agotado todos los números entre 1 y 2 mil millones (inclusive), lo que significa que suponiendo que sigo así, estoy seguro de que eventualmente adivinaré su número correctamente. Por supuesto, a 1 conjetura por segundo, me tomará aproximadamente 32 años en promedio encontrar su número. ¿Pero a quién le importa? Eventualmente lo haré bien. ¿¿¿Derecho???

Esa es la fuerza bruta.

Fuerza bruta:

Se refiere a un estilo de programación que no incluye ningún atajo para mejorar el rendimiento, sino que se basa en la potencia de computación pura para probar todas las posibilidades hasta que se encuentre la solución a un problema.

Bueno, ¿qué significa realmente en lenguaje humano?

Veamos este ejemplo. Tengo una cuenta de Facebook y sabes mi nombre de usuario pero no conozco mi contraseña. Pero he escrito 100 palabras al azar en mi cuaderno y de alguna manera llegaste a saber que una palabra pertenece a mi contraseña de Facebook.

¿Qué vas a hacer en este caso?

Obviamente intentará cada contraseña escrita allí para abrir mi cuenta. Porque no hay otra forma de saber mi contraseña.

Este proceso de golpe y método de prueba se llama estilo de fuerza bruta. Principalmente se usa para hackear un sistema usando el ataque de fuerza bruta .

La única ventaja de la programación de fuerza bruta es que siempre devolverá el resultado correcto, ya que verificará todas las posibilidades disponibles en el universo para obtener el resultado deseado.

Ahora, este tipo de programación no es muy útil, ya que afecta directamente el rendimiento.

Fuerza bruta: es un método en el que encuentras la solución a un problema dado, probando todas tus opciones ampliamente. Agotas todas las combinaciones posibles que tienes. Es un método de prueba y error. No es un método aconsejable para programadores. Este método consume tiempo y energía innecesarios. Por lo general, se usa en el campo de la criptografía, rompiendo contraseñas, descifrando patrones, etc.

La fuerza bruta se usa cuando falla cualquier otro método o cuando no podemos encontrar un método para resolver un problema.

No sé si hay una definición oficial por ahí. Sin embargo, para los algoritmos, consideraría enfoques que se basan en una enumeración completa del agotamiento de las posibilidades a medida que se acerca la fuerza bruta.

Puede ser algo peyorativo cuando alguien habla sobre el código de otra persona. Básicamente dice que la solución no es elegante, sino que se basa en el pequeño tamaño del problema y la velocidad de la computadora (a diferencia de las estrategias inteligentes de búsqueda / solución).

Un ejemplo sería multiplicar dos matrices enormes que son en su mayoría ceros usando las definiciones básicas de álgebra lineal (fuerza bruta) en lugar de usar representaciones de matriz dispersas.

More Interesting

¿Están sobrevalorados los algoritmos, en comparación con la escritura de software limpio, escalable y de fácil mantenimiento? Sé mi parte de algoritmos y acerté mis entrevistas. Pero en la industria, se trata de cumplir con los requisitos de software y administrar la base del código.

¿Cuáles son los algoritmos básicos de aprendizaje automático que todo principiante debe saber antes de comenzar el aprendizaje automático?

¿Por qué necesitamos el algoritmo de derivación de porter en Python?

¿Alguien puede enumerar las dosis de azufre homeopáticas en orden ascendente?

Cómo ganar un producto CodeChef o Codeforces (pegatinas especiales)

¿Cuáles son algunos algoritmos de búsqueda rápida de similitud y estructuras de datos para vectores de alta dimensión?

¿Cómo encontraron los pilotos el camino más corto, cuando volaron a larga distancia en 1950?

¿Por qué un montón de emparejamiento es más rápido que un montón binario?

¿Está bien mi implementación de Búsqueda ternaria?

¿Cómo funciona el algoritmo DeepMind?

¿Cuál es el algoritmo más simple que permite a un robot descubrir e inventar?

¿Para qué se utiliza el algoritmo de fuerza bruta?

¿Es una buena manera de aprender a resolver el cubo de rubik con algoritmos ya realizados en línea si no tiene idea de cómo resolverlo?

Dada una matriz que contiene enteros distintos, ¿cuál es el número promedio de veces que se establece el valor máximo del elemento al encontrarlo?

¿Es mejor representar aristas en un gráfico que sale de un vértice como miembros de una matriz dinámica o una lista vinculada?