• Nenhum resultado encontrado

Geometria Computacional

N/A
N/A
Protected

Academic year: 2022

Share "Geometria Computacional"

Copied!
52
0
0

Texto

(1)

Geometria Computacional

Aula 16 Buscas ortogonais

Cap 5 do livro de de Berg et al.

(2)

Consultas em bancos de dados

BD com informações sobre funcionários de uma empresa:

nome, endereço, data de nascimento, salário, etc.

Exemplo de consulta: liste todos os funcionários nascidos

entre 1970 e 1975 com salário entre R$10.000,00 e R$15.000,00.

Interpretação geométrica: cada funcionário é um ponto, com data de nascimento, codificada como um número, comox-coordenada, e salário como y-coordenada.

data de nascimento salário

10.000 15.000

19700000 19759999

(3)

Consultas em bancos de dados

BD com informações sobre funcionários de uma empresa:

nome, endereço, data de nascimento, salário, etc.

Exemplo de consulta: liste todos os funcionários nascidos

entre 1970 e 1975 com salário entre R$10.000,00 e R$15.000,00.

Interpretação geométrica: cada funcionário é um ponto, com data de nascimento, codificada como um número, comox-coordenada, e salário como y-coordenada.

data de nascimento salário

10.000 15.000

19700000 19759999

(4)

Busca unidimensional por intervalo: 1D range queries

S: conjunto de n números

ABB com números deS nas folhas

Nós internos guardam máximo da subárvore esquerda.

49

23 80

10 37 62 89

3 19 30 49 59 70 89 100

3 10 19 23 30 37 59 62 70 80 100 105 Valor num nó interno divide as folhas aproximadamente ao meio.

(5)

Busca unidimensional por intervalo

Busca por números deS no intervalo[a,b]:

Busque ae b na ABB, terminando nas folhasx ey.

Exemplo: paraa=15 eb =80, terminamos com x=19 ey =82.

49

23 82

10 37 62 89

3 19 30 49 59 70 89 100

3 10 19 23 30 37 59 62 70 82 100 105

x y

Resposta: folhas entre x e y, possivelmente incluindox e y

(6)

Consumo de tempo

49

23 82

10 37 62 89

3 19 30 49 59 70 89 100

3 10 19 23 30 37 59 62 70 82 100 105

x y

Ache o vértices onde os caminhos parax ey bifurcam e, des para x, imprima todas as folhas de subárvores à direita e, des para y, imprima todas as folhas de subárvores à esquerda.

O(lgn+k), onde k é o número de elementos de S em[a,b].

(7)

Consumo de tempo

49

23 82

10 37 62 89

3 19 30 49 59 70 89 100

3 10 19 23 30 37 59 62 70 82 100 105

x y

Ache o vértices onde os caminhos parax ey bifurcam e, des para x, imprima todas as folhas de subárvores à direita e, des para y, imprima todas as folhas de subárvores à esquerda.

O(lgn+k), ondek é o número de elementos de S em[a,b].

(8)

Esquema

Ache o vértices onde os caminhos parax ey bifurcam e, des para x, imprima todas as folhas de subárvores à direita e, des para y, imprima todas as folhas de subárvores à esquerda.

s

x y

(9)

KD-trees

Espaço 2-dimensional, buscas ortogonais.

P: conjunto de pontos (sem empates nas coordenadas x ou y)

Consulta retangular:

Quais pontos deP estão em [x :x0]×[y:y0]?

Pontop está em[x:x0]×[y :y0] sepx ∈[x :x0]e py ∈[y :y0].

y y0

x0 x0 p

px py

(10)

KD-trees

Árvore de busca binária que divide os pontos alternadamente, ora por uma linha vertical, ora por uma linha horizontal.

`2

`3

`4

`5

`6

`7

`8

`9

`10

`11

`12

`1

Pesq Pdir

`1

(11)

KD-trees

Árvore de busca binária que divide os pontos alternadamente, ora por uma linha vertical, ora por uma linha horizontal.

`4

`5

`6

`7

`8

`9

`10

`11

`12

`1

`2

`3

`1

`2 `3

(12)

KD-trees

Árvore de busca binária que divide os pontos alternadamente, ora por uma linha vertical, ora por uma linha horizontal.

`8

`9

`10

`11

`12

`1

`2

`3

`4

`5

`6

`7

`1

`2 `3

`4 `5 `6 `7

(13)

KD-trees

Árvore de busca binária que divide os pontos alternadamente, ora por uma linha vertical, ora por uma linha horizontal.

`1

`2

`3

`4

`5

`6

`7

`8

`9

`10

`11

`12

`1

`2 `3

`4 `5 `6 `7

`8 `9 `10 `11 `12

(14)

KD-trees

Árvore de busca binária que divide os pontos alternadamente, ora por uma linha vertical, ora por uma linha horizontal.

`1

`2

`3

`4

`5

`6

`7

`8

`9

`10

`11

`12

`1

`2 `3

`4 `5 `6 `7

`8 `9 `10 `11 `12

p1 p2 p3 p4 p5 p6

p7

p8 p9

p10

p11 p12

p13

(15)

KD-trees

Subárvores e suas regiões

`1

`2

`3

`4

`5

`6

`7

`8

`9

`10

`11

`12

p7

p13

p6 p12

p5 p11

p9

p2 p4

p1

p8

p3

p10

`1

`2 `3

`4 `5 `6 `7

`8 `9 `10 `11 `12

p1 p2 p3 p4 p5 p6

p7

p8 p9

p10

p11 p12

p13

(16)

KD-trees

Subárvores e suas regiões

`1

`2

`3

`4

`5

`6

`7

`8

`9

`10

`11

`12

p7

p13

p6 p12

p5 p11

p9

p2 p4

p1

p8

p3

p10

`1

`2 `3

`4 `5 `6 `7

`8 `9 `10 `11 `12

p1 p2 p3 p4 p5 p6

p7

p8 p9

p10

p11 p12

p13

(17)

Construção de uma KD-tree

BuildKDTree(P,depth) 1 se|P|=1

2 então cria e retorna uma folha com o único ponto em P 3 sedepth é par

4 então divida P em dois conjuntos por uma reta vertical `

4 então passando pela mediana dasx-coordenadas dos pontos deP; 4 então sejaP1 o conjunto dos pontos de P à esquerda ou

4 então em cima de `e P2 os pontos deP à direita de`.

5 senão análogo para uma reta horizontal`

6 ve ←BuildKDTree(P1,depth+1) 7 vd ←BuildKDTree(P2,depth+1) 8 cria nóv com conteúdo `e filhos ve evd 9 devolvav

Consumo de tempo: O(nlgn), onden:=|P|. Consumo de espaço: O(n).

(18)

Construção de uma KD-tree

BuildKDTree(P,depth) 1 se|P|=1

2 então cria e retorna uma folha com o único ponto em P 3 sedepth é par

4 então divida P em dois conjuntos por uma reta vertical `

4 então passando pela mediana dasx-coordenadas dos pontos deP; 4 então sejaP1 o conjunto dos pontos de P à esquerda ou

4 então em cima de `e P2 os pontos deP à direita de`.

5 senão análogo para uma reta horizontal`

6 ve ←BuildKDTree(P1,depth+1) 7 vd ←BuildKDTree(P2,depth+1) 8 cria nóv com conteúdo `e filhos ve evd 9 devolvav

Consumo de tempo: O(nlgn), onden:=|P|.

Consumo de espaço: O(n).

(19)

Consultas ortogonais em KD-trees

`1

`2

`3

`4

`5

`6

`7

`8

`9

`10

`11

`12

p7

p13

p6 p12

p5 p11

p9

p2

p4

p1

p8

p3

p10

`1

`2 `3

`4 `5 `6 `7

`8 `9 `10 `11 `12

p1 p2 p3 p4 p5 p6

p7

p8 p9

p10

p11 p12

p13

SeR está totalmente à esquerda de`, vá para a esquerda.

SeR está totalmente à direita de`, vá para a direita. Se`intersecta R, vá para os dois lados.

(20)

Consultas ortogonais em KD-trees

`1

`2

`3

`4

`5

`6

`7

`8

`9

`10

`11

`12

p7

p13

p6 p12

p5 p11

p9

p2

p4

p1

p8

p3

p10

`1

`2 `3

`4 `5 `6 `7

`8 `9 `10 `11 `12

p1 p2 p3 p4 p5 p6

p7

p8 p9

p10

p11 p12

p13

SeR está totalmente à esquerda de`, vá para a esquerda.

SeR está totalmente à direita de`, vá para a direita.

Se`intersecta R, vá para os dois lados.

(21)

Consultas ortogonais em KD-trees

`1

`2

`3

`4

`5

`6

`7

`8

`9

`10

`11

`12

p7

p13

p6 p12

p5 p11

p9

p2

p4

p1

p8

p3

p10

`1

`2 `3

`4 `5 `6 `7

`8 `9 `10 `11 `12

p1 p2 p3 p4 p5 p6

p7

p8 p9

p10

p11 p12

p13

SeR está totalmente à esquerda de`, vá para a esquerda.

SeR está totalmente à direita de`, vá para a direita.

Se`intersecta R, vá para os dois lados.

(22)

Consultas ortogonais em KD-trees

SearchKDTree(v,R) 1 sev é folha

2 então imprima o ponto guardado emv se ele pertence a R 3 senão seregion(esq(v))⊆R

4 então ReportSubtree(esq(v))

5 senão seregion(esq(v))intersecta R

6 então SearchKDTree(esq(v),R)

7 se region(dir(v))⊆R

8 então ReportSubtree(dir(v))

9 senão seregion(dir(v))intersecta R

10 entãoSearchKDTree(dir(v),R)

Pré-processe a árvore calculandoregion(v)para todo v. Consumo de tempo: O(√

n+k), onde n é o número de pontos e Consumo de tempo: k o número de pontos reportados na consulta.

(23)

Consultas ortogonais em KD-trees

SearchKDTree(v,R) 1 sev é folha

2 então imprima o ponto guardado emv se ele pertence a R 3 senão seregion(esq(v))⊆R

4 então ReportSubtree(esq(v))

5 senão seregion(esq(v))intersecta R

6 então SearchKDTree(esq(v),R)

7 se region(dir(v))⊆R

8 então ReportSubtree(dir(v))

9 senão seregion(dir(v))intersecta R

10 entãoSearchKDTree(dir(v),R)

Pré-processe a árvore calculandoregion(v)para todo v.

Consumo de tempo: O(√

n+k), onde n é o número de pontos e Consumo de tempo: k o número de pontos reportados na consulta.

(24)

Consultas ortogonais em KD-trees

SearchKDTree(v,R) 1 sev é folha

2 então imprima o ponto guardado emv se ele pertence a R 3 senão seregion(esq(v))⊆R

4 então ReportSubtree(esq(v))

5 senão seregion(esq(v))intersecta R

6 então SearchKDTree(esq(v),R)

7 se region(dir(v))⊆R

8 então ReportSubtree(dir(v))

9 senão seregion(dir(v))intersecta R

10 entãoSearchKDTree(dir(v),R)

Pré-processe a árvore calculandoregion(v)para todo v.

Consumo de tempo: O(√

n+k), onde n é o número de pontos e Consumo de tempo: k o número de pontos reportados na consulta.

(25)

Custo de uma consulta: O( √

n + k )

`1

`2

`3

`4

`5

`6

`7

`8

`9

`10

`11

`12 p7

p13 p6 p12

p5 p11

p9 p2

p4

p1 p8

p3

p10

`1

`2 `3

`4 `5 `6 `7

`8 `9 `10 `11 `12

p1 p2 p3 p4 p5 p6

p7

p8 p9

p10

p11 p12

p13

O termok corresponde àssubárvores azuis, de tamanho proporcional às folhas impressas.

O termoO(√

n) é pelaspartes vermelhaspercorridas no processo.

(26)

Custo de uma consulta: O( √

n + k )

`1

`2

`3

`4

`5

`6

`7

`8

`9

`10

`11

`12

p7

p13

p6 p12

p5 p11

p9

p2 p4

p1

p8

p3

p10

`1

`2 `3

`4 `5 `6 `7

`8 `9 `10 `11 `12

p1 p2 p3 p4 p5 p6 p7

p8 p9 p10

p11 p12 p13

O termoO(√

n) é pelaspartes vermelhaspercorridas no processo.

R intersecta mas não contém a região de cada nó vermelho.

Isso significa que a borda deR intersecta a região do nó.

(27)

Número de nós vermelhos

Considere uma KD-tree comn folhas e uma uma reta vertical`.

A reta`pode intersectar a região de quantos nós?

Digamos queQ(n).

`ou está à esquerda da linha vertical da raiz da árvore, ou à direita. Será queQ(n) =1+Q(n/2)?

Não... na verdadeQ(n) =2+2Q(n/4),

porque alternamos retas verticais e horizontais nos nós da árvore. A reta vertical intersecta as regiões dos dois netos

que são filhos do lado em que ela está em relação à reta da raiz. (A recursão deve aplicar-se apenas a nós cuja reta é vertical.) A solução desta recorrência éQ(n) =O(√

n).

(28)

Número de nós vermelhos

Considere uma KD-tree comn folhas e uma uma reta vertical`.

A reta`pode intersectar a região de quantos nós?

Digamos queQ(n).

`ou está à esquerda da linha vertical da raiz da árvore, ou à direita.

Será queQ(n) =1+Q(n/2)?

Não... na verdadeQ(n) =2+2Q(n/4),

porque alternamos retas verticais e horizontais nos nós da árvore. A reta vertical intersecta as regiões dos dois netos

que são filhos do lado em que ela está em relação à reta da raiz. (A recursão deve aplicar-se apenas a nós cuja reta é vertical.) A solução desta recorrência éQ(n) =O(√

n).

(29)

Número de nós vermelhos

Considere uma KD-tree comn folhas e uma uma reta vertical`.

A reta`pode intersectar a região de quantos nós?

Digamos queQ(n).

`ou está à esquerda da linha vertical da raiz da árvore, ou à direita.

Será queQ(n) =1+Q(n/2)?

Não... na verdadeQ(n) =2+2Q(n/4),

porque alternamos retas verticais e horizontais nos nós da árvore.

A reta vertical intersecta as regiões dos dois netos

que são filhos do lado em que ela está em relação à reta da raiz.

(A recursão deve aplicar-se apenas a nós cuja reta é vertical.)

A solução desta recorrência éQ(n) =O(√ n).

(30)

Número de nós vermelhos

Considere uma KD-tree comn folhas e uma uma reta vertical`.

A reta`pode intersectar a região de quantos nós?

Digamos queQ(n).

`ou está à esquerda da linha vertical da raiz da árvore, ou à direita.

Será queQ(n) =1+Q(n/2)?

Não... na verdadeQ(n) =2+2Q(n/4),

porque alternamos retas verticais e horizontais nos nós da árvore.

A reta vertical intersecta as regiões dos dois netos

que são filhos do lado em que ela está em relação à reta da raiz.

(A recursão deve aplicar-se apenas a nós cuja reta é vertical.) A solução desta recorrência éQ(n) =O(√

n).

(31)

Resumo

P: coleção de n pontos

Objetivo: responder consultas retangulares

Kd-trees:

Consumo de espaço: O(n) Custo por consulta: O(√

n+k).

Range trees:

Consumo de espaço: O(nlgn) Custo por consulta: O(lg2n+k).

(32)

Resumo

P: coleção de n pontos

Objetivo: responder consultas retangulares

Kd-trees:

Consumo de espaço: O(n) Custo por consulta: O(√

n+k).

Range trees:

Consumo de espaço: O(nlgn) Custo por consulta: O(lg2n+k).

(33)

Range trees

Consulta retangular: quais pontos deP estão em[x:x0]×[y :y0]?

Ideia: primeiro buscar pontos cuja x-coordenada está em [x :x0].

s

µ µ0

O(lgn)subárvores

(34)

Range trees

Consulta retangular: quais pontos deP estão em[x:x0]×[y :y0]?

Ideia: primeiro buscar pontos cuja x-coordenada está em [x :x0].

s

µ µ0

O(lgn)subárvores

(35)

Range trees

Consulta retangular: quais pontos deP estão em[x:x0]×[y :y0]?

Ideia: primeiro buscar pontos cuja x-coordenada está em [x :x0].

s

µ µ0

Buscar nestas subárvores pontos comy-coordenada em[y :y0].

(36)

Range trees: estrutura de dados com níveis

Como fazer estas segundas buscas eficientemente?

Cada vérticev daABBx tem umconjunto canônico Pv,

que consiste dos pontos que aparecem na subárvore enraizada emv. O conjunto dos pontos deP com x-coordenada em[x :x0]

é a união disjunta deO(lgn)conjuntos canônicos. Manteremos, para cadav, o conjunto Pv

em uma ABB secundária, ordenada pelay-coordenada dos pontos. Chamemos essa ABB deABBy(v)para cadav.

ABBy(v): árvore para busca unidimensional por intervalo.

(37)

Range trees: estrutura de dados com níveis

Como fazer estas segundas buscas eficientemente?

Cada vérticev daABBx tem umconjunto canônico Pv,

que consiste dos pontos que aparecem na subárvore enraizada emv.

O conjunto dos pontos deP com x-coordenada em[x :x0] é a união disjunta deO(lgn)conjuntos canônicos.

Manteremos, para cadav, o conjunto Pv

em uma ABB secundária, ordenada pelay-coordenada dos pontos. Chamemos essa ABB deABBy(v)para cadav.

ABBy(v): árvore para busca unidimensional por intervalo.

(38)

Range trees: estrutura de dados com níveis

Como fazer estas segundas buscas eficientemente?

Cada vérticev daABBx tem umconjunto canônico Pv,

que consiste dos pontos que aparecem na subárvore enraizada emv.

O conjunto dos pontos deP com x-coordenada em[x :x0] é a união disjunta deO(lgn)conjuntos canônicos.

Manteremos, para cadav, o conjunto Pv

em uma ABB secundária, ordenada pelay-coordenada dos pontos. Chamemos essa ABB deABBy(v)para cadav.

ABBy(v): árvore para busca unidimensional por intervalo.

(39)

Range trees: estrutura de dados com níveis

Como fazer estas segundas buscas eficientemente?

Cada vérticev daABBx tem umconjunto canônico Pv,

que consiste dos pontos que aparecem na subárvore enraizada emv.

O conjunto dos pontos deP com x-coordenada em[x :x0] é a união disjunta deO(lgn)conjuntos canônicos.

Manteremos, para cadav, o conjunto Pv

em uma ABB secundária, ordenada pelay-coordenada dos pontos.

Chamemos essa ABB deABBy(v)para cadav.

ABBy(v): árvore para busca unidimensional por intervalo.

(40)

Range trees: estrutura de dados com níveis

Como fazer estas segundas buscas eficientemente?

Cada vérticev daABBx tem umconjunto canônico Pv,

que consiste dos pontos que aparecem na subárvore enraizada emv.

O conjunto dos pontos deP com x-coordenada em[x :x0] é a união disjunta deO(lgn)conjuntos canônicos.

Manteremos, para cadav, o conjunto Pv

em uma ABB secundária, ordenada pelay-coordenada dos pontos.

Chamemos essa ABB deABBy(v)para cadav.

ABBy(v): árvore para busca unidimensional por intervalo.

(41)

Range trees: estrutura de dados com níveis

ABBx

v

Pv

ABBy(v)

Pv

(42)

Construção de uma range tree 2D

BuildRangeTree(P)

1 Construa uma ABBy T para P em relação a y 2 se|P|=1

3 então cria uma folhav para este ponto 4 senão calculexmeio para P

5 dividaP em Pesq e Pdir em relação axmeio

6 vesq← BuildRangeTree(Pesq) 7 vdir ← BuildRangeTree(Pdir)

8 cria nó v com chavexmeio e filhos vesq evdir 9 ABBy(v)←T

10 devolvav

Consumo de tempo:

Se pré-ordenarmos pory e garantirmos que as chamadas a BuildRangeTreesempre recebem os pontos ordenados pory, o consumo de tempo seráO(nlgn), onden :=|P|,

pois a construção de cada ABBy custará tempo linear neste caso.

(43)

Construção de uma range tree 2D

BuildRangeTree(P)

1 Construa uma ABBy T para P em relação a y 2 se|P|=1

3 então cria uma folhav para este ponto 4 senão calculexmeio para P

5 dividaP em Pesq e Pdir em relação axmeio

6 vesq← BuildRangeTree(Pesq) 7 vdir ← BuildRangeTree(Pdir)

8 cria nó v com chavexmeio e filhos vesq evdir 9 ABBy(v)←T

10 devolvav Consumo de tempo:

Se pré-ordenarmos pory e garantirmos que as chamadas a BuildRangeTreesempre recebem os pontos ordenados pory, o consumo de tempo seráO(nlgn), onden :=|P|,

pois a construção de cada ABBy custará tempo linear neste caso.

(44)

Range trees: consumo de espaço

Consumo de espaço:

PelaABBx: O(n)

p

p

p

p Cada ponto aparece emABBy(v) paraO(lgn) vérticesv daABBx. No total entãoO(nlgn) pelas ABBy(v)para todo v daABBx. Consumo total de espaço: O(nlgn)

(45)

Range trees: consulta

ABBx

v

Pv

ABBy(v)

Pv

Consulta: busca naABBx e, para cadaABBy(v)

encontrada na consulta porx, busca na ABBy(v)por y.

(46)

Range trees: consulta

Query2DRangeTree(T,[x,x0]×[y,y0]) 1 s ←FindSplitNode(T,x,x0) 2 ses é folha

3 então imprime o ponto ems se está em[x,x0]×[y,y0] 4 senãosiga o caminho atéx e processe subárvores à direita

5 v ←esq(s)

6 enquanto v não é folha faça

7 se x≤xv

8 entãoQuery1DRangeTree(Ty(v),[y,y0])

9 entãov ←esq(v)

10 senãov ←dir(v)

11 siga o caminho atéx0e processe subárvores à esquerda

12 . . .

Consumo de tempo por consulta: O(lg2n+k) O(lgn) pela busca unidimensional em Tpor [x:x0]e

O(lgn) buscas unidimensionais por[y :y0], custoO(lgn+k0)cada.

(47)

Range trees: consulta

Query2DRangeTree(T,[x,x0]×[y,y0]) 1 s ←FindSplitNode(T,x,x0) 2 ses é folha

3 então imprime o ponto ems se está em[x,x0]×[y,y0] 4 senãosiga o caminho atéx e processe subárvores à direita

5 v ←esq(s)

6 enquanto v não é folha faça

7 se x≤xv

8 entãoQuery1DRangeTree(Ty(v),[y,y0])

9 entãov ←esq(v)

10 senãov ←dir(v)

11 siga o caminho atéx0e processe subárvores à esquerda

12 . . .

Consumo de tempo por consulta: O(lg2n+k) O(lgn) pela busca unidimensional em Tpor [x:x0] e

O(lgn) buscas unidimensionais por[y :y0], custo O(lgn+k0)cada.

(48)

Range trees: análise

Consumo de tempo por consulta:

O(lgn)pela busca unidimensional na ABBx por[x:x0]e O(lgn)buscas unidimensionais por[y :y0],

O(lgn)uma em cada ABBy(v) encontrada na busca acima.

Tempo total por consulta: O(lg2n+k)

Consumo de espaço: PelaABBx: O(n)

Cada ponto aparece emABBy(v) paraO(lgn) vérticesv daABBx. No total entãoO(nlgn)pelas ABBy(v)para todo v daABBx. Consumo total de espaço: O(nlgn)

(49)

Range trees: análise

Consumo de tempo por consulta:

O(lgn)pela busca unidimensional na ABBx por[x:x0]e O(lgn)buscas unidimensionais por[y :y0],

O(lgn)uma em cada ABBy(v) encontrada na busca acima.

Tempo total por consulta: O(lg2n+k)

Consumo de espaço:

PelaABBx: O(n)

Cada ponto aparece emABBy(v) paraO(lgn) vérticesv daABBx. No total entãoO(nlgn) pelas ABBy(v)para todo v daABBx. Consumo total de espaço: O(nlgn)

(50)

Hipótese simplificadora

Como garantir que todas asx-coordenadas são distintas e todas asy-coordenadas são distintas?

Sejap = (x,y).

Considere quep é na verdade ((x,y),(y,x)). Defina(a,b)<(c,d) ssea<b ou a=b e c <d. Ou seja, dados dois pontosp = (x,y) eq = (w,z),

px <qx ssex <w ou x=w ey <z py <qy ssey <z ou y =z e x<w

(51)

Hipótese simplificadora

Como garantir que todas asx-coordenadas são distintas e todas asy-coordenadas são distintas?

Sejap = (x,y).

Considere quep é na verdade ((x,y),(y,x)).

Defina(a,b)<(c,d) ssea<b ou a=b e c <d.

Ou seja, dados dois pontosp = (x,y) eq = (w,z), px <qx ssex <w ou x=w ey <z

py <qy ssey <z ou y =z e x<w

(52)

Hipótese simplificadora

Como garantir que todas asx-coordenadas são distintas e todas asy-coordenadas são distintas?

Sejap = (x,y).

Considere quep é na verdade ((x,y),(y,x)).

Defina(a,b)<(c,d) ssea<b ou a=b e c <d. Ou seja, dados dois pontosp = (x,y) eq = (w,z),

px <qx ssex <w ou x=w ey <z py <qy ssey <z ou y =z e x<w

Referências

Documentos relacionados

No Brasil, nossa margem de contribuição bruta por hectolitro aumentou como resultado de uma sólida execução de preços, mas nossa margem EBITDA reduziu organicamente devido ao

 Considerando a ampla distribuição dos microrganismos, é importante que os alimentos sejam manipulados sob criteriosas condições de higiene, evitando que os

Effects of Continuance, Affective, and Moral Commitment on the Withdrawal Process: An Evaluation of Eight Structural Equation Models.. The Academy of

As cadeias laterais variam em certo nível entre as diferentes formas de clorofila encontradas em diferentes organismos, mas todas possuem uma cadeia fitol (um terpeno ) ligada

Lernaea cyprinacea of Steindachnerina insculpta from Taquari River, municipality of Taquarituba, São Paulo State, Brazil.. Note the hemorrhagic area around the insertion point of

A vivência internacional de estudantes universitários nos programas de mobilidade acadêmica, certamente lhes proporcionam novas experiências, tanto de vida, como

Contribuições/Originalidade: A identificação dos atributos que conferem qualidade ao projeto habitacional e das diretrizes de projeto que visam alcançá-los, são de fundamental

• Capacitação e Transferência da metodologia do Sistema ISOR ® para atividades de Coaching e/ou Mentoring utilizando o método das 8 sessões;.. • Capacitação e Transferência