Che cos'è un metodo ingenuo?


Risposte:


16

Non è un termine tecnico con un significato preciso, è solo la parola inglese "ingenuo". In un contesto informatico, la parola di solito significa qualcosa del tipo "una delle cose a cui penseresti prima, ma senza realizzare un fatto meno ovvio ma importante".

Ad esempio, se si conosce la definizione dei numeri di Fibonacci è FioB(n)=FioB(n-1)+FioB(n-2), quindi un'implementazione "ingenua" sarebbe

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

Qual è il problema? Che se noi chiamiamo, per esempio, Fib(7)e poi si finisce per fare molte delle stesse chiamate più e più volte, come ad esempio Fib(4)(in quanto Fib(7)le chiamate Fib(6)e Fib(5), e Fib(6)le chiamate Fib(5)e Fib(4), ed entrambe le volte chiamiamo Fib(5)chiama Fib(4)e Fib(3), e così via).

Quindi qui una soluzione più "sofisticata", anziché ingenua, sarebbe come una programmazione dinamica ed eviterebbe tutti i calcoli degli extra.


1

In generale, possiamo risolvere ogni problema in NP in tempo2poli(n)per forza bruta , nel senso che enumeriamo esplicitamente tutti i candidati per un testimone NP, che ha un polinomio di lunghezza nella dimensione di inputn. In questo contesto, il metodo di "controllare ogni possibile soluzione" può essere considerato ingenuo.


1

L'implementazione ingenua è la soluzione in cui appare semplice e meno complicata possibile.

In alcuni casi, potrebbe non avere un buon comportamento spaziale o temporale, come l'implementazione ingenua della funzione di Fibonacci (esponenziale piuttosto che lineare).

Ma in molti casi, può funzionare bene per la maggior parte del tempo. Quindi nulla è sbagliato nell'approccio ingenuo, puoi farlo in 3 passaggi:

"Make it work" (come richiesto) -> "Make it elegant / beautiful" (refactoring, più leggibile) -> "Make it fast" (ottimizzazione delle prestazioni)

Per linguaggi di programmazione con tradizioni di "ingegneria eccessiva" come Java, consiglierei la "soluzione più semplice" ogni giorno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.