TECNICA LABELING Proprietà del limite superiore
Transcript
TECNICA LABELING Proprietà del limite superiore
TECNICA LABELING , definisco [ ] e [ ] informazioni variabili durante l’esecuzione degli algoritmi: [ ] è detta “stima di cammino minimo” ed è un valore che, in un dato momento dell’esecuzione degli algoritmi, sarà la stima migliore del valore reale ( ). Si fa in modo che valga sempre: [ ] ( ). Se l’algoritmo è corretto, alla fine varrà anche [ ] ( ); [ ] è il predecessore di in un cammino minimo da a , secondo le informazioni raccolte fintanto che l’algoritmo è in esecuzione; Tutti gli algoritmi che si rifanno alla metodologia labeling useranno in qualche modo le seguenti due procedure: INITIALIZE-SINGLE-SOURCE ( , for each do [ ] [ ] NIL [ ] ) RELAX ( , , ) [ ] if [ ] [ ] [ ] [ ] ( ) then ( ) Proprietà del limite superiore ( ) grafo, Siano funzione peso, Allora, dopo aver eseguito INITIALIZE-SINGLE-SOURCE( , ), dopo l’applicazione di un qualsiasi ( ) numero di operazioni RELAX, varrà la condizione: [ ] Dim. Per induzione su , numero di operazioni RELAX eseguite dopo la INITIALIZE-SINGLE-SOURCE. Passo base: , cioè non abbiamo ancora mai eseguito alcuna RELAX; grazie alla INITIALIZE-SINGLE-SOURCE, per , se esiste un ciclo di peso negativo raggiungibile da vale: [ ] [ ] ( ) ( ) mentre, se non esiste un ciclo di peso negativo raggiungibile da vale: [ ] [ ] ( ) ( ) { } vale: [ ] ( ), che è banalmente vera per Passo induttivo: valga la tesi per un generico e dimostriamo che vale anche per , cioè valga ) operazione RELAX, che avrà forma RELAX( , , ). È pacifico constatare dopo la ( che l’unico valore modificato (se lo sarà) da RELAX( , , ) è [ ], quindi ci concentriamo su di ( ). Applico RELAX( , , ): esso; per ipotesi induttiva, dopo operazioni valeva [ ] [ ], se non è stato aggiornato il valore la proprietà banalmente vale per [ ]; se fosse stato ( )[ ] ( ) e ora vale: aggiornato, significa che prima dell’operazione valeva ( ) [ ] ( )[ Ma per ipotesi induttiva, valeva anche ( )[ ] ( ) Ma per la proprietà triangolare si ha ( Compattando gli estremi si ha: ( ) ( ] )[ ] ( ) ( ( )[ ] ( ) ( ), e si ha la catena di implicazioni: ( )[ ] ) ( ) ( ) ( )[ ] ( ) ( ) ( ) )[ ] . ( )[ ] Proprietà della convergenza Sia grafo a cui ho applicato INITIALIZE-SINGLE-SOURCE ed una sequenza qualsiasi di operazioni RELAX. ( ) ed esiste un cammino di peso minimo Se prima di applicare la nuova RELAX( , , ) vale [ ] ), allora applicando RELAX( , , ) varrà [ ] ( ). che da giunge a e comprende l’arco ( Dim. Ci poniamo nella condizione successiva all’applicazione della RELAX; per la proprietà triangolare [ ] [ ] ( ), ma per ipotesi era [ ] ( ), quindi: [ ] ( ) valeva: [ ] [ ] ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) [ ] ove: ( ) : perché è il peso del cammino ( ) : perché è di peso minimo ( ) : per la Proprietà del limite superiore [ ] ( ) [ ], cioè { [ ] ( ) ( ) . Compattando gli insiemi si ha [ ] } [ ] ( ) Presentiamo, ora, un algoritmo basato sul metodo LABELING. Supponiamo che non ci siano vincoli né sul valore dei pesi, né sulla topologia (presenza di cicli), né sull’orientazione degli archi. BELLMAN-FORD ( , , ) INITIALIZE-SINGLE-SOURCE ( , for 1 to | |-1 do ) for each ( do RELAX ( , , ) ) for each ( do [ ] [ ] ( ) then if return false return true ) (| |) (| |) //rileva la presenza di cicli di peso negativo (| | | |); l’ultimo ciclo ha I primi due cicli annidati hanno una complessità totale di (| |) (| |) (| |): (| | | |) (| |) (| | | |), e nel caso complessità in totale, l’algoritmo ha complessità (| | ) diventa (| | | | ) (| | ). Si raggiunge tale complessità cubica peggiore, quando | | anche nel caso in cui usano matrici di adiacenza per descrivere il grafo. Prop. 〈 〉 cammino minimo per andare da a , cioè ( ) ( ). Sia Allora dopo la -esima iterazione del ciclo esterno dentro cui si fanno le | | RELAX, il nodo è andato a ( ). convergenza, cioè vale [ ] Dim. Per induzione su =numero di iterazioni fatte. 〈 〉 〈 〉. Banalmente Passo base: è andato a convergenza, poiché la procedura ( ) di inizializzazione ha posto ; )-esima passata Passo induttivo: siano andati a convergenza i nodi ; provo dopo l’( di RELAX, anche sarà andato a convergenza; nella nuova passata, infatti, applicherò, fra le altre, anche RELAX( , , ). Siccome è presente in un cammino ottimo che va da a ] ( ) . , allora per la proprietà di convergenza varrà dopo che [ Prop. Se contiene cicli di peso negativo raggiungibili dalla sorgente, allora l’algoritmo di BELLMAN-FORD restituisce false, altrimenti true. Dim. Il grafo non contiene cicli di peso negativo raggiungibili da : allora subito dopo le numerose ( ) RELAX del doppio ciclo annidato, varrà: [ ] . [ ] [ ] ( ) ( ) ( ) ( ) Ma per la proprietà triangolare vale anche: ( ) ( ) ( ) Quindi vale la catena di diseguaglianze: [ ] ( ) ( ) ( ) ( ) ( )), estendo la catena: E poiché anche , come tutti i nodi è andato a convergenza ( [ ] [ ] [ ] ( ) ( ) ( ) ( ) Compattando la catena si ha: [ ] [ ] ( ) Cioè, non vale mai [ ] [ ] ( ) E siccome, quella è l’unica condizione, verificata la quale, si entra nel ramo then dell’if per restituire false, non restituirò mai false, supererò con successo il ciclo, e restituirò infine true; Il grafo contiene cicli di peso negativo raggiungibili da . Scegliamone uno e chiamiamolo : 〈 〉 ove ( ) . ( ) ∑ (per ipotesi). Per assurdo, supponiamo che l’algoritmo restituisce true. Questo vuol dire che tutti i test sono falsi [ ] ( ) ( ) nell’ultima parte, quindi: [ ] . Essendo vero per tutti gli archi, sarà vero a maggior ragione per gli archi appartenenti al ciclo di peso negativo . Quindi: [ ] [ ] ( ) Ora notiamo che vale la seguente implicazione: ∑ ( (∑ [ ]) ) (∑ ( )) (∑ [ ]) ∑ [ ] Ma: (∑ [ ]) Per ipotesi assurda: [ ∑ [ ] ] (∑ ( [ ] ∑( [ ] ∑( [ ] )) ( ( )) ), il che implica: ( )) ∑ [ ] ∑ [ ] ∑ [ ] Rimaneggiando opportunamente l’indice della sommatoria al primo membro e compattando si ha: (∑ [ ]) [ ] ∑ [ ] ∑ [ ] ∑ [ ] (∑ [ ]) Compattando ancora otteniamo: (∑ [ ]) [ ] (∑ [ ]) [ ] [ ] giungendo, infine, a: Sottraiamo a entrambi i membri la stessa quantità ∑ [ ] [ ] [ ] [ ] . Assurdo! Poiché era [ ]