Il caching è correlato a tutti gli altri concetti che hai menzionato, se stavi parlando di una gerarchia di concetti, il caching sarebbe il concetto genitore e la memoizzazione, alcune forme di buffering e i file di pagina sono forme specifiche di caching.
La Memoizzazione sta memorizzando i valori precalcolati e quindi li usa per cercare i valori piuttosto che spendere del tempo per ricalcolarli. (time vs space tradeoff)
Buffering Suppongo che tu ti stia riferendo a cose come IO bufferizzate, che possono essere utilizzate nel software o nell'hardware. Nel codice, è possibile utilizzare i flussi bufferizzati come in Java o C #, che manterranno una certa quantità di dati in memoria in modo che i programmi non debbano attendere l'accesso lento alla rete o al disco. Questo non è specificamente nella cache.
I buffer hardware come nei dischi rigidi memorizzano nella cache una piccola quantità di dati per un accesso rapido. Questi sono controllati da algoritmi e previsioni che, se i dati sono stati utilizzati molto di recente, saranno probabilmente utilizzati nuovamente molto presto.
I file di pagina sono un po 'diversi - è una cache, ma è principalmente per risolvere il problema di ciò che accade quando il tuo programma ha bisogno di avere molti dati in memoria, ma non abbastanza memoria per archiviare quei dati? In ambienti con molti programmi in esecuzione, sono stati creati file di pagina per risolvere questo problema che potresti avere RAM molto limitata (condivisa da tutte le app) ma molto più spazio di archiviazione che potrebbe essere utilizzato in modo trasparente per archiviare i dati del programma oltre alla RAM (ma significativamente più lento).
Tuttavia, come menzionato da Peter Smith, gli algoritmi iterativi rispetto a quelli ricorsivi non sono intrinsecamente memo- rizzati o nulla (a meno che non si stiano utilizzando costrutti o linguaggi che utilizzano la memoizzazione trasparente). Le chiamate ricorsive richiedono chiamate di funzioni esponenziali inserite nello stack e, a meno che il linguaggio / compilatore non utilizzi l'eliminazione della ricorsione di coda, questo può essere più lento e causare anche overflow dello stack.
È possibile memoizzare soluzioni ricorsive o iterative.