¿Qué es un método ingenuo?


Respuestas:


16

No es un término técnico con un significado preciso, es solo la palabra inglesa "ingenuo". En un contexto informático, la palabra generalmente significa algo así como "una de las cosas en las que pensaría primero, pero sin darse cuenta de un hecho menos obvio pero importante".

Por ejemplo, si uno sabe que la definición de los números de Fibonacci es Fyosi(norte)=Fyosi(norte-1)+Fyosi(norte-2), entonces una implementación "ingenua" sería

def Fib(n):
  if n <= 1:
    return 1
  else:
    return Fib(n-1) + Fib(n-2)

¿Cuál es el problema? Que si llamamos, digamos, Fib(7)entonces terminamos haciendo muchas de las mismas llamadas una y otra vez, como Fib(4)(porque Fib(7)llama Fib(6)y Fib(5), y Fib(6)llama Fib(5)y Fib(4), y las dos veces lo llamamos Fib(5)llamadas Fib(4)y Fib(3), y así sucesivamente).

Entonces, una solución más "sofisticada", en lugar de ingenua, sería como una programación dinámica y evitar todos los cálculos adicionales.


1

En general, podemos resolver cada problema en NP a tiempo2escuela politécnica(norte)por fuerza bruta , lo que significa que enumeramos explícitamente a todos los candidatos para un testigo NP, que tiene un polinomio de longitud en el tamaño de entradanorte. En este contexto, el método de "verificar todas las soluciones posibles" puede considerarse ingenuo.


1

La implementación ingenua es la solución donde parece sencilla y menos complicada posible.

En algunos casos, puede no tener un buen comportamiento en el espacio o el tiempo, como la implementación ingenua de la función de Fibonacci (exponencial en lugar de lineal).

Pero en muchos casos, puede funcionar bien la mayor parte del tiempo. Entonces, no hay nada malo con el enfoque ingenuo, puede hacerlo en 3 pasos:

"Haz que funcione" (según lo solicitado) -> "Hazlo elegante / hermoso" (refactorización, más legible) -> "Hazlo rápido" (optimización del rendimiento)

Para los lenguajes de programación con tradiciones de "sobre-ingeniería" como Java, recomendaría la "solución más simple" cualquier día.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.