Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Geometria Computacional Lista 2, Exercícios de Geometria Computacional

Apostilas de Ciência da Computação da Universidade de São Paulo, Geometria Computacional, Análise de Algoritmos, Exercícios Lista 2

Tipologia: Exercícios

2013

Compartilhado em 03/12/2013

Salamaleque
Salamaleque 🇧🇷

4.5

(113)

201 documentos

1 / 2

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
MAC 338 - An´alise de Algoritmos
Departamento de Ciˆencia da Computa¸ao
Primeiro semestre de 2011
Lista 2
1. Considere o seguinte problema: dados n, uma seq¨encia de umeros reais an,...,a0e um umero
real x, determinar o valor do polinˆomio pn(x) = anxn+···+a1x+a0. Pode-se resolver esse
problema calculando o valor de qn1(x) = anxn1+··· +a2x+a1e, posteriormente, pn(x) =
x q(x) + a0. Esse etodo ´e chamado de regra de Horner. Projete um algoritmo de divis˜ao e
conquista para resolver o problema e compare-o ao etodo derivado da regra de Horner. Quantas
adi¸oes e quantas multiplica¸oes faz o seu algoritmo?
2. Descreva um algoritmo que, dados inteiros nek, juntamente com klistas ordenadas que em
conjunto tenham nregistros, produza uma ´unica lista ordenada contendo todos os registros
dessas listas (isto ´e, fa¸ca uma intercala¸ao). O seu algoritmo deve ter complexidade O(nlg k).
Note que isto se transforma em O(nlg n) no caso de nlistas de 1 elemento, e em O(n) se o
houver duas listas (no total com nelementos).
3. Considere a seq¨encia de vetores Ak[1 . . 2k], Ak1[1 . . 2k1],...,A1[1 . . 21], A0[1 . . 20].Suponha
que cada um dos vetores ´e crescente. Queremos reunir, por meio de sucessivas opera¸oes de
intercala¸ao (= merge), o conte´udo dos vetores A0,...,Akem um ´unico vetor crescente B[1 ..n],
onde n= 2k+1 1. Escreva um algoritmo que fa¸ca isso em O(n) unidades de tempo. Use como
subrotina o Intercale visto em aula.
4. Qu˜ao rapidamente vocˆe pode multiplicar uma matriz kn ×npor uma n×kn, usando o algoritmo
de Strassen como subrotina? Responda a mesma quest˜ao com as ordens (n´umero de linhas e
colunas) das matrizes trocadas.
5. Um pesquisador chamado V. Pan descobriu uma maneira de fazer o produto de duas matrizes
68 ×68 usando 132.464 multiplica¸oes, um jeito de fazer o produto de duas matrizes 70 ×70
usando 143.640 multiplica¸oes, e um jeito de fazer o produto de duas matrizes 72 ×72 usando
155.424 multiplica¸oes. Qual destes etodos leva ao algoritmo com melhor consumo de tempo
assint´otico de pior caso usando o etodo de divis˜ao e conquista? Como este consumo se compara
ao do algoritmo de Strassen?
6. Para esta quest˜ao, vamos dizer que a mediana de um vetor A[p . . r] com umero inteiros ´e o
valor que ficaria na posi¸ao A[(p+r)/2] depois que o vetor A[p . . r] fosse ordenado.
Dado um algoritmo linear “caixa-preta” que devolve a mediana de um vetor, descreva um algo-
ritmo simples, linear, que, dado um vetor A[p . . r ] de inteiros distintos e um inteiro k, devolve
okesimo ınimo do vetor. (O kesimo ınimo de um vetor de inteiros distintos ´e o elemento
que estaria na kesima posi¸ao do vetor se ele fosse ordenado.)
7. A remo¸ao da superf´ıcie escondida ´e um problema em computa¸ao gr´afica que raramente precisa
de introdu¸ao: quando o Jo˜ao a na frente da Maria, vocˆe pode ver o Jo˜ao, mas ao a Maria;
quando a Maria a na frente do Jo˜ao, ... Vocˆe entendeu a ideia.
A beleza desse problema ´e que vocˆe pode resolvˆe-lo mais rapidamente do que a intui¸ao em
geral sugere. Aqui est´a uma vers˜ao simplificada do problema onde a podemos apresentar um
algoritmo mais eficiente do que a primeira solu¸ao em que se pode pensar. Imagine que ao
dadas nretas ao verticais no plano, denotadas por L1,...,Ln. Digamos que Li´e dada pela
equa¸ao y=aix+bi, para i= 1,...,n. Suponha que ao a trˆes retas entre as retas dadas que
se interseptam mutuamente num mesmo ponto. Dizemos que a reta Li´e a mais alta numa dada
coordenada x=x0se sua coordenada yem x0´e maior que a coordenada yem x0de todas as
outras retas dadas. Ou seja, se aix0+bi> ajx0+bjpara todo j6=i. Dizemos que Li´e vis´ıvel
pf2

Pré-visualização parcial do texto

Baixe Geometria Computacional Lista 2 e outras Exercícios em PDF para Geometria Computacional, somente na Docsity!

MAC 338 - An´alise de Algoritmos

Departamento de Ciˆencia da Computa¸c˜ao Primeiro semestre de 2011

Lista 2

  1. Considere o seguinte problema: dados n, uma seq¨uˆencia de n´umeros reais an,... , a 0 e um n´umero real x, determinar o valor do polinˆomio pn(x) = anxn^ + · · · + a 1 x + a 0. Pode-se resolver esse problema calculando o valor de qn− 1 (x) = anxn−^1 + · · · + a 2 x + a 1 e, posteriormente, pn(x) = x q(x) + a 0. Esse m´etodo ´e chamado de regra de Horner. Projete um algoritmo de divis˜ao e conquista para resolver o problema e compare-o ao m´etodo derivado da regra de Horner. Quantas adi¸c˜oes e quantas multiplica¸c˜oes faz o seu algoritmo?
  2. Descreva um algoritmo que, dados inteiros n e k, juntamente com k listas ordenadas que em conjunto tenham n registros, produza uma ´unica lista ordenada contendo todos os registros dessas listas (isto ´e, fa¸ca uma intercala¸c˜ao). O seu algoritmo deve ter complexidade O(n lg k). Note que isto se transforma em O(n lg n) no caso de n listas de 1 elemento, e em O(n) se s´o houver duas listas (no total com n elementos).
  3. Considere a seq¨uˆencia de vetores Ak[1.. 2 k^ ], Ak− 1 [1.. 2 k−^1 ],... , A 1 [1.. 21 ], A 0 [1.. 20 ]. Suponha que cada um dos vetores ´e crescente. Queremos reunir, por meio de sucessivas opera¸c˜oes de intercala¸c˜ao (= merge), o conte´udo dos vetores A 0 ,... , Ak em um ´unico vetor crescente B[1.. n], onde n = 2k+1^ − 1. Escreva um algoritmo que fa¸ca isso em O(n) unidades de tempo. Use como subrotina o Intercale visto em aula.
  4. Qu˜ao rapidamente vocˆe pode multiplicar uma matriz kn ×n por uma n ×kn, usando o algoritmo de Strassen como subrotina? Responda a mesma quest˜ao com as ordens (n´umero de linhas e colunas) das matrizes trocadas.
  5. Um pesquisador chamado V. Pan descobriu uma maneira de fazer o produto de duas matrizes 68 × 68 usando 132.464 multiplica¸c˜oes, um jeito de fazer o produto de duas matrizes 70 × 70 usando 143.640 multiplica¸c˜oes, e um jeito de fazer o produto de duas matrizes 72 × 72 usando 155 .424 multiplica¸c˜oes. Qual destes m´etodos leva ao algoritmo com melhor consumo de tempo assint´otico de pior caso usando o m´etodo de divis˜ao e conquista? Como este consumo se compara ao do algoritmo de Strassen?
  6. Para esta quest˜ao, vamos dizer que a mediana de um vetor A[p.. r] com n´umero inteiros ´e o valor que ficaria na posi¸c˜ao A[⌊(p + r)/ 2 ⌋] depois que o vetor A[p.. r] fosse ordenado. Dado um algoritmo linear “caixa-preta” que devolve a mediana de um vetor, descreva um algo- ritmo simples, linear, que, dado um vetor A[p.. r] de inteiros distintos e um inteiro k, devolve o k-´esimo m´ınimo do vetor. (O k-´esimo m´ınimo de um vetor de inteiros distintos ´e o elemento que estaria na k-´esima posi¸c˜ao do vetor se ele fosse ordenado.)
  7. A remo¸c˜ao da superf´ıcie escondida ´e um problema em computa¸c˜ao gr´afica que raramente precisa de introdu¸c˜ao: quando o Jo˜ao t´a na frente da Maria, vocˆe pode ver o Jo˜ao, mas n˜ao a Maria; quando a Maria t´a na frente do Jo˜ao,... Vocˆe entendeu a ideia. A beleza desse problema ´e que vocˆe pode resolvˆe-lo mais rapidamente do que a intui¸c˜ao em geral sugere. Aqui est´a uma vers˜ao simplificada do problema onde j´a podemos apresentar um algoritmo mais eficiente do que a primeira solu¸c˜ao em que se pode pensar. Imagine que s˜ao dadas n retas n˜ao verticais no plano, denotadas por L 1 ,... , Ln. Digamos que Li ´e dada pela equa¸c˜ao y = aix + bi, para i = 1,... , n. Suponha que n˜ao h´a trˆes retas entre as retas dadas que se interseptam mutuamente num mesmo ponto. Dizemos que a reta Li ´e a mais alta numa dada coordenada x = x 0 se sua coordenada y em x 0 ´e maior que a coordenada y em x 0 de todas as outras retas dadas. Ou seja, se aix 0 + bi > aj x 0 + bj para todo j 6 = i. Dizemos que Li ´e vis´ıvel

se existe uma coordenada x na qual ela ´e a mais alta. Intuitivamente, isso corresponde a uma parte de Li ser vis´ıvel se vocˆe olhar para baixo a partir de y = ∞. Escreva um algoritmo O(n lg n) que recebe uma seq¨uˆencia de n retas, como descrito acima, e devolve a subseq¨uˆencia delas que ´e vis´ıvel.

  1. A silhueta de um pr´edio ´e uma tripla (l, h, r) de n´umeros positivos com l < r, onde h representa a altura do pr´edio, l representa a posi¸c˜ao inicial da sua base e r a posi¸c˜ao final.

l r

h

Figura 1: Silhueta (l, h, r) de um pr´edio.

Considere uma cole¸c˜ao S = {(l 1 , h 1 , r 1 ),... , (ln, hn, rn)} com a silhueta de n pr´edios. Para cada n´umero positivo x, denote por Sx o conjunto {i : 1 ≤ i ≤ n e li ≤ x ≤ ri}. Denote ainda por h(Sx) o n´umero max{hi : i ∈ Sx}. O skyline de S ´e uma seq¨uˆencia (x 0 , t 1 , x 1 ,... , tk, xk) tal que

  1. x 0 = 0 e xk = max{ri : 1 ≤ i ≤ n};
  2. xj− 1 < xj para j = 1,... , n;
  3. para j = 1,... , n, tj = h(Sx) para todo x tal que xj− 1 < x < xj ;
  4. tj 6 = tj+1 para j = 1,... , n − 1.

0 2 4 6 8 1012141618 2022 24 10 15 1822

Figura 2: Cole¸c˜ao de silhuetas S = {(15, 7 , 20), (4, 8 , 10), (18, 9 , 21), (2, 4 , 11), (7, 3 , 17), (6, 6 , 9), (14, 2 , 22)} e seu skyline (0, 0 , 2 , 4 , 4 , 8 , 10 , 4 , 11 , 3 , 15 , 7 , 18 , 9 , 21 , 2 , 22).

(a) Escreva um algoritmo que recebe o skyline de uma cole¸c˜ao S 1 de silhuetas de pr´edios e o skyline de uma cole¸c˜ao S 2 de silhuetas de pr´edios e devolve o skyline de S 1 ∪ S 2. Seu algoritmo deve consumir tempo O(n), onde n = |S 1 ∪ S 2 |. Explique por que seu algoritmo faz o que promete e por que consome o tempo pedido. (b) Escreva um algoritmo que recebe um inteiro n e uma cole¸c˜ao S de n silhuetas de pr´edios e devolve o skyline de S. Seu algoritmo deve consumir tempo O(n lg n). Explique por que seu algoritmo faz o que promete e por que consome o tempo pedido.

  1. Seja X[1.. n] um vetor de inteiros e i e j dois ´ındices distintos de X, ou seja, i e j s˜ao inteiros entre 1 e n. Dizemos que o par (i, j) ´e uma grande invers˜ao de X se i < j e X[i] > 2 X[j]. Escreva um algoritmo O(n lg n) que devolva o n´umero de grandes invers˜oes em um vetor X, onde n ´e o n´umero de elementos em X.