"Induttivamente" e "ricorsivamente" hanno significati molto simili?


11

"Induttivamente" e "ricorsivamente" significano molto simili?

Ad esempio, se esiste un algoritmo che determina un vettore n-dim determinando i suoi primi componenti k + 1 in base alla determinazione dei suoi primi componenti k, ed è inizializzato con il primo componente, chiameresti che funzioni in modo ricorsivo o induttivo? Ho usato "ricorsivamente", ma oggi qualcuno l'ha detto "induttivamente".


Questo articolo su Induction and Recursion lo riassume bene, ma l'essenza è che sono strettamente correlati; una dimostrazione matematica dell'induzione può essere scritta come un algoritmo ricorsivo.
Merbs,

Induttivamente di solito significa ricorsivamente da a , quindi ricorsivamente è l'avverbio più generale. nn+1
Yuval Filmus,

Che tipo di ricorsivo non è induttivamente, @YuvalFilmus?
Tim

@YuvalFilmus: questa è una nozione molto limitata di induttivo.
Dave Clarke,

Per me significano la stessa cosa fuori contesto. In un contesto specifico, potrebbero significare cose diverse.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


6

No , ma non per i motivi forniti da altre persone. La differenza tra ricorsione e induzione non è che la ricorsione è "dall'alto verso il basso" e l'induzione è "dal basso verso l'alto". L'induzione è isomorfa a qualcosa chiamato "ricorsione primitiva", ma, in generale, la ricorsione è strettamente più potente dell'induzione .

La distinzione tra top-down e bottom up è banale: qualsiasi programma ricorsivo primitivo "top-down" può essere convertito meccanicamente in qualcosa di "bottom-up". In effetti, qualsiasi prova per induzione può essere trasformata in un programma ricorsivo. Nel quadro del calcolo delle costruzioni induttive, se vuoi dimostrare che ogni numero naturale è froopulous, lo scriveresti come una funzione che costruisce una prova che n è froopulous facendo una chiamata ricorsiva per costruire una prova che n- 1 è froopulous.

Il fattore chiave dell'induzione è che le cose sono definite in termini di cose più piccole e "toccano il fondo" dopo molti passaggi. I numeri naturali sono induttivi perché ogni naturale è o 0, o il successore di un naturale più piccolo. Gli elenchi sono induttivi perché ogni elenco è vuoto o può essere suddiviso ("spiegato") in un elemento e in un elenco più piccolo.

A volte i programmi ricorsivi non sono scritti in termini di cose più piccole. Ad esempio, prendi questa funzione Collatz:

fun collatz(n) 
   if n <= 1
      return 0;
   else if n % 2 == 0
     return 1 + collatz(n / 2)
   else
     return 1 + collatz(3 * n + 1)
end

Questa funzione non va né dall'alto verso il basso né dal basso, e non è quindi induttiva rispetto ai numeri naturali.

Potrebbe esserci un ordine per trattarlo induttivamente, ma per la maggior parte delle cose semplicemente non c'è modo. Le funzioni su flussi infiniti sono un ottimo esempio. In effetti, i flussi sono l'esempio prototipo di un tipo "coinduttivo".

Le "Basi pratiche per i linguaggi di programmazione" di Bob Harper, disponibili gratuitamente online, hanno una buona introduzione ai tipi induttivi, coinduttivi e ricorsivi.


2

Per me è soprattutto una questione di punti di vista. Se definisco gli oggetti in base a uno più piccolo, lo faccio induttivamente, in modo che sia dal basso verso l'alto. Se risolvo un problema scomponendolo in pezzi più piccoli che vengono risolti nello stesso modo, lo chiamo ricorsione, cioè dall'alto verso il basso.

(modifica) PS. Vedi una domanda simile nel nostro dipartimento gemello di matematica, Definizione ricorsiva vs. induttiva . Cito dalla risposta di Carl Mummert:

La mia migliore descrizione è che la "definizione induttiva" è più comune quando definiamo un insieme di oggetti "dal nulla", mentre la "definizione ricorsiva" è più comune quando definiamo una funzione su una raccolta di oggetti già esistente.

Ma soprattutto:

non vale la pena perdere il sonno


quindi "ricorsione = dividi e conquista", quale dapprima dall'alto verso il basso e poi dal basso verso l'alto?
Tim

1

No, non sono gli stessi. E hai ragione (suppongo dell'algoritmo che stai descrivendo): è ricorsivo.

Il motivo è la definizione di entrambe le parole, che puoi leggere in un dizionario o Wikipedia.

L'induzione (supponendo "induzione matematica") riguarda in particolare la dimostrazione che tutti i casi di un argomento sono veri.

La ricorsione riguarda specificamente un processo che può essere ripetuto in qualche modo all'interno dello stesso processo.

RE: risposte di altre persone:

Dopo aver visto le risposte di altre persone, posso capire perché c'è confusione: quando definiscono strutture di dati, funzioni e linguaggi alcuni teorici sembrano usare "induttivo" e "ricorsivo" in modo confuso (vedere i commenti a questa domanda). Non penso che la risposta di Koppel (anche con i voti più alti attuali) rifletta davvero quella confusione. Dato che stiamo parlando di un algoritmo, non direi che ci sono "algoritmi induttivi"; Penso che sia una categorizzazione non necessaria.


L'induzione non riguarda solo le prove. Lo usi anche per definire induttivamente strutture ricorsive (strutture dati, lingue, ecc.)
hugomg

@missingno Fornisci una fonte per quella definizione.
Tom,

Un esempio che mi viene in mente è qui : "Il linguaggio di \ mathcal {L}, noto anche come il suo insieme di formule, formule o wffs ben formati, è induttivamente definito dalle seguenti regole:"
hugomg

@missingno che porta a questa pagina di Wikipedia in cui penso che ci sia un uso ridondante e confuso della parola "induttivo", essenzialmente utilizzato come "ricorsivo"
Tom

Per favore, non farmi cercare altri esempi. Anche se potresti non essere d'accordo, è sicuramente un linguaggio molto comune e puoi trovarlo anche in molti libri se lo cerchi. E non è come se qualcuno avesse modificato di proposito l'articolo di Wikipedia per dimostrare il mio punto di vista ...
hugomg
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.