• Nenhum resultado encontrado

Adaptac~ao do algoritmo de Martins, Pascoal e Santos

Tt ;arvore dos trajectos mais curtos de todos os nos parat em (NA)

Para(todo o (ij) 2A) fazercij ; tj; ti+cij colocar (NA) na sorted forward star form

p ;trajecto mais curto despara tem (NA)

P ;fpg

k ;1

Enquanto(kK) e (P 6=) Fazer

p0

;trajecto de P tal que c(p0)c(p), qualquer que seja p2P

P ;P ;fp0 g

0

; ordem do no desvio de p0

i ;0

Enquanto (i < `0) e (v0

i n~ao forma ciclo com subp0(sv0

i;1))Fazer j ;no deD(v0 i);fv0 1:::v0 igtal que (v0 ij) 2A se segue aa0 i

Se(j esta denido)Ent~ao

q0 i ;hv0 iji Tt(j) p0 i ;subp0(sv0 i) q0 i P ;P fp0 ig FimSe Se(i=`0 ;1) Ent~ao pk ;p0 k ;k+ 1 FimSe i ;i+ 1 FimEnquanto FimEnquanto

Resumidamente diremos apenas que para que isso seja poss vel devem ser segui-dos os passos indicasegui-dos no algoritmo 5.5, aproveitando apenas os trajectos deter-minados que sejam caminhos. No entanto, mais uma vez, esses trajectos podem ainda originar caminhos, pelo que, como e realizado na adaptac~ao do algoritmo de Eppstein, ao serem retirados do conjunto de candidatosP, devemos acrescentar aP todos os trajectos que poderiam ser obtidos a partir deles. De entre estes trajectos devemos seleccionar apenas aqueles que n~ao contenham o primeiro ciclo, dado que sabemos a partida que os restantes n~ao s~ao caminhos.

A adaptac~ao do algoritmo MPS para enumerac~ao dos K caminhos mais curtos entre s et numa rede (NA) e descrita no algoritmo 6.4.

6.4 Algoritmo de Katoh, Ibaraki e Mine 83

6.4 Algoritmo de Katoh, Ibaraki e Mine

O algoritmo que iremos descrever nesta subsecc~ao determina ordenadamente os K caminhos mais curtos entre dois nos de uma rede n~ao orientada, na qual cij  0, para todo o arco (ij). Este algoritmo e devido a Katoh, Ibaraki e Mine, 13], sendo, no que se segue, designado por vezes de forma abreviada por algoritmo de KIM.

Como referimos, Ts e Tt representam, respectivamente as arvores dos trajectos mais curtos de spara todos os nos e a arvore de todos os nos para t. E de notar que sendo (NA) uma rede n~ao orientada, Tt coincide com a arvore dos trajectos mais curtos de t para todos os nos, vericando-se o inverso relativamente a Ts. Ainda pelo facto de a rede ser n~ao orientada iremos, propositadamente, identicar um trajecto com o mesmo trajecto mas realizado pela ordem inversa dos nos, dizendo quehv1:::v`i=hv`:::v1i. Assim, por exemplo, o trajecto mais curto desparat ep1 =Ts(t) e p1 =Tt(s). E de notar que, no caso de existir mais do que um trajecto mais curto na rede, e sempre poss vel calcular Ts e Tt de modo que p1 = Ts(t) e p1 =Tt(s).

Como referimos, si e ti denotam, respectivamente, os custos dos trajectos Ts(i) e Tt(i), qualquer que seja i2N.

Consideremos, como exemplo, a rede representada na gura 5, considerando que todos os arcos s~ao n~ao orientados. Para s= 1 e t = 5, as arvores Ts eTt nesta rede s~ao as representadas na gura 30.

Ts Tt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... .. .. . .. . ............. . .. . .. .. . . . . . . . . . 1 0 . . .. . . . .. . . . .. ... . ............. . .. ... .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. ... . .. ............. . .. . . . . . . .. . . . . . . 2 0 .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . .. ... . .. ............. . .. .. . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. ... ... ............ ... . . . . . . . .. . . . . . . 3 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. ... . .. ............ ... . .. . . . . . . . . . . . . 2 3 .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. ... . ........... . .. . . . . . .. . . . . . . . . 4 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. ... . . ... . . . .. ... . . ... . . . . .. .. . .. .. ... . . . . . . .. .. ... . . . . . . . . .. .. ... ... . . . .. .. ... .. ... . . . .. . .. .. ... . . . .. . . . .. .. ... . . ... . . . .. ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .. ... . ......... . .. ... . .. . . . . . . . . . . 4 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . ... . .. .......... ... . .. ... . . . . . . . . . . 5 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. .. ... .. ... . .. .. ... .. ... . . .. . .. .. ... . . . .. . .. .. ... . . . . . . . . .. .. ... .. ... . . . .. .. . .. ... . . . .. . . . .. .. ... . . . . . . . . .. .. ... ... . . . .. .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. ... . ......... . .. ... . . . . . . . . . . . . . 1 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Figura 30

Para estas arvores s~ao apresentados na tabela 3 os valores de si eti, para todo o no i2N.

Dada a arvoreTs, um seu trajectoTs(i) separa-se pela primeira vez dep1 =Ts(t) num no cuja ordem denotamos por si, qualquer que seja i 2 N. Analogamente,

84 6 ENUMERAC~AO DOSK CAMINHOS MAIS CURTOS

i2N 1 2 3 4 5

si 0 0 0 0 3

ti 3 3 3 3 0

Tabela 3

ti representara a ordem do primeiro no de Tt(i) que se separa de p1. Para nos que pertencam ao trajecto p1, quer si quer ti s~ao a ordem do noi emp1.

Na tabela 4 s~ao apresentados os valores de si e ti, para todo o i2N. i2N 1 2 3 4 5

si 1 2 3 3 4

ti 1 2 3 3 4

Tabela 4

O algoritmo de KIM utiliza um procedimento para determinar o caminho mais curto entre dois nos, s e t, de uma rede (NA), que coincide em parte com um caminho, p?, mas que se separa dele antes de um certo no, v?. A partir deste procedimento podemos, por exemplo, calcular p2. Este caminho e o mais curto entre s e t diferente dep1, mas que coincide em parte com p1 (nem que seja apenas ems). Este procedimento, que denominaremos por CMC((NA),stsubp?(sv?)), e o suporte do algoritmo KIM e sera descrito mais adiante. Em seguida apresentamos uma propriedade, na qual se baseia o procedimento CMC, e que e demonstrada no lema 6.1.

Lema 6.1

Se cij >0 para todo o arco (ij)2A, ent~ao

si ti (1)

para todo o no i 2N. Alem disso, se i pertence ao trajecto mais curto de s para t em (NA), ent~ao si =ti.

Demonstra c~ao:

Seja i um no qualquer do caminho p1 ent~ao, pela denic~ao, si=ti, uma vez que ambos representam a ordem de iem p1.

Seja agoraium no qualquer da rede (NA) que n~ao pertence ap1. Suponhamos que si > ti, ou seja, que o caminho mais curto de t para i, Tt(i), se separa de p1

num no anterior ao no no qual Ts(i) se separa de p1. Para claricar, na gura 31 s~ao representados esquematicamente os caminhosp1, Ts(i) e Tt(i).

6.4 Algoritmo de Katoh, Ibaraki e Mine 85 . . . . . . . . .. . . . . ... .............. ... . . . . . .. . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . .. . . . . .. ... . ............. . .. ... . . .. . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x t . . .. . . . .. . . . .. ... . ............. . .. . .. .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i . . . . .. . . .. . . . . . .. .............. ... . .. . ... . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x s . . . . . . . . . . . . . . ... .............. ... . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . t . .................................................................................................................... ............................................................................................................................................................................................................................................. .... .... . .. .... .... ... .... ... . ... . .. .... . ... . .. .... . . . .... ... . ... . .. . ... . ... . .. .... ... .... ... . ... ... . ... . ... . . . . . . . . . . . . . . . . . . . . . . . . . ..................................................................................................................... . ................................................................ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. .... . . .. .... . ................................................................................................................................ .................................................................

Figura 31

Os tracos cont nuos desta gura representam caminhos da arvore Ts e os tracos descont nuos caminhos de Tt.

Alem do trajectoTs(i) =Ts(xs)Ts(xsi) =Ts(xt)Ts(xtxs)Ts(xsi), podemos denir em (NA) o trajecto qs = Ts(xt)Tt(xti), tambem de s para i. Uma vez que Ts(i) e o caminho mais curto de s para i, si c(qs), e ent~ao

c(Ts(xtxs)) +c(Ts(xsi)) c(Tt(xti)): (2) Analogamente,Tt(i) =Tt(ixt)Tt(xt) =Tt(ixt)Tt(xtxs)Tt(xs), e o caminho mais curto de i para t e portanto ti c(qt), onde qt =Ts(ixs)Tt(xs), logo

c(Tt(xtxs)) +c(Tt(ixt)) c(Ts(ixs)): (3) Alem disso, por hipotese,sxs =txs > txt =sxt, e dado quecuv >0, para todo o arco (uv) da rede,sxt < sxsetxs < txt. Comosxs +c(Ts(xsi)) sxs +c(Tt(xti)), ent~ao

c(Ts(xsi)) c(Tt(xti)):

Por outro lado, dado que c(Tt(ixt)) +txt c(Ts(ixs)) +txt, analogamente c(Tt(ixt)) c(Ts(ixs)):

No entanto, por hipotese a rede (NA) e n~ao orientada, portantoTs(xsi) =Ts(ixs) e Tt(ixt) =Tt(xti), donde podemos concluir que c(Ts(xsi)) = c(Tt(ixt)).

Assim, quer de (2) quer de (3),c(Ts(xtxs)) 0 o que contraria a hipotese. Admitindo a exist^encia de arcos na rede com custo nulo podemos ainda, depois de calcular Ts, transformar esta arvore, caso seja necessario, por forma a que a propriedade (1) do lema 6.1 se verique para todo o no da rede. Para isso basta rotular cada noi2N de modo a quesiseja m nimo. Por esta raz~ao vamos admitir, sem perda de generalidade, que cij 0, qualquer que seja (ij)2A.

Sendo p? o caminho mais curto de s para t numa rede (NA), com base na propriedade (1) do lema 6.1 e poss vel dividir em duas classes os caminhos de spara t numa rede (NA), que coincidem com p? ate um dado no, como e demonstrado no lema 6.2.

86 6 ENUMERAC~AO DOSK CAMINHOS MAIS CURTOS

Lema 6.2

Seja p? =hv?1:::v?`?

i o caminho mais curto entre s e t em (NA). Se existirem caminhos de s para t em (NA) que se separem de p? antes do no v?, com 2f2:::`?g, ent~ao p, o mais curto destes caminhos, e de uma das seguintes formas:

1. p=Ts(u)Tt(u), com u2N tal que su <

2. p =Ts(u)huviTt(v), onde (uv) 2 A n~ao pertence a Ts nem a Tt e com su < .

Demonstra c~ao:

Seja v? um no de p? diferente de s, e suponhamos que existe p=hv1:::v`i, caminho mais curto entresetem (NA), n~ao contendo subp?(sv?). Ent~ao o caminhopsepara-se dep?num certo novj, ou seja, subp(svj) = subp?(sv?j) e subp(svj+1) 6= subp?(sv?j+1). Como p n~ao contem subp?(sv?), ent~ao vj = v?j e anterior av? emp?, logo j < .

Consideremos agora que (uv) = (vkvk+1) e o primeiro arco do caminho p que n~ao pertence a Ts. Neste caso Ts(u) separa-se de p? em vj e assim su = k < . Ent~ao e poss vel escrever pna forma p=Ts(u)huviq, ondeq =hvj+1:::v`i.

Se o caminhohuviqde upara t estiver na arvoreTt, ent~ao coincide comTt(u) e pe da forma 1, isto e,p=Ts(u)Tt(u), comu tal que su < . Analogamente, se q estiver emTt, ent~aop=Ts(u)huviTt(v), onde (uv) n~ao pertence a Ts nem a

Tt, esu < , o que signica que pe da forma 2.

Consideremos agora queqn~ao esta emTt. Ent~aoTt(v) e o caminho mais curto de v para t logo, sendo q0 =Tt(v), conclu mos que c(q0) c(q) e p0 =Ts(u)huviq0

e um trajecto de s para t, mais curto do que p e que n~ao contem subp?(sv?). Suponhamos que p0 n~ao e um caminho, ou seja, pelo menos um dos nos de Tt(v) pertence aTs(u). Ent~ao, podemos considerar dois casos:

1. j < tv

(a) Ts(v?ju) e Tt(vv?t

v) n~ao t^em nos comuns.

Consideremos p0 =Ts(u)huviTt(v), que e do tipo 1 ou 2 e e caminho. Como c(Tt(v)) c(subp(vt)), ent~ao c(p0) c(p).

(b) Ts(v?ju) e Tt(vv?t

v) t^em nos em comum.

De entre os nos comuns, sejawo mais proximo dev?j no trajectoTs(v?ju) e consideremos p0 = Ts(w)Tt(w), que e caminho e e do tipo 1. Como c(Tt(w)) c(subp(wt)) c(subp(vt)), ent~ao c(p0) c(p).

6.4 Algoritmo de Katoh, Ibaraki e Mine 87

2. j tv

Sejawo no de Ts(v?s

vv) mais proximo de v?s

v, de entre aqueles que pertencem simultaneamente a Ts(v?s

vv) e a subp(vt).

Consideremos o caminho p0 = Ts(w) subp(wt). O no w n~ao pertence a p?, isto e, p0

6

= p?, uma vez que subp(vt) n~ao tem nos comuns com o caminho

Ts(v?s

v) = subp?(sv?s

v). Por outro lado, p0 n~ao contem subp?(sv?). Se p0 for do tipo 1 ou 2 a demonstrac~ao esta conclu da. Caso contrario podemos aplicar novamente o mesmo argumento, depois de substituir ppor p0. Uma vez que o numero de arcos de subp(wt) e nito este processo sera tambem nito. Com base neste lema podemos determinar um caminho nas condic~oes enunciadas, analisando todos os poss veis caminhos dos tipos 1 e 2, e escolhendo aquele que tiver menor custo. E de notar que p2, o segundo caminho mais curto, e o caminho mais curto de s para t em (NA) que n~ao coincide com p1 = sub1(st). Deste modo, p2

pode ser determinado a partir da aplicac~ao do lema 6.2.

Consideremos que as arvores Ts e Tt est~ao constru das, e que s~ao conhecidos os valores su e tu, para qualquer nou2N. Para encontrar caminhos do tipo 1 devem ser analisados todos os nos u da rede tais que su < . De modo analogo, para encontrar caminhos do tipo 2 devem ser analisados todos os arcos (uv), tais que su < . Assim, a determinac~ao de um caminho da forma indicada exige um numero de operac~oes da O(n+m).

A determinac~ao de um caminho entre dois dados nos, s e t, numa rede (NA), que se separa de um caminho p? antes do respectivo no de ordem pode ent~ao ser descrita como e indicado no procedimento 6.5.4, apresentado mais adiante.

O modo geral de funcionamento do algoritmo de KIM apresenta algumas seme-lhancas com o algoritmo de Yen. De facto, inicialmente s~ao calculados p1 e p2, os dois caminhos mais curtos de spara tna rede em quest~ao. E utilizado um conjunto P, cujos elementos s~ao os caminhos sucessivamente calculados e candidatos aokesimo

caminho mais curto, com k 2 f1:::Kg. Em cada passo do algoritmo e retirado de P o seu elemento com menor custo. Consideramos que no passo k, o caminho retirado e pk, com k 2f2:::Kg. A partir de pk, e realizando algumas alterac~oes na rede (NA), s~ao determinados outros caminhos, candidatos ao (k+ 1)esimo mais curto, a acrescentar ao conjunto P.

Como referimos, o primeiro caminho determinado e p1, podendo para tal ser utilizado um dos algoritmos apresentados na subsecc~ao 3.1. E de notar que, por conveni^encia, iremos considerar mais uma vez 1 = 0. Em seguida, aplicando o procedimento CMC((NA),stp1), e calculado o segundo caminho mais curto de s

88 6 ENUMERAC~AO DOSK CAMINHOS MAIS CURTOS

paratem (NA), que se separa dep1 num qualquer dos seus nos. Assim, o caminho resultante, p, e tal que p=p2 e o conjunto P passa a ser P =fpg.

Na primeira execuc~ao do cicloEnquanto, que identicamos com o segundo passo do algoritmo, e retirado o unico elemento do conjunto P, p2, e a partir deste s~ao calculados, se existirem, tr^es novos caminhos, Pa, Pb e Pc. Entre estes devera estar o terceiro mais curto, p3.

Como foi referidop1ep2, os dois caminhos determinados ate ao momento, cont^em uma parte inicial comum, desde o no inicial, s, ate ao no desvio de p2, v22 = v12. Pretendemos encontrar neste passo alguns caminhos, que n~ao p1 e p2, com o menor custo poss vel. Estes caminhos devem desviar-se de p1 e de p2 em algum dos seus nos. Assim, vamos considerar tr^es hipoteses, o que equivale a dividir os elementos de

P;fp1p2gem tr^es grupos, considerando quep3 se separa dep1 ep2 antes ou depois dev22. No segundo caso o primeiro arco dep3seguinte av22 pode coincidir com o de p1 ou com o dep2. Pode ainda acontecer quep3 se separe dep1 ep2 precisamente no no desvio,v22. Agrupando todos estes casos surgem as tr^es hipoteses mencionadas. Designemos por Pa o caminho mais curto coincidente com p2 desde s atev22+1, no seguinte ao no desvio de p2, separando-se depois por Pb o caminho mais curto coincidente comp1 (e comp2) desatev22, diferente dep2 e separando-se dep1 num dos nos seguintes av22 e por m, por Pc o caminho mais curto que se separa de p1

(e consequentemente de p2) antes dev22.

Assim, Pa = sub2(sv22+1)p e, como Pa 6=p2, ent~ao p6= sub2(v22+1t). Alem disso p deve ser o caminho mais curto de v22+1 ate t, diferente de sub2(v22+1t), pelo que pode ser calculado pela utilizac~ao de CMC((NA),v22+1t sub2(v22+1t)). Como referimos anteriormente, a concatenac~ao de dois caminhos nem sempre e um caminho. Por esta raz~ao n~ao devemos permitir que p contenha nos de sub2(sv22). Deste modo os nos de sub2(sv22) e os arcos iniciados ou terminado naqueles nos devem ser retirados de (NA).

Analogamente, Pb = sub1(sv12)p, com p6= sub1(v12t). Ent~ao ppode ser de-terminado por CMC((NA),v12t sub1(v12t)). Mais uma vez, de forma a garantir quePb seja um caminho, devem ser removidos os nos de sub1(sv12

;1). Alem disso, Pb n~ao deve coincidir com p2, pelo que deve ainda ser retirado de (NA) o arco (v22v12+1). E de notar que Pb e o caminho mais curto que coincide com p1 de sate v22+1, separando-se num dos nos seguintes, ou que coincide com p1 e p2 de s ate ao no desvio, separando-se nesse mesmo no.

Por m, Pc e tal que a sua parte inicial e diferente da parte inicial de p1 e p2, sub1(sv12) = sub2(sv22). Ent~ao Pc resulta da aplicac~ao do procedimento CMC((NA),st sub1(sv12)).

6.4 Algoritmo de Katoh, Ibaraki e Mine 89

Estes tr^es caminhos s~ao armazenados no conjunto P. Aquele que tiver o menor custo e retirado no passo seguinte do algoritmo, correspondendo ao terceiro caminho mais curto. E de notar que quer Pa como Pb ou Pc podem n~ao existir e que, se sub1(sv22) contiver apenas um ou mesmo nenhum arco n~ao faz sentido tentar determinar Pc (neste caso, se 2 = 1 ou 2 = 2).

Consideramos quePa foi determinado a partir dep2, enquanto quePb ePcforam obtidos a partir dep1, uma vez que estes s~ao os caminhos mais curtos contendo uma parte inicial coincidente com Pa, Pb ou Pc com maior numero de nos.

A forma como e tratado o caminhopk, comk 2f4:::Kg, e analoga a utilizada para p2 e e descrita em seguida.

Genericamente iremos determinar, quando muito, tr^es novos caminhos sempre que e retirado pk,kesimo caminho mais curto, para cada k 2f3:::Kg.

Consideremos que pk, com k 2 f3:::Kg, foi calculado a partir de pj, para algum j 2f1:::k;1g, ou seja, pj e o caminho mais curto para o qual se verica subk(svkk) = subj(svjk) e vkk+1 6=vj

k+1.

Designemos por Wr, com 1 r K, o conjunto das ordens dos nos desvio de caminhos pk, r < k K, determinados a partir de pr.

Seja = minf 2 Wj : k < `jg a menor ordem de um no desvio de um caminho calculado a partir de pj, superior a k isto e, a ordem do no desvio mais proximo e seguinte a vkk, dos caminhos calculados a partir de pj.

Seja ainda = maxf 2 Wj : j < < kg a maior ordem de um no desvio de um caminho calculado a partir de pj, inferior a k isto e, a ordem do no desvio mais proximo e anterior a vkk, dos caminhos calculados a partir de pj.

A partir de pk s~ao calculados, quando muito, tr^es novos caminhos:

 Pa, o caminho mais curto coincidente com pk de s ate vkk+1, e que se desvia depois

 Pb, o caminho mais curto coincidente com pj de s ate vkk, e que se desvia depois deste no mas antes de vk

 Pc, o caminho mais curto coincidente com pk e pj de s ate vk = vj

, e que se desvia antes de vkk.

Assim, estes tr^es caminhos s~ao, Pa = subk(svkk+1)p, onde pe determinado por CMC((N

0A

0),vkk+1tsubk(vkk+1t)) Pb = subj(svjk) p, onde p e o caminho obtido a partir de CMC((N

0A

0),vjktsubj(vjkvj)) e, por ultimo,Pc= subj(svj )

p, tal quepe resultante da aplicac~ao do procedimento CMC((N 0A

0),vj

tsubk(vj

vjk)). Por forma a que sejam determinados apenas caminhos, devem ser realizadas algumas alterac~oes na rede (NA). Assim, para calcular:

90 6 ENUMERAC~AO DOSK CAMINHOS MAIS CURTOS

 Pa devem ser removidos da rede os nos de pk anteriores e coincidentes com vkk, isto e, todos nos do caminho subk(svkk) = subj(svjk)

 Pb devem ser apagados os nos de pj, que s~ao tambem nos de pk, anteriores a vjk, ou seja, os nos do caminho subj(svj

k

;1) = subk(svkk ;1)

 Pc devem ser apagados de (NA) os nos depj e de pk, anteriores a vj

, isto e, todos os nos do caminho subj(svj

;1) = subk(svk;1).

Por outro lado, de modo a que n~ao sejam calculados caminhos repetidos, devem ainda ser realizadas outras transformac~oes na rede (NA), aquando da determinac~ao de Pb ePc. Desta forma, ao calcular:

 Pb devem ser apagados da rede os arcos da arvore constru da pelo algoritmo ate ao momento, com in cio no no vjk

 Pc devem ser apagados da rede os arcos da mesma arvore, com in cio no novj . De acordo com estas modicac~oes s~ao obtidas as redes (N

0A

0), utilizadas para na determinac~ao de Pa, Pb ePc.

Mais uma vez os caminhos calculados s~ao armazenados no conjunto P, sendo candidatos a pr, com r > k. No caso de existirem, consideramos que Pa foi deter-minado a partir depk, e quePb e Pc foram obtidos a partir depj. E ainda de notar que sempre que um novo caminho e calculado, a ordem do respectivo no desvio deve ser acrescentada a Wk, de modo a que este conjunto seja constru do ao longo do algoritmo.

O algoritmo de KIM e descrito resumidamente no algoritmo 6.5.

Em termos do numero de operac~oes realizadas, o procedimento 6.5.4 comeca por determinar as arvoresTs eTt, podendo para tal ser utilizado o algoritmo de Dijkstra apresentado na subsecc~ao 3.1, que como foi referido tem, no pior dos casos, uma complexidade da O(n2). Em seguida s~ao calculados os valores su, tu e su, para todo o u2N, o que exige um numero de operac~oes da O(n). Alem disso, como foi referido anteriormente, a pesquisa do caminho mais curto do tipo 1 ou do tipo 2 e de O(n+m). Assim, este procedimento tem uma complexidade da O(n2+m).

Relativamente ao algoritmo de KIM propriamente dito, para cada um dos K trajectos mais curtos (supondo que existem) e utilizado, no maximo, tr^es vezes o procedimento CMC, o que implica que, desprezando as operac~oes utilizadas para modicar a rede, aquele algoritmo tenha uma complexidade de O(Kn2 +Km).

Para claricar o modo de funcionamento deste algoritmo vamos em seguida apre-sentar um pequeno exemplo, onde s~ao \simulados" alguns dos seus passos, aquando

6.4 Algoritmo de Katoh, Ibaraki e Mine 91