• Nenhum resultado encontrado

O algoritmo descrito gera as extensões lineares de acordo com um ca minho hamiltoniano em

para := 1, , NMovBDir faça ,

13 O algoritmo descrito gera as extensões lineares de acordo com um ca minho hamiltoniano em

Prova : Para provar este t eorema, primeiro a afirmativa abaixo.

Seja = {x;, y;) = {a;, a extensão linear corrente em E x t , onde está propriamente i-ordenada. Então, para cada extensão linear

+

+

gerará cada par de extensões exatamente uma vez. Além disso, se i = 1, então a última extensão gerada será e, se i

>

a última extensão gerada será onde difere de por uma e

Prova :

A

prova procede por em i . Se i = 1, a chamada recursiva (O)

não faz nada e é induzido por (uma vez que é o primeiro par de elementos minimais encontrado; ou seja, os elementos que precedem e em uma extensão propriamente 1-ordenada de induzem necessariamente uma ordem total em

É

fácil verificar que o procedimento da figura V1.6, quando retiradas suas chamadas recursivas e quando simplesmente reverte o sinal da extensão corrente, segue exatamente o caminho mostrado na figura VI.3 (ou o caso um pouco modificado, quando é Neste caso, acha um caminho hamiltoniano que leva de a em onde é o 2B-poset

+

Se i

>

1 assumimos, sem perda de generalidade, que o sinal da extensão cor- rente quando na chamada de é

"+".

Então, existem a,@, tais que

= onde = pois está propriamen-

te i-ordenada. Pelo modo como os pares de elementos minimais foram selecionados, podemos garantir que induz o poset b;), onde pode ser vazio. Como já men- cionado, a estrutura básica do algoritmo ao se retirar suas chamadas recursivas segue o caminho hamiltoniano de um 2B-poset indicado na figura VI.3, onde o procedimen-

to transpõe e e Deste modo, geramos todas

as extensões em

+E

y)),

todas propriamente i-ordenadas.

Ao passo que cada extensão = (ou = onde

E

E

(x; y;

+

y), é gerada, - 1) é chamada em

($I

1

).

Pela hipótese de

indução, esta chamada gera (ou respec-

tivamente), partindo de e terminando em se i

>

2, ou terminando em se i = 2. Como o número de vértices do produto de um grafo com uma aresta é sempre par, teremos um número par de chamadas a - 1). Assim, se i

>

2, o sinal da final gerada permanece inalterado, enquanto se i = 2, é

a ordem relativa entre e na permutação final que permanece inalterada.

A

u- nião sobre todos os nos dá

u

Sejam a e b, e respectivamente, e suponhainos que a rotina de inicialização seguida da seqüência de chamadas

foram aplicadas sobre Pela afirmativa que acabamos de provar e pelo fato que a extensão inicial definida pelo algoritino estar propriamente a chamada a GerExt gera as extensões de E ( P

+

ab), achando um caminho harniltoniano em G ( P

+

ab)

x

então a e b são transpostos e as extensões de

+

ba) são geradas segundo um caminho hamiltoniano em G(P

+

ba) (é válido ressaltas que e ba) não são necessariamente isornorfos). Assim, um caminho hamiltoniano é encontrado também cada extensão de

é gerada uma única vez segundo este caminho e o fica provado.

Análise de Complexidade Se mantemos a inversa do vetor E x t , podemos trivialmente implementar os procedimentos M o v e e assim como a Dir

,

em tempo constante. Cada chamada de Move e exto gera uma nova extensão linear de Cada iteração dos do procedimento GerExt gera, portanto, uma nova extensão.

A

cada extensão gerada no nível i, uma chamada a

- 1) é efetuada. Quando i 0, chamamos GerExt recursivamente sem que

nenhuma nova extensão seja gerada dentro desta chamada. Mas isto ocorre somente uma vez por extensão, não contribuindo para um aumento da ordem de complexidade. Ainda temos uma chamada a - 1) para cada chamada

,

i

>

0,

que também não gera nenhuma nova extensão. Veremos agora que mesmo estas chamadas ficam bem "distribuídas", quando consideramos o tempo médio de geração por extensão.

Modificaremos um pouco o algoritmo para que possamos provar sua complexidade linear. Ao invés de reconhecer a geração de uma nova extensão a cada chamada de Move ou façamos isto dentro de cada chamada Não é difícil concluir que a alteração feita não acarreta mudança real no algoritmo nem em sua complexidade, uma vez que a cada nova extensão linear gerada no nivel i, teremos

uma seqüência de chamadas de para variando de i -

1

a 0, que não gera nenhuma nova extensão. Agora, analisemos a árvore de computação referente à exe- cução deste algoritmo, onde cada nó interno corresponde a uma chamada recursiva de (i), i

>

O, e cada folha corresponde a uma chamada de (ou a uma nova extensão linear gerada, se preferir). A quantidade tot de computação envolvida pode ser dividida de modo que cada nó da árvore receba uma quantidade constante de computação. Analisemos esta última afirmação : dentro de cada cha- mada a

,

i

>

0, temos uma quantidade fixa de associada mais uma quantidade que varia com o número de iterações de cada loop desta chamada. Mas, a cada iteração de um loop em corresponde uma nova chamada a

- ou seja, a mais um nó na árvore.

Observemos que cada chamada i

>

0, gera ao menos duas chamadas a - 1). Então, cada nó interno da árvore possui ao menos dois filhos e o

número de folhas da árvore é maior que o número de nós internos. f o número de folhas desta árvore, que sabemos ser igual ao número de extensões em

Daí segue que a quantidade total de computação é f , onde k é uma constante. Se só as extensões positivas de temos um algoritmo de tempo médio constante para gerar as extensões de

E (P) ,

que leva, em média por extensão, duas vezes o tempo necessário para se gerar uma extensão de

E (7').

VI.3

Gerando as Extensões com Atraso Dois

Nesta seção, mostraremos como modificar o algoritmo de modo que cada duas ex- tensões sucessivamente sempre difiram por uma ou duas transposições ad- jacentes. Antes, mostraremos a existência de uma seqüência das extensões tais que extensões sucessivas difiram por no máximo três transposições. Deste modo, estare- mos contribuindo com mais um conjunto de objetos cuja geração define algum código de Gray (ver capítulo

Se a e são extensões de por denotaremos a distância (comprimento do menor caminho) entre a e em e por a distância correspondente em Uma ordenação

,

. . . ,

das extensões de tem atraso se

O i

<

onde = Então, objetivo é mostrar a existência uma ordenação com atraso 2 em Ainda mais, que esta ordenação

pode ser encontrada tempo médio constante.

A

existência de uma ordenação com atraso 3 não é difícil de se mostrar.

Se G é um grafo, por Gk denotaremos o grafo com mesmo conjunto de vértices que G, mas onde existe uma aresta para cada par de vértices entre os quais existe um caminho de comprimento em G. Em outras palavras, se é a matriz de incidência de

G,

então é a matriz de incidência de Gk, onde as operações consideradas são binárias. G3 é O cubo de

G

e G2, O quadrado. Um resultado de

Sekanina mostra que o cubo de todo grafo conexo é hamiltoniano. Como sempre é conexo, é hamiltoniano e uma ordenação das extensões de com atraso 3 existe.

Infelizmente, o resultado que temos com relação ao quadrado de um grafo G não é tão forte quanto o citado para G3, não sendo para provar a existência de uma ordenação com atraso 2. Fleischner obteve que o quadrado de todo grafo

é

Um grafo está na classe

t)

se possui um ciclo (não simples) que visita cada vértice do grafo pelo menos s vezes e no máximo

t

vezes. (Veja

Assim, 1) é a classe dos grafos hamiltonianos. Observemos que, se G é hamiltoniano, então G E - basta consideras o caminho resultante ao se identificar as duas cópias de

G.

Portanto, o 12 diz está em

Em geral, estes grafos não são hamiltonianos.