Ricorsione Flashcards

1
Q

Una funzione ricorsiva può essere…

A

diretta o indiretta

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Una soluzione è ricorsiva se può essere espressa come…

A

S(D) = f(S(D’))
S(D_0) = S_0

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

In S(D) = f(S(D’)), S(D_0) = S_0 cosa indica l’ultima condizione?

A

Indica che ogni algoritmo deve terminare e che la ritorsione ha un numero di passi finito

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

In che modo la dimensione n dei dati si può ridurre in una chiamata ricorsiva?

A

Si può ridurre di un valore costante (decrease) o di un fattore costante (divide)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Da cosa è data la complessità nel tempo?

A

T(n) = D(n) + T(n’) + C(n)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Qual è la forma generale della complessità nel tempo di una ricorsione divide and conquer e di una decrease and conquer?

A
  • divide: T(n) = D(n) + aT(n/b) + C(n)
  • decrease: T(n) = D(n) + sum_{i = 0} ^ {a-1} (n - k_i) + C(n)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Definizione di Stack

A

ADT che supporta operazioni di push e pop, tipo LIFO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Definizione e caratteristiche di stack frame

A

Struttura dati che contiene parametri formali, viabili locali, indirizzi di ritorno della funzione, puntatore al codice della funzione. Viene creato e distrutto a ogni chiamata e se ce ne sono troppi può esserci stack overflow. Gli stack frame vengono memorizzati nello stack di sistema

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

cosa contiene lo SP

A

indirizzo del primo SF disponibile

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

come crescono gli indirizzi dello stack?

A

da maggiori a minori

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

definizione e caratteristiche di funzione tail-recursive

A

funzione in cui la chiamata ricorsiva è l’ultima operazione
- solo discesa -> più efficiente
- la chiamata successiva sostituisce la precedente
- no stack overflow
- no stack -> trasformabile direttamente in iterativa

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Caratteristiche del merge sort (no complessità)

A
  • il vettore viene diviso ogni volta al centro
  • chiamata ricorsiva nel vettore sx e dx
  • terminazione: quando il vettore ha un solo elemento -> ordinato
  • fusione dei due sottovettori (lì avviene il vero e proprio ordinamento)
  • stabile, non in loco
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Complessità del merge sort

A

libro, comunque NlogN

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

caratteristiche del quicksort (no complessità)

A
  • divisione non per forza al centro
  • partizione con pivot
  • in loco, non stabile
  • terminazione: sottovettore di un elemento
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

complessità del quick sort e della partiton

A
  • partition: theta(n)
  • quick, caso peggiore: un sottovettore di n-1 elementi e l’altro di un solo elemento, il pivot è il min o il max -> O(n^2)
  • quick, caso medio e migliore: sottovettori di n/2 -> O(nlogn)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

codice della void MergeSort(Item *A, int N) e quindi delle void MergeSortR(Item *A, Item *B, int l, int r) e void Merge(Item *A, Item *B, int l, int q, int r)

A

appunti

17
Q

codice della void QuickSort(Item *A, int N) e quindi delle void QuickSortR(Item *A, int l, int r) e int partition(Item *A, int l, int r)

A

appunit