[Algoritmo] Divide et impera
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
Ma dove sono le chiamate ricorsive?
"Cronovirus":
Ma dove sono le chiamate ricorsive?
E solo un esempio voglio solo sapere come si applica l'algoritmo
Quindi vuoi solo sapere come si fa l'analisi di un algoritmo divide et impera?
"Cronovirus":
Quindi vuoi solo sapere come si fa l'analisi di un algoritmo divide et impera?
si
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.
"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
Salve,
come si applica a questo caso l'algoritmo divide et impera? e se ci fosse un ciclo for all'interno?
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?
Abbi pazienza.. non puoi pretendere che qualcuno si metta a leggere codice illeggibile e senza alcun senso
"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?
Divide et impera è per definizione un particolare approccio alla programmazione e il tuo codice non la usa. Spero di aver risposto alla tua domanda