¿Es una mala señal la preferencia por las soluciones de fuerza bruta? [cerrado]

StackOverflow https://stackoverflow.com/questions/418465

  •  03-07-2019
  •  | 
  •  

Pregunta

Soy un programador principiante de C ++ y, para distraerme, he estado probando algunos de los problemas en projecteuler.net . A pesar del interés por las matemáticas en la escuela, me encontré automáticamente buscando soluciones a los problemas de fuerza bruta, en lugar de buscar algo moderno o elegante.

¿Esto suena como una mala mentalidad de tener? Me siento un poco culpable de hacerlo así, pero tal vez rápido y sucio está bien algunas veces ...

¿Fue útil?

Solución

Creo que deberías ver cuál es tu objetivo final y cuáles son tus limitaciones.

A veces, un método de fuerza bruta puede resolver un problema en 50 ms probando cada combinación de soluciones y un " inteligente " La solución puede resolverlo en 10ms. En ese punto, la solución menos inteligente pero más fácil de entender triunfa sobre la solución inteligente.

Sin embargo, hay algunos problemas en los que el forzamiento de la fuerza bruta no solo será poco elegante sino que simplemente no funcionará. Hay muchos problemas en los que si intentas forzarlos brutalmente, te llevará mucho tiempo resolverlos. Entonces, obviamente, este tipo de problemas necesitan un enfoque más elegante.

Entonces pregúntese, ¿por qué está intentando estos problemas del Proyecto Euler? ¿Lo estás haciendo para aprender? Entonces, tal vez sea lo mejor para usted intentar una solución inteligente, pero solo después de haber intentado inicialmente una solución de fuerza bruta para comprender el problema.

Cuando hago los problemas del Desafío de Python, trato de hacerlo de la manera más sucinta posible, superando los límites de mis habilidades. Después de resolverlo, luego reviso las respuestas de otras personas y tomo notas mentales de personas que fueron más inteligentes que yo y lo que hicieron. Algunas personas harán un uso especial de una estructura de datos que no había pensado que sea más adecuada para la tarea o tendrán pequeños trucos matemáticos que usarán para hacer que su algoritmo sea más eficiente. Al final, trato de absorber todo lo que pueda de su inteligencia y hacer que se vea la próxima vez que se me presente un problema de naturaleza similar.

Otros consejos

No, esto no es algo malo. He tenido soluciones que eran tan elegantes que estaban equivocadas.

Como programador principiante, gastará más de su energía mental en descubrir cómo implementar realmente las cosas en C ++, en lugar de gastar energía en encontrar una solución inteligente para cada problema. Esto está bien, porque te da la oportunidad de explorar diferentes áreas de C ++ mientras trabajas en una variedad de diversos tipos de problemas.

Cuando domines C ++ y no tengas que pensar en cómo hacer todo lo posible, entonces podrás dedicar más tiempo a inventar soluciones sin fuerza bruta.

Las soluciones elegantes no fueron creadas espontáneamente; se derivaron de las soluciones de fuerza bruta cuando se requirió más velocidad o menos consumo de memoria de la solución actual.

Así que no, no lo es. Así es como surgieron las soluciones elegantes.

He pasado por esta evolución:

  1. Consíguelo para compilar
  2. Haz que funcione como se espera
  3. Descubra una solución que funcione
  4. Encuentra una buena solución
  5. Descubra varias soluciones y encuentre la mejor
  6. Descubra varias soluciones y encuentre la mejor para esta situación
  7. ?? no he llegado todavía

Yo diría que no, no es una mala señal. De hecho, te estás haciendo un favor al alejarte de las optimizaciones prematuras, lo que definitivamente es algo bueno.

Ken Thompson: " En caso de duda, use la fuerza bruta "

el aprendizaje es un proceso de fuerza bruta. Yo no diría que es malo. Al tratar de hacer algo de esa manera, es posible que note un patrón. Pienso que mientras esté pensando en algo y tratando de encontrar soluciones, aprenderá. Hay pocas personas que simplemente saltan a las soluciones más elegantes o eficientes.

Sería difícil convencerme de que las personas que están tratando de aprender podrían ser consideradas malas. Excepto tal vez un científico malvado: P

buena suerte.

¿Encajas dentro de la regla de tiempo de ejecución de 1 minuto para los problemas? Si es así, entonces tu " fuerza bruta " ¡La solución cumple con todos los requisitos, y eso es realmente una buena señal de que rápidamente se puede encontrar algo que funcione!

Este tipo de problemas fomenta la microoptimización y los algoritmos muy inteligentes, pero en general, una implementación sencilla y muy legible será mucho más fácil de mantener y se verá favorecida en el mundo empresarial.

Si sucede que es una situación en la que " fuerza bruta " = > " simple " y " elegante " = > " complejo " ;, luego la fuerza bruta gana. Y esto es muy a menudo cierto.

En absoluto. Resuelva el problema de manera correcta y completa, luego hágalo más eficaz o elegante según sea necesario.

Eso no quiere decir que deba ignorar las mejoras obvias en el rendimiento ... Simplemente no se centre en ellas hasta que comprenda mejor el problema.

Para poner esto en un contexto diferente:

Cuando usas una biblioteca que no conoces muy bien (para crear una UI, por ejemplo) puedes resolver un problema simple de una manera perfectamente eficaz, aunque sabes que hay una "forma correcta". para hacerlo. Si sientes curiosidad y te preocupa que tu código de fuerza bruta te haga ver como un imbécil, pronto encontrarás la "forma correcta". para hacerlo (por ejemplo, los fines de semana o mientras duermes). Mientras tanto, a través de la fuerza bruta, tendrás algo que funciona.

En realidad, me olvido de usar la fuerza bruta a veces, y comienzo a escanear la API en busca de la " derecha " solución. Esto es definitivamente un error en muchos casos. Si la solución de fuerza bruta es fácil de implementar, la escala según lo necesite (en realidad, si funciona), luego olvídese de la solución correcta. Lo encontrará lo suficientemente pronto (y muchas veces ¡Ya lo sabía!), pero mientras tanto, resolvió el problema y pudo continuar con el siguiente.

Los bloqueos de carreteras son terribles cuando se codifica, y definitivamente deben evitarse más que las soluciones de fuerza bruta.

Definitivamente, no es una mala señal de tendencia a la fuerza bruta, especialmente como principiante porque puede que no sepas nada mejor. Especialmente con el Proyecto Euler, es una mala señal implementar un método de fuerza bruta y no revisar los comentarios para aprender un método más eficiente.

A menudo termino en el mismo bote en el que estás y por eso empecé a hacer PE. problemas: estaba implementando muchos enfoques de fuerza bruta y quería exponerme a soluciones más elegantes ...

Usted ha sopesado su opción. Si la solución de fuerza bruta realizará el trabajo y funcionará bien, es una buena solución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top