[Algoritmo] Divide et impera

signfra
for l=1:length(v1)


for l2=1:length(v2)




if j2==1 && length(v2)>=2
            
              

               
               
               
               for k1=1:20
              
              if  v1(k1)==v2(l2)
                  
                 
                  for k2=1:10
                      
                      if v1(k2)==v2(l2)
                            
           
                      end
                  end
                  

             
              end
               end
          
            




      
             
      
      


      if .....
      
        if  ........
          
          
          
          
          
        
      
        else
          
          
            
            
        end
      
      else 
          
          
          
      end
      



                   end
             
                    


Allora provo a calcolare il costo:


costo=O(length(v1)*[length(v2)*20*10]

la seconda parte lo vorrei risolvere con divide et impera ma non so individuare la n/b la a sarebbe pari ai sotto problemi che risulta pari a 2

Risposte
Cronovirus
Ma dove sono le chiamate ricorsive?

signfra
"Cronovirus":
Ma dove sono le chiamate ricorsive?


E solo un esempio voglio solo sapere come si applica l'algoritmo

Cronovirus
Quindi vuoi solo sapere come si fa l'analisi di un algoritmo divide et impera?

signfra
"Cronovirus":
Quindi vuoi solo sapere come si fa l'analisi di un algoritmo divide et impera?

si

apatriarca
Normalmente si scrive l'equazione di ricorrenza corrispondente e si calcola quindi la sua complessità a partire da quella. Ma ovviamente l'effettivo metodo usato dipende dall'algoritmo che si sta considerando.

signfra
"apatriarca":
Normalmente si scrive l'equazione di ricorrenza corrispondente e si calcola quindi la sua complessità a partire da quella. Ma ovviamente l'effettivo metodo usato dipende dall'algoritmo che si sta considerando.


per esempio





for j6=1:length(nodi_visitati)

            [n1,m1]=size(self.vettore_percorso);         
                 
                       
                       
                       %possibili sorgenti
                       
                                   
                       
                       conta_edge=0;
                       
                       conta_nodi_sorgenti=0;

                       

                        %dimensione riga e colonna 
                               
                       
                        for j2=1:m1
                           
                           
                           
                           
                         %verifico che la sorgente esiste nel
                         %vettore_percorso
                           
                       if nodi_visitati(j6)==self.vettore_percorso(n1,j2)
                         
                           
                           
                           

                         
                         
                          %se esiste prelevo tutte le destinazioni del nodo
                       
                          if nodi_visitati(j6)~=vb
                         
                       edges2=ver.connectedEdges(edges,nodi_visitati(j6));

%copio in un vettore in una nuova riga e nella stessa colonna il valore
%della destinazione


display(nodi_visitati(j6));
display('edg');


display(edges2);
                          end

%tutte le destinazioni le imposto sorgenti

                                for j8=1:length(edges2)
                   
                                         
                            conta_nodi_sorgenti=conta_nodi_sorgenti+1;
                           nodi_sorgenti(conta_nodi_sorgenti)=edges2(j8);
                               
                         
                           
                           for k=1:vertices(1).n_vertices
                       
                       
                        for j=1:length(nodi_visitati_)
                       
                        if self.s.vertice(k)==nodi_visitati_(j)
                           
                           
                            if strcmp(self.s.colore(k),colore_black)
                               
                               
                                display('nodo gia visitato');
                               
                                nodi_visitati_(j)=0;
                               
                               
                               
                            end
                           
                           
                            if strcmp(self.s.colore(k),'WHITE')
                               

                               conta_impo_colore=1;
                             
                               
                               %impostazionen colore a grigio
                               
                               
                                self.s.colore(k)=colore_grey;
                               
                                vertice.colore(k)=colore_grey;
                               
                               
                               
                               
                                %incremento del tempo di 1
                                self.time=self.time+1;
                               
                               
                               
                               
                                self.d_time=self.time;
                               

                               
                                    vertice.d_time=self.time;
                                     
                               
                                %impostazione del colore a nero
                                self.s.colore(k)=colore_black;
                               
                               
                                vertice.colore(k)=colore_black;
                               
                               
                                %incremento del tempo di 1
                               
                                 self.time=self.time+1;
                               
                               
                               
                               
                                vertice.f_time=self.time;
                               
                               
                                display('tempo1');
                                display(self.time);
                               
                               
                               

                               
                         
                               
                               
                            end
                           
                           
                        end
                        end
                       
                       
                        %b1=O(1)+sommatoria
                        %length(nodi_visitati)(3O(1)+O(1)+11O(1))
                    end
                           
                           
                         
                                end
                                             
                                             

                       
                       
                       

                         

                           
                       
                         
                                         
                           
                           [n2,m2]=size(self.vettore_percorso);         

                               %scorro le righe
                                       
                                   
                                       %copio i valori in una nuova colonna
                                       %dei valori in quanto esisite un
                                       %nuovo percorso
                                                                                                                   
                                       for k=1:n2

                                      for j=1:length(edges2)
                                   
                                         self.vettore_percorso(k,m2+j)=self.vettore_percorso(k,j2);

                                           self.vettore_percorso(n2+1,m2+j)=edges2(j);

                                          end
                                         
                                     
                                       
                                                     

                                         
                                     
                                     
                                         
                                         
                                           
                             
                       
                           
                       
                           
                       
                       
                     
                       end
                       
                       
                             
                               
                               
                       
                       
                       
                        end
                       
 
                       
  end
 
 
                                    end

                       
                           
                           
                                   
                           
  end
                       


signfra
Salve,


if h_cappelletto(1,j2)<=sum(h_senza_cappelletto(1,1:j2))
      
        if  h_cappelletto(1,j2)+sum(g_cappelletto(1,1:j2))<=sum(gn0_senza_cappelletto(1,1:j2))+hn0_senza_cappelletto(1,j2)
          
          
          display('condizione su h è verificata al passo');
          
          display(conta_passo);
          
          condizione_h=1;
          
          
        
      
        else
          
            
            display('condizione su h non è stata verificata');
            
            condizione_h=0;
            
            
            nodi_adiacenti2(j4)=[];
        end
      
      else 
          
          
          display('condizione su h non è stata verificata');
          
          
      end
      
      
      


come si applica a questo caso l'algoritmo divide et impera? e se ci fosse un ciclo for all'interno?

Cronovirus
Abbi pazienza.. non puoi pretendere che qualcuno si metta a leggere codice illeggibile e senza alcun senso

signfra
"Cronovirus":
Abbi pazienza.. non puoi pretendere che qualcuno si metta a leggere codice illeggibile e senza alcun senso

devo per forza calcolarlo

Salve, ha ragione partiamo dalle basi



 for j6=1:length(nodi_visitati)
                                     
                                     
  vertices.conta_righe=vertices.conta_righe+1;

     

     %copio solo una alla volta la prima sorgente
     
     
         
     if vertices.conta_righe==1 
         
         
         
         for j=1:length(nodi_visitati)
       
             
             
   self.vettore_percorso(vertices.conta_righe,j)=nodi_visitati(j6);

        display(self.vettore_percorso);
                          
                                 
     end
                        
     end
     
     
        
     %Costo:O(length(nodi_visitati)^2
                             
     
     
     [n1,m1]=size(self.vettore_percorso);
     
     
   for j2=1:m1

       
if nodi_visitati(j6)==self.vettore_percorso(n1,j2)
 if self.vettore_percorso(n1,j2)~=vb
      

        for j=1:length(edges3)
                         
     [n2,m2]=size(self.vettore_percorso);

           
             for k=1:n1
                                   
            self.vettore_percorso(k,m2+j)=self.vettore_percorso(k,j2);

             
             end
                                      
 self.vettore_percorso(n2+1,m2+j)=edges3(j);

                                 
             end  
          
       end
                     %Costo 2:O[n1+length(edges3)]*m1
               


e se volessi applicare divid[size=200]E[/size] et impera?

Cronovirus
Divide et impera è per definizione un particolare approccio alla programmazione e il tuo codice non la usa. Spero di aver risposto alla tua domanda

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.