Curva de Hilbert

Fonte: testwiki
Saltar para a navegação Saltar para a pesquisa
Primeiras 6 iterações da curva de Hilbert

A curva de Hilbert (também conhecida como a curva de preenchimento de espaço de Hilbert) é uma curva fractal contínua que preenche o espaço, descrita pela primeira vez pelo matemático alemão David Hilbert em 1891, como uma variante das curvas de Peano que preenchem o espaço, descobertas por Giuseppe Peano em 1890.

Por ser uma curva de preenchimento de espaço, sua dimensão de Hausdorff é 2 (precisamente, sua imagem é o quadrado unitário, cuja dimensão é 2 em qualquer definição de dimensão; seu gráfico é um conjunto compacto homeomórfico ao intervalo unitário fechado, com dimensão de Hausdorff 2).

A curva de Hilbert é construída como um limite de curvas linearmente segmentadas. O comprimento da n-ésima curva é 2n12n, i.e., o comprimento cresce exponencialmente com n, mesmo que cada curva esteja contida num quadrado de área 1.

Imagens

Aplicações e algoritmos de mapeamento

Tanto a verdadeira curva de Hilbert quanto suas aproximações discretas são úteis porque fornecem um mapeamento entre o espaço 1D e 2D que preserva a localidade de forma bastante eficaz.[1] Isso significa que dois pontos de dados que estão próximos um do outro no espaço unidimensional também estão próximos um do outro após o dobramento. O inverso nem sempre pode ser verdadeiro.

Devido a essa propriedade de localidade, a curva de Hilbert é amplamente utilizada na ciência da computação. Por exemplo, o intervalo de endereços IP usado por computadores pode ser mapeado em uma imagem usando a curva de Hilbert. O código para gerar a imagem mapearia de 2D para 1D para encontrar a cor de cada pixel, e a curva de Hilbert é às vezes usada porque mantém endereços IP próximos uns dos outros na imagem.[2] A propriedade de localidade da curva de Hilbert também foi usada para projetar algoritmos para explorar regiões com robôs móveis.[3][4]

Em um algoritmo chamado dithering de Riemersma, fotografias em escala de cinza podem ser convertidas em uma imagem binária com dithering usando a limiarização, com a quantidade restante de cada pixel adicionada ao próximo pixel ao longo da curva de Hilbert. O código para fazer isso mapearia de 1D para 2D, e a curva de Hilbert é às vezes usada porque não cria os padrões que seriam visíveis ao olho se a ordem fosse simplesmente da esquerda para a direita em cada linha de pixels.[5] Curvas de Hilbert em dimensões superiores são uma instância de uma generalização de códigos Gray e são às vezes usadas para propósitos semelhantes, pelas mesmas razões. Para bancos de dados multidimensionais, a ordem de Hilbert foi proposta para ser usada em vez da ordem Z porque possui um comportamento de preservação de localidade melhor. Por exemplo, curvas de Hilbert foram usadas para comprimir e acelerar índices de árvores R[6] (veja a árvore R de Hilbert). Elas também foram usadas para ajudar a comprimir data warehouses.[7][8]

A distância linear de qualquer ponto ao longo da curva pode ser convertida em coordenadas em n dimensões para um dado n, e vice-versa, utilizando qualquer uma das várias técnicas matemáticas padrão, como o método de Skilling.

É possível implementar curvas de Hilbert de forma eficiente mesmo quando o espaço de dados não forma um quadrado.[9] Além disso, existem várias generalizações possíveis das curvas de Hilbert para dimensões superiores.[10][11]

Representação como um sistema de Lindenmayer

A Curva de Hilbert pode ser expressa por um sistema de reescrita (L-sistema). Ficheiro:Hilbert Curve - 6.webm

Alfabeto : A, B
Constantes : F + −
Axioma : A
Regras de produção:
A → +BF−AFA−FB+
B → −AF+BFB+FA−

Aqui, "F" significa "avançar", "+" significa "virar à esquerda 90°", "-" significa "virar à direita 90°" (veja gráficos de tartaruga), e "A" e "B" são ignorados durante o desenho.

Outras implementações

"Graphics Gems II"[12] discute a coerência da curva de Hilbert e fornece implementação.

A Curva de Hilbert é comumente usada na renderização de imagens ou vídeos. Programas populares como Blender utilizam a Curva de Hilbert para traçar os objetos e renderizar a cena.Predefinição:Carece de fontes

Ver também

Referências

  1. Predefinição:Citation.
  2. Predefinição:Cite web
  3. Predefinição:Citation
  4. Predefinição:Cite conference
  5. Predefinição:Cite journal
  6. Predefinição:Cite journal
  7. Predefinição:Cite book
  8. Predefinição:Cite journal
  9. Predefinição:Cite journal
  10. Predefinição:Cite journal
  11. H. J. Haverkort, F. van Walderveen, Four-dimensional Hilbert curves for R-trees, in: Proceedings of the Eleventh Workshop on Algorithm Engineering and Experiments, 2009, pp. 63–73.
  12. Voorhies, Douglas: Space-Filling Curves and a Measure of Coherence, pp. 26–30, Graphics Gems II.

Leituras adicionais

Ligações externas