\input REPHDR.tex % file: CNPR82.tex % last changed by J. Stolfi September 7, 1982 5:52 PM \def\header{{\bf Relat\'orio de Atividades\hfil}} \def\Fourier{1} \def\Opt{2} \def\Edm{3} \def\Furst{4} \def\GSBOP{5} \def\GSNotes{6} \def\Jap{7} \def\CLang{8} \def\Kirk{9} \def\LeeP{10} \def\VLSI{11} \hrule \vskip 3 pt \hrule \vskip 4pt \pn\ctrline{\lbf JORGE STOLFI --- Relat\'orio de Atividades} \pn\ctrline{\smc julho de 1981 a agosto de 1982} \pn\ctrline{\smc Processo de Bolsa no exterior 200.583/79} \par \vskip 4 pt \hrule \vskip 3 pt \hrule \vskip 10mm \sect{1. Sum\'ario.} Nos tres meses de ver\ao (julho a setembro) de 1981 dediquei-me a um trabalho de pesquisa na \'area de ``Computer Graphics'', sob a orienta\cao do prof. Leonidas J. Guibas, que consistiu no desenvolvimento e implementa\cao de uma linguagem para a manipula\cao de imagens discretizadas. No outono (outubro a dezembro) de 1981, cursei as disciplinas EE271 {\it Introduction to VLSI Systems} e EE262 {\it Two-dimensional Images}, obtendo grau {\bf A} em ambas. Alem disso, escrevi, em colabora\cao com o prof. Guibas, um artigo a respeito do trabalho desenvolvido no ver\ao\u. Este artigo foi publicado na revista {\it ACM Transactions on Graphics}, e apresentado no congresso SIGGRAPH '82 (Boston, 23 a 29 de julho de 1982). No inverno (janeiro a mar\c co) de 1982, cursei a disciplina EE272 {\it Testing and Simulation of VLSI Circuits}, continua\cao do curso EE271, e fui monitor da disciplina CS445 {\it Computational Geometry}, ministrada pelo prof. Guibas. Como parte desta \'ultima tarefa, elaborei um conjunto de notas de aula que estamos presentemente revendo e expandindo para publica\cao em formato de livro. No decorrer dessa atividade, tive ocasi\ao de melhorar alguns dos resultados existentes nessa \'area. Estou presentemente estudando v\'arios problemas na \'area de Geometria Computacional, sob a orienta\cao do prof. Leonidas J. Guibas, com vistas \`a escolha de um assunto para a tese de doutoramento. Em plano secund\'ario, continuei assistindo \'a serie de palestras semanais {\it Algorithms for Lunch}; completei o primeiro ano do curso de l\I ngua japonesa em Stanford; assisti como ouvinte a um curso de F\I sica de Interiores de Planetas; e estudei alguns problemas em ar\'eas variadas, notadamente An\'alise Num\'erica e Matem\'atica Discreta. Segue uma descri\cao mais detalhada das atividades acima relacionadas, e meus planos para o pr\'oximo ano letivo. \vfill\eject \sect{2. Pesquisa em ``Computer Graphics''.} A maior parte dos sistemas de gr\'aficos por computador produzidos hoje em dia s\ao baseados na representa\cao de imagens por matrizes bidimensionais (imagens rasterizadas, ou ``bitmaps''), cada elemento das quais indica a intensidade (e, eventualmente, a cor) de um ponto espec\I fico da imagem. Esta representa\cao \'e especialmente conveniente para a apresenta\cao das imagens em tubos de raios cat\'odicos de varredura fixa, em impressoras fotogr\'aficas e xerogr\'aficas, e em muitos outros dispositivos gr\'aficos. Al\'em disso, ela permite uma flexibilidade virtualmente ilimitada na composi\cao e transforma\cao das imagens. Em geral, o processamento de imagens neste formato requer a aplica\cao de procedimentos relativamente simples a um grande n\'umero de dados (da ordem de um milh\ao de bits por imagem). Quando tais processamentos s\ao executados em computadores de uso geral, com pouco ou nenhum ``hardware'' especializado, \'e indispens\'avel utilizar-se ao m\'aximo a capacidade do processador central; em particular, \'e necess\'ario combinar numa \'unica ``palavra'' o maior n\'umero possivel de pontos da imagem, e pocessar os mesmos simultaneamente. Devido a estas considera\coes\u, os mais simples problemas gr\'aficos, como por exemplo mover uma parte da imagem para um ponto diferente da tela, exigem programas surpreendentemente longos e complexos, tanto assim que alguns dos computadores mais recentes possuem instru\coes especialmente projetadas para facilitar a programa\cao de tais tarefas. Tais instru\coes t\A em se mostrado extremamente valiosas e eficientes, mas infelizmente as idiosincrasias do ``hardware'' introduzem complica\coes desnecess\'arias na sintaxe e sem\A antica das mesmas, e impedem seu uso generalizado. Minhas pesquisas no ver\ao de 1981 foram voltadas para esses problemas. Nesses tres meses, desenvolvi um modelo matem\'atico e uma nota\cao uniforme (um ``c\'alculo'') para expressar opera\coes com imagens rasterizadas, e um esquema autom\'atico para converter f\'ormulas dessa nota\cao em programas eficientes. Baseado nesses princ\I pios, desenvolvi um conjunto coerente de sub-rotinas para a manipula\cao de imagens rasterizadas (BOP), que implementei e testei no computador Dorado usando a linguagem CEDAR, ambos desenvolvidos pelo Palo Alto Research Center (PARC) da Xerox Corp.. Al\'em disso, desenvolvi uma linguagem algor\I tmica (MUMBLE), baseada no c\'alculo acima mencionado, que permite a codifica\cao sucinta e leg\'ivel de programas para a manipula\cao de imagens rasterizadas. Estamos presentemente desenvolvendo um interpretador para a mesma, que permitir\'a a utiliza\cao ``on-line'' das sub-rotinas do sistema BOP. Este trabalho foi desenvolvido sob a orienta\cao do prof. Leonidas J. Guibas de Stanford, em colabora\cao com o qual escrevi no trimestre seguinte um artigo [\GSBOP] expondo os resultados da pesquisa. Este artigo foi publicado na revista {\it Transactions on Graphics} publicada pela Association for Computing Machinery (ACM). Nos dias 23-29 de julho de 1982, participei do congresso SIGGRAPH '82, em Boston, Mass. (organizado pelo Special Interest Group in Computer Graphics da ACM), onde apresentamos o trabalho supracitado. \vfill\eject \sect{3. Pesquisa em Geometria Computacional.} No trimestre de inverno (janeiro a mar\c co) de 1982 prestei servi\c cos de monitoria para o curso {\bf CS445 - Computational Geometry}, ministrado pelo prof. Leo Guibas. O programa do curso cobriu algoritmos e t\'ecnicas para a solu\cao de problemas geom\'etricos em computadores digitais. Entre outros, foram estudados m\'etodos para determinar o fecho convexo de um conjunto de pontos, a intersec\cao de pol\I gonos, a localiza\cao de um ponto numa subdivis\ao poligonal do plano, a decomposi\cao de figuras em partes convexas, o diagrama de Voronoi e suas aplica\coes\u. Considerada a completa inexist\A encia de material did\'atico sobre essa \'area, decidimos produzir e distribuir durante o curso uma cole\cao de notas de aula ([\GSNotes], em anexo), numa nota\cao uniforme e incluindo v\'arios resultados recentes que ainda n\ao chegaram a ser publicados. Em vista do interesse que essas notas despertaram, resolvemos tentar publicar uma vers\ao ampliada das mesmas, na qual estamos trabalhando no momento. Durante a elabora\cao dessas notas, tive ocasi\ao de desenvolver ou melhorar alguns algoritmos para problemas de Geometria Computacional, sobre os quais estou presentemente escrevendo artigos. Um algoritmo permite determinar a intersec\cao de dois pol\I gonos simples com $n$ v\'ertices em tempo $O(n\log n + I)$, onde $I$ \'e o n\'umero de v\'ertices da intersec\c c\s ao; o melhor algoritmo conhecido at\'e o momento exigia tempo $O((n+I)\log n)$. Outro algoritmo (desenvolvido em conjunto com Alan Siegel, de Stanford) permite determinar a tangente comum a dois pol\I gonos convexos de $n$ v\'ertices em tempo $O(\log n)$, utilizando uma variante da t\'ecnica de bissec\c c\s ao. Este algoritmo \'e consideravelmente mais simples que o pr\'eviamente conhecido, apesar de ter a mesma efici\A encia assint\'otica. Consegui tambem melhorar ligeiramente um algoritmo devido a Daniel Greene, que decomp\oe um pol\I gono simples de $n$ v\'ertices no menor n\'umero poss\I vel de partes convexas; a vers\ao melhorada exige apenas $O(n^2)$ espa\c co de mem\'oria, em vez dos $O(n^3)$ da vers\ao original. No momento, estou estudando o {\it problema da localiza\cao numa sub-divis\ao do plano}: dada uma parti\cao do plano em $n$ pol\'\i gonos convexos, e dado um ponto arbitr\'ario $p$, determinar o pol\'\i gono que contem $p$. Este problema \'e um dos mais importantes na \'area de Geometria Computacional, uma vez que o mesmo possui um grande n\'umero de aplica\coes e \'e frequentemente a etapa das mesmas que consome a maior parte do tempo de processamento. \'E poss\I vel resolver este problema em tempo $O(\log n)$ e espa\c co $O(n)$, usando-se um algoritmo devido a D. Kirkpatrick [\Kirk]; infelizmente, a complexidade desse algoritmo impede seu uso generalizado na pr\'atica. Estou portanto analisando possiveis simplifica\coes do algoritmo de Kirkpatrick, tanto no caso geral quanto no caso de aplica\coes espec\'ificas. Alem disso, estou examinando tambem um algoritmo devido a D. T. Lee e F. Preparata [\LeeP], que, apesar de ligeiramente mais demorado (tempo $O(\log n)^2$), parece ser mais f\'acil de implementar na pr\'atica. Com refer\A encia a este problema, provei que uma decomposi\cao arbitr\'aria do plano em $2n$ tri\A angulos pode ser dividida em duas partes, cada uma contendo $n$ tri\A angulos, por uma linha poligonal monot\A onica, e que esta linha pode ser determinada em tempo $O(n)$. Este resultado permite simplificar bastante a constru\cao das estruturas de dados usadas no algoritmo de Lee e Preparata. Uma das aplica\coes mais importantes do problema da localiza\cao \'e o {\it problema do ponto mais pr\'oximo}: dados $n$ pontos $p1, p2, ... pn$ no plano, e um ponto arbitr\'ario $q$, determinar qual dos $pi$ est\'a mais pr\'oximo de $q$. Se a cada um dos $pi$ associarmos uma regi\ao $Pi$ do plano, tal que $q$ pertence a $Pi$ se e somente se $q$ est\'a mais pr\'oximo de $pi$ do que de qualquer outro $pj$, obteremos uma decomposi\cao do plano em $n$ pol\I gonos convexos, conhecida como o {\it diagrama de Voronoi} dos pontos $pi$. Obviamente, a determina\cao do ponto $pi$ mais pr\'oximo a $q$ reduz-se ao da localiza\cao de $q$ no diagrama de Voronoi. Certas propriedades deste \'ultimo (que n\ao s\ao compartilhadas por ourtras decomposi\coes convexas do plano) prometem conduzir a vers\oes mais simples dos algoritmos de localiza\cao acima mencionados. Outro problema que estou presentemente estudando \'e o da representa\cao interna de tais sub-divis\oes do plano. Topologicamente, uma sub-divis\ao dessas \'e equivalente a um grafo n\ao dirigido imerso na superficie de uma esfera, que por sua vez \'e apenas um caso particular de uma variedade bidimensional orient\'avel. No momento, estou analisando diversas estruturas de dados para a representa\cao de tais imers\oes (com base no trabalho de J. Edmonds [\Edm]), e estou desnvolvendo uma cole\cao de operadores b\'asicos para a manipula\cao das mesmas. \vfill\eject \sect{4. Outras pesquisas.} Em car\'ater secund\'ario, e independentemente das pesquisas descritas acima, trabalhei por conta pr\'opria em dois outros problemas, nas \'areas de c\'alculo num\'erico e an\'alise combinat\'oria. Na \'area de c\'alculo num\'erico, estou procurando desenvolver um algoritmo para a minimiza\cao de uma fun\cao real $f(x1, x2, ... xn)$, utilizando apenas $O(n)$ espa\c co, e sem utilizar as derivadas parciais da fun\cao $f$. O problema da minimiza\cao de fun\coes a $n$ vari\'aveis j\'a foi extensivamente estudado, e existem in\'umeros algoritmos eficientes para o mesmo (veja-se, por exemplo, [\Opt]). Entretanto, esses m\'etodos geralmente utilizam $O(n^2)$ espa\c co, impedindo seu uso em problemas com grande n\'umero de vari\'aveis. O m\'etodo que estou testando \'e vagamente relacionado com os chamados {\it m\'etodos dos gradientes conjugados}, em particular com o algoritmo de Powell [\Opt]. Em vez de armazenar integralmente os $n$ vetores utilizados por esses m\'etodos, meu algoritmo armazena apenas as duas componentes mais significativas de cada um. No caso da fun\cao $f$ ser quadr\'atica nas vizinhancas do m\I nimo, esta aproxima\cao reduz a converg\A encia do m\'etodo de segunda para primeira ordem; espero mostrar que a redu\cao do espa\c co para $O(n)$ compensa esta desvantagem, pelo menos em algumas aplica\coes. Na \'area de an\'alise combinat\'oria, estudei o algoritmo de M. Furst e J. Hopcroft [\Furst] para a representa\cao de grupos de permuta\coes. A finalidade desse algoritmo \'e a seguinte: dado um conjunto $\Gamma$ de permuta\coes sobre os inteiros $1, 2, ..., n$, e uma permuta\cao $\pi$ dos mesmos elementos, decidir se $\pi$ pertence ao grupo $G=\langle \Gamma\rangle$ gerado por $\Gamma$. Para esse fim, o algoritmo de Furst e Hopcroft constr\'oi uma {\it t\A orre de subgrupos} $G1, G2, ..., Gn$ de $G$, sendo que $Gi$ \'e o conjunto de todas as permuta\coes de $G$ que n\ao movem nenhum dos elementos\penalty-50 $i+1, i+2, ..., n$. Estes subgrupos podem ser representados em espa\c co $O(n^3)$ por meio de uma tabela de geradores $\theta{ij}$ ($1\leq j< i\leq n$), sendo que $\theta{ij}\in Gi$ e $\theta{ij}(i)=j$ (pode ser que n\ao exista uma permuta\cao com tais propriedades; em tal caso, a entrada $\theta{ij}$ da tabela \'e deixada em branco). Uma vez construida essa tabela, \'e possivel testar se uma permuta\cao $\pi$ pertence a $G=Gn$ em tempo $O(n^2)$: se $\pi$ n\ao move $n$, basta determinar se $\pi$ pertence a $G{n-1}$; se $\pi(n)=k$, para algum $k