Courbe de Hilbert
![](http://178.128.105.246/content-http-upload.wikimedia.org/wikipedia/commons/b/b1/Hilbert_curve%21.gif)
La courbe de Hilbert est une courbe continue remplissant un carré. Elle a été décrite pour la première fois par le mathématicien allemand David Hilbert en 1891[1].
Comme elle couvre un carré, sa dimension de Hausdorff et sa dimension topologique sont égales à 2. On la considère cependant comme faisant partie des fractales.
La longueur euclidienne de Hn (la courbe approchée continue obtenue à la n-ième itération) est ; elle croit donc exponentiellement avec n.
Pour le parcours des bases de données multi-dimensionnelles, la courbe de Hilbert a été proposée à la place de la courbe de Lebesgue parce qu'elle a un comportement préservant mieux la localité.
Construction géométrique
[modifier | modifier le code]![](http://178.128.105.246/content-http-upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Hilbert_curve.svg/440px-Hilbert_curve.svg.png)
Hilbert définit[1] la fonction comme limite de fonctions donnant les approximations successives de la courbe de Hilbert.
- À l'étape 0, le graphe H0 se limite à un seul point, disposé au centre du carré . Ce point est à la fois point initial et point final de H0. Le centre du carré de coordonnées (1/2, 1/2) est l'image par une fonction f0 de l'intervalle tout entier.
- À l'étape 1, on coupe en quatre parties égales l'intervalle et on fait correspondre à chaque intervalle de la subdivision un quart du carré initial. Plus précisément, l'intervalle est associé au sous-carré ; l'intervalle est associé au sous-carré ; l'intervalle est associé au sous-carré ; et enfin, l'intervalle est associé au sous-carré . Ainsi, le parcours des quatre sous-carrés se fait dans l'ordre suivant :
1 | 2 |
0 | 3 |
- Si on relie les centres de ces carrés par des segments, on obtient le graphe H1. Son point initial est le point de coordonnées , et son point final est le point de coordonnées . C'est l'arc paramétré par une fonction f1 qui envoie l'intervalle [0, 1/4] sur la partie de H1 contenue dans le carré 0, l'intervalle sur la partie de H1 contenue dans le carré 1, l'intervalle sur la partie de H1 contenue dans le carré 2, et l'intervalle sur la partie de H1 contenue dans le carré 3, en suivant le sens de parcours.
- À l'étape n, chaque intervalle de la subdivision obtenue à l'étape n-1 est lui-même divisé en quatre, de même que le carré qui lui est associé. On dispose dans chaque carré de côté 1/2 numéroté de 0 à 3 un exemplaire du graphe Hn-1 calculé au rang précédent, après lui avoir fait subir une homothétie de rapport 1/2, mais de façon que, pour i variant de 0 à 2, le point final du graphe Hn-1 disposé dans le carré i soit le plus proche possible du point initial du graphe Hn-1 disposé dans le carré i+1. Il suffit pour cela d'effectuer une symétrie par rapport à la diagonale ascendante dans le carré numéroté 0, et une symétrie par rapport à la diagonale descendante dans le carré numéroté 3. Ainsi, à l'étape n= 2, le sens de parcours dans chaque sous-carré de l'étape 1 est comme suit :
1 | 2 | 1 | 2 |
0 | 3 | 0 | 3 |
3 | 2 | 1 | 0 |
0 | 1 | 2 | 3 |
- Le point initial du graphe Hn ainsi obtenu est le point initial du graphe Hn-1 du carré 0 en bas à gauche, et le point final du graphe Hn est le point final du graphe Hn-1 du carré 3, en bas à droite. Les parties de Hn contenues dans chacun des 4n petits carrés de côté 1/2n par ordre de parcours sont les images successives par la fonction fn de chacun des intervalles successifs de longueur 1/4n subdivisant .
En raison de la définition locale des graphes Hn, la suite de fonctions continues (fn) est uniformément de Cauchy, donc converge uniformément vers une fonction continue f dont le graphe est la courbe de Hilbert. Ce graphe est dense dans le carré . Il est de plus compact comme image continue du compact [0,1], donc c'est un fermé dense de , donc il est égal à . f est une application surjective. Elle n'est dérivable en aucun point.
On peut montrer par récurrence que les graphes Hn, et donc la courbe de Hilbert par passage à la limite, sont symétriques par rapport à la droite d'équation x = 1/2.
Définition récursive
[modifier | modifier le code]Le paramétrage f(t) = (x(t), y(t)) de la fonction de Hilbert précédemment définie vérifie, compte tenu des symétries de la construction :
- pour
- pour
- pour
- pour
En outre f(0) = (0, 0) et f(1) = (1, 0).
On peut aussi traduire ces relations comme suit. Posons :
- S0 la symétrie par rapport à la droite y = x
- S1 la translation de vecteur (0, 1)
- S2 la translation de vecteur (1,1)
- S3 la symétrie par rapport à la droite y = -x, composée avec la translation de vecteur (2,1).
Alors, si où les un sont les chiffres en base 4 de t, on a :
et en itérant :
En particulier, si t est un réel ayant un nombre fini n de chiffres en base 4 (), on a :
On peut ainsi calculer facilement la valeur de n'importe quelle quantité et plus spécialement les , qui donnent les coordonnées des centres des petits carrés lorsque k varie de 1 à 4n.
Construction par approximations discrètes
[modifier | modifier le code]On peut déterminer directement par récurrence les coordonnées des sommets du graphe Hn. Une translation sera effectuée pour que les coordonnées du sommet initial soient ramenées en (0,0) (et non au centre d'un petit carré). Nous continuerons néanmoins à désigner ce graphe translaté par Hn. On utilise pour cela une variable auxiliaire a indiquant l'orientation du déplacement, et pouvant prendre les valeurs 0, 1, 2, 3. L'orientation donnée par a correspondra aux quatre sens de parcours possibles suivants du graphe H1 ou de ses symétrisés :
![Codage des orientations possibles utilisées pour la construction de la courbe de Hilbert.](http://178.128.105.246/content-http-upload.wikimedia.org/wikipedia/commons/thumb/6/67/Hilbert-oriente.svg/600px-Hilbert-oriente.svg.png)
On se donne également trois matrices :
Les indices de lignes varient de 0 à 3 (et non de 1 à 4 comme usuellement) et ces indices correspondent à des valeurs prises par a. Les indices de colonnes varient également de 0 à 3 et correspondent à des valeurs prises par les chiffres en base 4 d'un paramètre t donné. Les éléments de X seront les abscisses et ceux de Y les ordonnées d'un sommet que l'on cherche à calculer ; les éléments de A donneront les diverses orientations à suivre au cours du calcul.
À l'étape n, le graphe (translaté de) Hn comporte 4n sommets. Pris dans l'ordre de parcours, ils seront associés aux 4n éléments t de dont la décomposition en base 4 comporte exactement n chiffres (y compris éventuellement des 0 finaux) :
- , .
Soit donc un tel nombre. Les coordonnées du sommet du graphe Hn correspondant à peuvent être calculées par récurrence[2] sur k variant de 0 à n, à partir des coordonnées du sommet du graphe Hk correspondant au nombre . Désignons par les coordonnées de , et soit la valeur du paramètre qui donne l'orientation à adopter pour construire les quatre points du graphe Hk+1 issus de (dont le sommet qui correspondant à .
Pour k = 0, le graphe H0 est réduit au point (0,0) et l'orientation adoptée pour construire H1 correspond à a = 0. On a donc initialement :
Pour k variant de 1 à n, on définit ensuite par récurrence les suites :
On vérifiera en effet que, si l'orientation en est donnée par la valeur de , alors les différences entre les coordonnées des quatre points du graphe Hk issus de et les coordonnées de sont, au facteur 1/2k près, situés sur la ligne d'indice des matrices X et Y, en fonction du dernier chiffre de donnant l'indice de colonne à adopter. De plus, la nouvelle orientation à adopter au point ainsi obtenu pour construire le point est le nombre situé sur la ligne d'indice de la matrice A, là aussi en fonction du dernier chiffre de .
Lorsque parcourt les valeurs depuis 0.00...0 jusqu'à 0.33...3 (avec n chiffres), les 4n sommets occupent le coin en bas en gauche des 4n petits carrés en suivant l'ordre du graphe Hn
Pour obtenir les centres des carrés, il suffit d'ajouter à chaque coordonnée de chaque sommet .
Généralisation en dimension supérieure
[modifier | modifier le code]![](http://178.128.105.246/content-http-upload.wikimedia.org/wikipedia/commons/thumb/5/57/Hilbert_curve_3D_2nd_iteration.png/220px-Hilbert_curve_3D_2nd_iteration.png)
La courbe de Hilbert peut se généraliser à des dimensions supérieures. Par exemple, en dimension 3, il suffit à l'étape 1 de parcourir les huit sommets du cube d'un sommet à un sommet adjacent. Pour passer de l'étape n-1 à l'étape n, on découpe le cube unité en huit sous-cubes dans lesquels on dispose une courbe approchée de Hilbert d'ordre n-1, mais de façon que le point final de chaque graphe d'ordre n-1 soit le plus proche possible du sommet initial du graphe d'ordre n-1 suivant.
La généralisation peut aussi se faire par composition fonctionnelle. Ainsi la courbe de Hilbert de dimension 4 peut être définie par f(t) = (x(x(t)), y(x(t)), x(y(t)), y(y(t))). Cette définition peut être étendue aux dimensions qui sont des puissances de 2.
Représentation en L-système
[modifier | modifier le code]La courbe de Hilbert peut aussi être construite par un L-système[3] :
- Alphabet : L, R
- Constantes : F, +, −
- Axiome : L
- Règles :
- L → –RF+LFL+FR−
- R → +LF−RFR−FL+
Ici, F signifie « avance », + signifie « à gauche 90° », et − signifie « à droite 90° ».
Butz[4] propose un algorithme pour calculer la courbe de Hilbert en plusieurs dimensions.
Notes et références
[modifier | modifier le code]- (de) D. Hilbert, « Über die stetige Abbildung einer Linie auf ein Flächenstück », Math. Ann., vol. 38, , p. 459-460 (lire en ligne).
- Theodore Bially. Space-filling curves: Their generation and their application to bandwidth reduction. IEEE Transactions on Information Theory, IT-15(6):658–664, 1969. (Cité d'après Jonathan Lawder: Techniques for Mapping to and from Space-filling Curves, 1999, p. 58).
- (en) Heinz-Otto Peitgen (en) et Dietmar Saupe (éds.), The Science of Fractal Images, Springer, (lire en ligne), p. 278.
- (en) Arthur Butz, « Alternative algorithm for Hilbert’s space filling curve », IEEE Trans. On Computers, vol. 20, , p. 424-442.
Voir aussi
[modifier | modifier le code]Articles connexes
[modifier | modifier le code]Liens externes
[modifier | modifier le code]- (en) Eric W. Weisstein, « Hilbert Curve », sur MathWorld
- (en) Plane Filling Curves sur cut-the-knot