Advertisement
akanoce

29_5_Correttezza

May 29th, 2018
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.00 KB | None | 0 0
  1. //PRE=(albero(r)ben formato, P ha dimP elementi con dimP>0)
  2. nodo* match(nodoA*r, int*P, int dimP){
  3.    
  4.     if(!r)//Caso base: Albero vuoto non ha match
  5.         return 0;
  6.    
  7.     nodo* sx = match(r->left,P+1,dimP-1);
  8.     nodo* dx = match(r->right,P+1,dimP-1);
  9.    
  10.     if(*P == r->info)
  11.         if(dimP == 1)
  12.             return new nodo(r,0); //Caso base --> 1 solo nodo da matchare e l'ho appena matchato
  13.         else
  14.         if(sx)
  15.             return new nodo(r,sx);
  16.         else
  17.             if(dx)
  18.                 return new nodo(r,dx);
  19.    
  20.    //Se sono qui --> No match
  21.    sx = match(r->left,P,dimP);
  22.    dx = match(r->right,P,dimP);
  23.    
  24.    if(sx)
  25.     return sx;
  26.    else
  27.     if(dx)
  28.       return dx;
  29.    
  30.    
  31.     return 0; //Ritorna 0 se non c'è un match completo del pattern. Se arrivo qui --> non c'è match ne a sx ne a dx
  32. }
  33. //POST=(se esiste su un cammino di albero(r)un match di P,allora, restituisce una lista concatenata con dimP nodi ciascuno dei quali punta ad un nodo di albero(r) che partecipa al matchtrovato) &&(altrimenti restituisce 0)
  34.  
  35.  
  36. /* -- PROVA INDUTTIVA --
  37.  
  38. //CASI BASE
  39.  
  40. 1) if(!r) return 0;
  41.     Che è corretto dato che non esiste un match tra una lista e un albero vuoto
  42.    
  43. 2)if(dimP == 1 && r->info == *P) return new nodo(r,0);
  44.     CHe è corretto dato che il pattern contiene solo un'elemento e l'ho appena trovato se sono in questo caso, Ritorno quindi un singolo nodo
  45.    
  46. //CASI INDUTTIVI
  47.  
  48. 1)
  49.     if(match(r->left,P+1,dimP-1) && r->info == *P) return new nodo(r,match(r->left,P+1,dimP-1)
  50.         Sto matchando un elemento, e il prossimo match è a sinistra, quindi creo un nodo che ha come info il nodo corrente e come next il prossimo match che sarà a sx
  51.     //PRE_ric=(albero(r->left)ben formato, P+1 ha dimP-1 elementi con dimP>1)
  52.        
  53.         Pre_ric --> POST_ric , dato che fa proprio quello descritto sopra
  54.     //POST_ric=(se esiste su un cammino di albero(r->left)un match di P+1,allora, restituisce una lista concatenata con dimP-1 nodi ciascuno dei quali punta ad un nodo di albero(r->left) che partecipa al match trovato) &&(altrimenti restituisce 0)
  55. 2)
  56.     if(match(r->right,P+1,dimP-1) && r->info == *P) return new nodo(r,match(r->right,P+1,dimP-1)
  57.         Sto matchando un elemento, e il prossimo match è a destra, quindi creo un nodo che ha come info il nodo corrente e come next il prossimo match che sarà a destra
  58.     //PRE_ric=(albero(r->right)ben formato, P+1 ha dimP-1 elementi con dimP>1)
  59.        
  60.         Pre_ric --> POST_ric , dato che fa proprio quello descritto sopra
  61.     //POST_ric=(se esiste su un cammino di albero(r->right)un match di P+1,allora, restituisce una lista concatenata con dimP-1 nodi ciascuno dei quali punta ad un nodo di albero(r->right) che partecipa al match trovato) &&(altrimenti restituisce 0)
  62.  
  63. 3)
  64.     if(match(r->left,P,dimP) && r->info != *P) return match(r->left,P,dimP)
  65.         Non ho matchato l'elemento corrente, e il prossimo match è a sinistra, quindi scorro l'abero a sinistra
  66.     //PRE_ric=(albero(r->left)ben formato, P ha dimP elementi con dimP>0)
  67.        
  68.         Pre_ric --> POST_ric , dato che fa proprio quello descritto sopra
  69.     //POST_ric=(se esiste su un cammino di albero(r->left)un match di P,allora, restituisce una lista concatenata con dimP nodi ciascuno dei quali punta ad un nodo di albero(r->left) che partecipa al match trovato) &&(altrimenti restituisce 0)
  70.  
  71. 4)
  72.     if(match(r->right,P,dimP) && r->info != *P) return match(r->right,P,dimP)
  73.         Non ho matchato l'elemento corrente, e il prossimo match è a destra, quindi scorro l'abero a destra
  74.     //PRE_ric=(albero(r->right)ben formato, P ha dimP elementi con dimP>0)
  75.        
  76.         Pre_ric --> POST_ric , dato che fa proprio quello descritto sopra
  77.     //POST_ric=(se esiste su un cammino di albero(r->right)un match di P,allora, restituisce una lista concatenata con dimP nodi ciascuno dei quali punta ad un nodo di albero(r->right) che partecipa al match trovato) &&(altrimenti restituisce 0)
  78.  
  79. --- FINE DIMOSTRAZIONE INDUTTIVA */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement