Spazio delle soluzioni Flashcards

1
Q

Quali strutture dati si utilizzano tipicamente per le funzioni di calcolo combinatorio?

A

typedef struct l { int *scelte; int n_scelte; } Livello;

int *val; oppure Livello *val;
int *mark;
int *sol;

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

Principio di moltiplicazione: esempio

A

poké: 3 di una, 2 dell’altro, ecc.

32

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

Principio di moltiplicazione: codice

A

int princ_molt(int pos, Livello *val, int *sol, int n, int cnt){
int i;
if(pos >= n){
for(i = 0; i < n; i++) printf(“%d”, sol[i]);
return cnt+1;
}
for(i = 0; i < val[pos].n_scelte; i++){
sol[pos] = val[pos].scelte[i];
cnt = princ_molt(pos+1, val, sol, n, cnt);
}
return cnt;
}

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

Disposizioni semplici: esempio

A

Raggruppamento k a k, senza ripetizione
n!/(n-k)!

per esempio: quanti numeri di due cifre distinte si possono formare con 4 cifre totali?

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

Disposizioni semplici: codice

A

int dispiace_semplici(int pos, int val, intsol, int *mark, int k, int n, int cnt){ int i;
if(pos >= k){
// stampa sol
return cnt+1;
}
for (i = 0; i < n; i++){
if (mark[I] == 0){
mark[i] = 1;
sol[pos] = val[I];
cnt = disp_sempl(pos + 1, val, sol, mark, k, n, cnt);
mark[i] = 0;
}
}
return cnt;
}

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

Disposizioni con ripetizione: esempio

A

elementi k a k, non distinti

n^k;

esempio: quanti sono i numeri binari su 4 bit?
2^4

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

Disposizioni con ripetizione: codice

A

int disp_rip(int pos, int * val, int *sol, int n, int k, int cnt){
if (pos>=k){
//stampa sol
return cnt+1;
}

for(i = 0; i < n; i++){
sol[pos] = val[I];
cnt = disp_rip(pos+1, val, sol, n, k, cnt);
}
return cnt;
}

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

Permutazioni semplici: esempio

A

n!

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

Permutazioni con ripetizione: esempio

A

n!/a!B!…

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

Permutazioni semplici: codice

A

int permutazioni_semplici(int pos, int val, intsol, int * mark, int n, int cnt){
if (pos>=n){ // stampa return cnt+1;}

for (int i = 0; i < n; i++){
if (mark[I] == 0){
mark[i] = 1;
sol[pos] = val[I];
cnt = permutazioni_semplici(pos +1, val, sol, mark, n, cnt);
mark[i] = 0;
}
}
return cnt;
}

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

Permutazioni con ripetizione: codice

A

int perm_r(int pos, int *dist_val, int n_dist, int *sol, int *mark, int n, int cnt){
if (pos >= n) {
// stampa
return cnt+1;
}

for(int i = 0; i < n_dist; i++){
if(mark[I] > 0){
mark[i]–;
sol[pos] = dist_val[i];
cnt = perm_r(pos+1, dist_val, n_dist, sol, mark, n, cnt);
mark[i]++;
}
}
return cnt;
}

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

Combinazioni semplici: esempio

A

in quanti modi si possono stringere la mano 20 persone?

binomiale (20 2)

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

Combinazioni semplici: codice

A

int comb_s(int pos, int *val, int *sol, int n, int k, int start, int cnt){
if (pos >= k) {…}

for(int i = start; i < n; i ++){
sol[pos] = val[I];
cnt = comb_s(pos+1, val, sol, n, k, I+1, cnt);
}
return cnt;
}

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

Combinazioni con ripetizione: esempio

A

Date 5 gocce bianche e 5 nere, quanti colori diversi si possono formare mischiando tra loro 5 gocce prese dai due colori?

binomiale (n+k-1)/k

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

Combinazioni con ripetizione: codice

A

int comb_r(int pos, int *val, int *sol, int n, int k, int start, int cnt){
if (pos >= k) {…}

for(i = start; I < n; i++){
sol[pos] = val[I];
cnt = comb_r(pos+1, val, sol, n, k, start, cnt);
}
return cnt;
}

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

Dato un insieme I, quando i blocchi in cui è diviso sono una sua partizione?

A

Dato un insieme I e S_i sottoinsiemi ciascuno di k_i elementi, essi sono una partizione di I se:
- ogni blocco non è vuoto
- e sono tutti disgiunti
- e la loro somma dà l’insieme I

17
Q

Data la partizione di un insieme, l’ordine dei blocchi e degli elementi in essi conta?

A

NO

18
Q

Dato un insieme I, quale può essere il numero complessivo di partizioni?

A

Il numero complessivo di partizioni è definito dai numeri di Bell: 1, 1, 2, 5, 15, 52

19
Q

Quali modelli ci sono per calcolare l’insieme delle parti?

A
  1. paradigma divide et impera
  2. disposizioni ripetute
  3. combinazioni semplici
20
Q

Insieme delle parti con paradigma divide et impera, caratteristiche

A

per k = 0 viene ritornato l’insieme vuoto, per k > 0 l’insieme delle parti per k elementi è l’insieme delle parti per k-1 elementi a cui decido se aggiungere o meno il kesimo elemento -> due rami ricorsivi distinti

21
Q

Insieme delle parti con disposizioni ripetute, caratteristiche

A
  • in sol gli elementi sono o 0 o 1 p
  • bisogna scegliere se prendere il k-esimo elemento (sol[pos] = 1) oppure no (sol[pos] = 0) e per questo ci sono due rami ricorsivi distinti
22
Q

Insieme delle parti con combinazioni semplici, caratteristiche

A

c’è una funzione wrapper che chiama la funzione ricorsiva con k diverso ogni volta (k: numero degli elementi)

23
Q

Come si possono rappresentare le partizioni di un insieme?

A
  • per ogni elemento si indica il blocco a cui appartiene
  • dato ogni blocco se ne elencano gli elementi
24
Q

Numero casuale di partizioni con disposizioni ripetute

A

appunti

25
Q

algoritmo di Er

A

appunti

26
Q

Quali sono le possibilità per chiudere le ritorsioni quando si vuole una sola soluzione?

A

1) flag come variabile globale o come parametro by reference
2) funzione ricorsiva che ritorna una valore di successo o fallimento che viene testato

27
Q

cosa si intende per pruning?

A

è la riduzione dello spazio di ricerca che non porta alla perdita di informazioni o di completezza, ma che scarta a priori i riami dell’albero delle soluzioni che sicuramente falliranno, seguendo vincoli he permettano di non perdere soluzioni

28
Q

metodologie di anticipazione dei vincoli

A

non c’è una metodologia generale. tipicamente i casi sono:
- filtro statico sulle scelte: condizioni che dipendono dal problema e non dalle scelte precedenti
- filtro dinamico: dipendono da entrambe le cose
- speranza