Non lavoro in teoria, ma il mio lavoro richiede la lettura (e la comprensione) di articoli teorici di tanto in tanto. Una volta compreso un (insieme di) risultati, discuto questi risultati con le persone con cui lavoro, molti dei quali non funzionano anche in teoria. Durante una di tali discussioni, è emersa la seguente domanda:
Quando si dice che due algoritmi dati sono "simili"?
Cosa intendo per "simile"? Supponiamo che due algoritmi siano simili se si può fare una delle seguenti affermazioni in un documento senza confondere / infastidire alcun revisore (sono benvenute definizioni migliori):
Rivendicazione 1. "L'algoritmo , che è simile all'algoritmo , risolve anche il problema "
Rivendicazione 2. "Il nostro algoritmo è simile all'algoritmo "
Vorrei renderlo leggermente più specifico. Supponiamo di lavorare con algoritmi grafici. Innanzitutto alcune condizioni necessarie affinché i due algoritmi siano simili:
- Devono risolvere lo stesso problema.
- Devono avere la stessa idea intuitiva di alto livello.
Ad esempio, parlando di attraversamento grafico, ampiezza prima e profondità prima soddisfano le due condizioni precedenti; per i calcoli del percorso più breve, breadth-first e l'algoritmo di Dijkstra soddisfano le due condizioni di cui sopra (su grafici non ponderati, ovviamente); eccetera.
Anche queste sono condizioni sufficienti? Più specificamente, supponiamo che due algoritmi soddisfino le condizioni necessarie per essere simili. Li chiameresti davvero simili, se
- hanno prestazioni asintotiche diverse?
- per una classe speciale di grafici, un algoritmo richiede tempo mentre l'altro richiede tempo?
- hanno condizioni di terminazione diverse? (ricorda, stanno risolvendo lo stesso problema)
- la fase di pre-elaborazione è diversa nei due algoritmi?
- la complessità della memoria è diversa nei due algoritmi?
Modifica: la domanda è chiaramente molto dipendente dal contesto ed è soggettiva. Speravo che le cinque condizioni precedenti, tuttavia, consentissero di ottenere alcuni suggerimenti. Sono felice di modificare ulteriormente la domanda e fornire ulteriori dettagli, se necessario per ottenere una risposta. Grazie!