Qual è la differenza tra un'euristica e un algoritmo?


Risposte:


99

Un algoritmo è la descrizione di una soluzione automatizzata a un problema . Quello che fa l'algoritmo è definito con precisione. La soluzione potrebbe o non potrebbe essere la migliore possibile ma sai fin dall'inizio che tipo di risultato otterrai. Si implementa l' algoritmo utilizzando un linguaggio di programmazione per ottenere (una parte di) un programma .

Ora, alcuni problemi sono difficili e potresti non essere in grado di ottenere una soluzione accettabile in un tempo accettabile. In questi casi spesso è possibile ottenere una soluzione non troppo negativa molto più velocemente, applicando alcune scelte arbitrarie (ipotesi plausibili): questa è un'euristica .

Un'euristica è ancora una sorta di algoritmo, ma che non esplorerà tutti i possibili stati del problema o inizierà esplorando quelli più probabili.

Esempi tipici provengono dai giochi. Quando si scrive un programma di gioco di scacchi, si potrebbe immaginare di provare ogni possibile mossa a un certo livello di profondità e di applicare alcune funzioni di valutazione alla scacchiera. Un'euristica escluderebbe rami completi che iniziano con mosse ovviamente sbagliate.

In alcuni casi non stai cercando la soluzione migliore, ma qualsiasi soluzione che soddisfi qualche vincolo. Una buona euristica aiuterebbe a trovare una soluzione in breve tempo, ma potrebbe anche non riuscire a trovarne alcuna se le uniche soluzioni sono negli stati che ha scelto di non provare.


3
Un altro uso comune dell'euristica è nel rilevamento dei virus, dove potresti non essere sicuro che sia presente un virus, ma puoi cercare attributi chiave specifici di un virus.
Dana Holt

Sì, questo è vero e per programmi di cracking
streetparade

1
@kriss, quindi .. un'euristica è una specie di algoritmo.
Pacerier

1
@Pacerier: sì. È un algoritmo che aiuta a navigare nello spazio della soluzione di un particolare problema. Puoi anche vederlo come una strategia per modificare un algoritmo per renderlo pratico (un meta-algoritmo). È ancora un algoritmo, tutti i metodi lo sono e un'euristica è sicuramente un metodo.
kriss

33
  • Un algoritmo è tipicamente deterministico e ha dimostrato di produrre un risultato ottimale
  • Un'euristica non ha alcuna prova di correttezza, spesso coinvolge elementi casuali e potrebbe non produrre risultati ottimali.

Molti problemi per i quali non è noto un algoritmo efficiente per trovare una soluzione ottimale hanno approcci euristici che producono risultati quasi ottimali molto rapidamente.

Ci sono alcune sovrapposizioni: "algoritmi genetici" è un termine accettato, ma in senso stretto si tratta di euristiche, non algoritmi.


2
Non direi che un algoritmo ha dimostrato di dare un risultato ottimale: dipende dall'algoritmo rispetto a quale problema.
nbro

Fornire un risultato ottimale non è la qualità essenziale degli algoritmi, è la precisione, ovvero il risultato esatto, mentre l'euristica fornisce risultati approssimativi.
Marina Dunst

22

Euristico, in poche parole è una "supposizione istruita". Wikipedia lo spiega bene. Alla fine, un metodo di "accettazione generale" viene considerato come una soluzione ottimale al problema specificato.

Euristico è un aggettivo per tecniche basate sull'esperienza che aiutano nella risoluzione dei problemi, nell'apprendimento e nella scoperta. Un metodo euristico viene utilizzato per giungere rapidamente a una soluzione che si spera sia vicina alla migliore risposta possibile, o "soluzione ottimale". Le euristiche sono "regole pratiche", ipotesi plausibili, giudizi intuitivi o semplicemente buon senso. Un'euristica è un modo generale per risolvere un problema. Euristica come sostantivo è un altro nome per metodi euristici.

In termini più precisi, l'euristica sta per strategie che utilizzano informazioni facilmente accessibili, anche se liberamente applicabili, per controllare la risoluzione dei problemi negli esseri umani e nelle macchine.

Mentre un algoritmo è un metodo contenente un insieme finito di istruzioni utilizzate per risolvere un problema. Il metodo ha dimostrato matematicamente o scientificamente di funzionare per il problema. Esistono metodi e prove formali.

L'algoritmo euristico è un algoritmo in grado di produrre una soluzione accettabile a un problema in molti scenari pratici, alla maniera di un'euristica generale, ma per il quale non esiste una prova formale della sua correttezza.


8

Un algoritmo è un insieme autonomo di operazioni passo passo da eseguire 4 , tipicamente interpretato come una sequenza finita di istruzioni (computer o umane) per determinare una soluzione a un problema come: esiste un percorso da A a B, o qual è il percorso più piccolo tra A e B. In quest'ultimo caso, potresti anche accontentarti di una soluzione alternativa "ragionevolmente vicina".

Esistono alcune categorie di algoritmi, di cui uno è l'algoritmo euristico. A seconda delle proprietà (comprovate) dell'algoritmo in questo caso, rientra in una di queste tre categorie (nota 1):

  • Esatto : la soluzione si è dimostrata una soluzione ottimale (o esatta ) al problema di input
  • Approssimazione : è dimostrato che la deviazione del valore della soluzione non è mai più lontana dal valore ottimale di alcuni limiti predefiniti (ad esempio, mai più del 50% più grande del valore ottimale)
  • Euristico : l'algoritmo non si è dimostrato ottimale, né entro un limite predefinito della soluzione ottimale

Si noti che un algoritmo di approssimazione è anche un euristico, ma con la proprietà più forte che esiste un vincolo provato alla soluzione (valore) che produce.

Per alcuni problemi, nessuno ha mai trovato un algoritmo "efficiente" per calcolare le soluzioni ottimali (nota 2). Uno di questi problemi è il noto problema del venditore ambulante. L'algoritmo di Christophides per il problema del venditore ambulante, ad esempio, era chiamato euristico , poiché non era dimostrato che fosse entro il 50% della soluzione ottimale. Poiché è stato dimostrato, tuttavia, l'algoritmo di Christophides viene definito più accuratamente come algoritmo di approssimazione.

A causa delle restrizioni su ciò che i computer possono fare, non è sempre possibile trovare in modo efficiente la migliore soluzione possibile. Se c'è abbastanza struttura in un problema, potrebbe esserci un modo efficiente per attraversare lo spazio della soluzione, anche se lo spazio della soluzione è enorme (cioè nel problema del percorso più breve).

L'euristica viene tipicamente applicata per migliorare il tempo di esecuzione degli algoritmi, aggiungendo "informazioni di esperti" o "ipotesi plausibili" per guidare la direzione della ricerca. In pratica, un'euristica può anche essere una routine secondaria per un algoritmo ottimale, per determinare dove cercare per primo .

(nota 1) : Inoltre, gli algoritmi sono caratterizzati dal fatto che includono elementi casuali o non deterministici. Un algoritmo che viene eseguito sempre allo stesso modo e produce la stessa risposta, è chiamato deterministico.

(nota 2) : questo è chiamato problema P vs NP, ed è improbabile che i problemi classificati come NP-completo e NP-hard abbiano un algoritmo "efficiente". Nota; come @Kriss ha menzionato nei commenti, ci sono anche tipi "peggiori" di problemi, che potrebbero richiedere tempo o spazio esponenziali per il calcolo.

Ci sono diverse risposte che rispondono a una parte della domanda. Li ho ritenuti meno completi e non abbastanza accurati, e ho deciso di non modificare la risposta accettata fatta da @Kriss


Credo che la tua definizione della parola algoritmo sia troppo restrittiva. L'uso della sequenza di parole implica non parallela? Gli algoritmi paralleli vanno bene e persino usuali al giorno d'oggi. Che ne dici di risolvere un problema utilizzando una rete neurale? O uno strumento di propagazione dei vincoli? Algoritmi? Meta-algoritmi?
kriss

Il lettore ha la sensazione che i problemi di NP siano i peggiori che ci siano. Non è vero. Ci sono problemi davvero difficili che richiedono algoritmi veramente pessimi come quelli esponenziali o peggio. NP sono speciali perché se abbiamo una soluzione è facile e veloce verificarla, mentre è molto difficile trovarla se non ce l'abbiamo già. È facile controllare di avere le istruzioni corrette per uscire da un labirinto, è molto più difficile trovare l'uscita. Quindi le NP sono sia facili che difficili se potessimo provare tutte le possibili soluzioni contemporaneamente (non deterministicamente) risolverle sarebbe molto semplice ... ma non possiamo.
kriss

Grazie per il feedback! Ho aggiornato leggermente il fraseggio e l'ho affrontato in modo diverso. Dal mio punto di vista, la propagazione dei vincoli è una tecnica per avvicinarsi a qualcosa, ma non è ancora un algoritmo che descrive come arrivare passo passo alla soluzione descritta nella propagazione dei vincoli. Ovviamente hai ragione riguardo alle classi di expspace e "peggio", ho aggiunto una nota anche su questo. BTW: si prega di scrivere NP-Complete e / o NP-Hard completamente, poiché il sottoinsieme di NP contiene anche problemi risolvibili in modo "efficiente", che non sono (si suppone siano) della stessa classe.
Joost

Ovviamente hai ragione avrei dovuto scrivere NP-Complete. Colpa mia.
kriss

È molto meglio di come lo chiama uno dei miei colleghi: NP-ness (che suona semplicemente orribile e un po 'disgustoso ...)
Joost

6

In realtà non credo che ci sia molto in comune tra loro. Alcuni algoritmi utilizzano l'euristica nella loro logica (spesso per eseguire meno calcoli o ottenere risultati più rapidi). Di solito le euristiche vengono utilizzate nei cosiddetti algoritmi greedy.

L'euristica è un po 'di "conoscenza" che supponiamo sia utile per ottenere la scelta migliore nel nostro algoritmo (quando una scelta dovrebbe essere presa). Ad esempio ... un'euristica negli scacchi potrebbe essere (prendi sempre la regina degli avversari se puoi, poiché sai che questa è la figura più forte). L'euristica non ti garantisce che ti condurrà alla risposta corretta, ma (se i presupposti sono corretti) spesso ottengono risposte che si avvicinano alla migliore in tempi molto più brevi.


4

Le euristiche sono algoritmi, quindi in questo senso non ce ne sono, tuttavia, le euristiche adottano un approccio "ipotetico" alla risoluzione dei problemi, fornendo una risposta "sufficientemente buona", piuttosto che trovare una soluzione "migliore possibile".

Un buon esempio è quando hai un problema molto difficile (leggi NP-completo) per il quale vuoi una soluzione ma non hai il tempo di arrivarci, quindi devi usare una soluzione abbastanza buona basata su un algoritmo euristico, come trovare una soluzione a un problema di venditore ambulante utilizzando un algoritmo genetico.


4

L'algoritmo è una sequenza di alcune operazioni che, dato un input, calcola qualcosa (una funzione) e restituisce un risultato.

L'algoritmo può produrre valori esatti o approssimativi.

Può anche calcolare un valore casuale con alta probabilità vicino al valore esatto.

Un algoritmo euristico utilizza alcune informazioni sui valori di input e calcola un valore non esatto (ma potrebbe essere vicino all'ottimale). In alcuni casi speciali, l'euristica può trovare la soluzione esatta.


3

Un algoritmo è un insieme di istruzioni chiaramente definito per risolvere un problema, l'euristica implica l'utilizzo di un approccio di apprendimento e scoperta per raggiungere una soluzione.

Quindi, se sai come risolvere un problema, usa un algoritmo. Se hai bisogno di sviluppare una soluzione, allora è l'euristica.


2

Un'euristica è solitamente un'ottimizzazione o una strategia che di solito fornisce una risposta sufficientemente buona, ma non sempre e raramente la risposta migliore. Ad esempio, se dovessi risolvere il problema del venditore ambulante con la forza bruta, scartare una soluzione parziale una volta che il suo costo supera quello della migliore soluzione attuale è un'euristica: a volte aiuta, altre volte no, e sicuramente no ' t migliorare il tempo di esecuzione teorico (notazione big-oh) dell'algoritmo


2

Penso che l'euristica sia più un vincolo utilizzato nel modello basato sull'apprendimento nell'intelligenza artificiale poiché gli stati della soluzione futura sono difficili da prevedere.

Ma poi il mio dubbio dopo aver letto le risposte di cui sopra è "In che modo l'euristica può essere applicata con successo utilizzando le tecniche di ottimizzazione stocastica? O possono funzionare come algoritmi a tutti gli effetti se usati con l'ottimizzazione stocastica?"

http://en.wikipedia.org/wiki/Stochastic_optimization


oops !! errore di ortografia dovrebbe essere "Intelligenza artificiale"
A_tanA

2

Una delle migliori spiegazioni che ho letto viene dal fantastico libro Code Complete , che ora cito:

Un'euristica è una tecnica che ti aiuta a cercare una risposta. I suoi risultati sono soggetti al caso perché un'euristica ti dice solo come guardare, non cosa trovare. Non ti dice come andare direttamente dal punto A al punto B; potrebbe anche non sapere dove si trovano il punto A e il punto B. In effetti, un'euristica è un algoritmo in un costume da clown. È meno prevedibile, è più divertente e viene fornito senza una garanzia di rimborso di 30 giorni.

Ecco un algoritmo per guidare a casa di qualcuno: prendi l'autostrada 167 sud fino a Puy-allup. Prendi l'uscita South Hill Mall e guida per 4,5 miglia su per la collina. Girare a destra al semaforo vicino al negozio di alimentari e poi prendere la prima a sinistra. Svoltare nel vialetto della grande casa marrone chiaro sulla sinistra, 714 North Cedar.

Ecco un'euristica per raggiungere la casa di qualcuno: trova l'ultima lettera che ti abbiamo inviato. Guida in città nell'indirizzo del mittente. Quando arrivi in ​​città, chiedi a qualcuno dov'è la nostra casa. Tutti ci conoscono, qualcuno sarà felice di aiutarti. Se non trovi nessuno, chiamaci da un telefono pubblico e verremo a prenderti.

La differenza tra un algoritmo e un'euristica è sottile ei due termini si sovrappongono in qualche modo. Ai fini di questo libro, la differenza principale tra i due è il livello di riferimento indiretto dalla soluzione. Un algoritmo ti dà le istruzioni direttamente. Un'euristica ti dice come scoprire le istruzioni per te stesso, o almeno dove cercarle.


Affermare che esiste una differenza tra un algoritmo e un'euristica è come affermare che esiste una differenza tra un uccello e un pollo. L'euristica è un tipo di algoritmo.
Joost

0

Trovano una soluzione subottimale senza alcuna garanzia circa la qualità della soluzione trovata, è ovvio che ha senso per lo sviluppo dell'euristica solo polinomiale. L'applicazione di questi metodi è adatta a risolvere problemi del mondo reale o problemi di grandi dimensioni così scomodi dal punto di vista computazionale che per loro non esiste nemmeno un algoritmo in grado di trovare una soluzione approssimativa in tempo polinomiale.

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.