Hilbert-kurven (også kendt som den rumfyldende Hilbert-kurve ) er en kontinuert fraktal rumfyldende kurve , første gang beskrevet af den tyske matematiker David Hilbert i 1891 [1] , som en variant af de rumfyldende Peano-kurver opdaget af Den italienske matematiker Giuseppe Peano i 1890 [2] .
Da kurven udfylder planet, er dens Hausdorff -dimension (præcis, dens billede er enhedskvadraten, hvis dimension er 2 under enhver dimensionsdefinition, og dens graf er et kompakt sæt homeomorf til et lukket enhedsinterval med Hausdorff-dimension 2).
er den th tilnærmelse til grænsekurven. Kurvens euklidiske længde er , det vil sige, at den vokser eksponentielt fra , samtidig med at den altid er indenfor et kvadrat med et begrænset areal.
Hilbert-kurve, første skridt
Hilbert-kurver, første og andet trin
Hilbert kurver, fra første til tredje trin
Tråd grafik
Hilbert kurve i farve
3D Hilbert-kurve
3D Hilbert-kurve i farve, der angiver sekvens
Animeret illustration, der viser passagen af cirkler langs en kurve.
Både den sande Hilbert-kurve og dens diskrete tilnærmelse giver en kortlægning af en-dimensionelle og to-dimensionelle rum, der bevarer lokale egenskaber ganske godt [3] . Hvis vi angiver med ( x , y ) koordinaterne for et punkt i enhedskvadraten, og med d afstanden langs kurven, hvor dette punkt nås, så vil punkter, der har værdier tæt på d , også have tætte værdier til ( x , y ). Det omvendte er ikke altid sandt - nogle punkter, der har tætte koordinater ( x , y ) har en ret stor forskel i afstand d .
På grund af denne lokalitetsegenskab er Hilbert-kurven meget brugt i computerprogrammer. For eksempel kan en række IP-adresser , der er tildelt computere, plottes ved hjælp af en Hilbert-kurve. Et program til at skabe en sådan repræsentation til bestemmelse af farven på prikkerne kan konvertere billedet fra todimensionelt til endimensionelt, og Hilbert-kurven bruges nogle gange på grund af lokalitetsegenskaben for denne kurve, da den giver dig mulighed for at holde tæt på IP-adresser lukker i en endimensionel repræsentation. Et sort-hvidt fotografi kan rystes ved at bruge færre gråtoner ved at føre den resterende lysstyrkeværdi til det næste punkt langs Hilbert-kurven. Hilbert-kurven bruges i dette tilfælde, fordi den ikke skaber de synlige overgange i lysstyrke, som frembringes ved progressiv konvertering. Højere-dimensionelle Hilbert-kurver er generaliseringer af grå koder og bruges nogle gange i lignende situationer til lignende formål. For multidimensionelle databaser foreslås det at bruge Hilbert-rækkefølgen i stedet for Z-rækkefølgen , da det giver bedre lokalitetsbevarelse. For eksempel er Hilbert-kurver blevet brugt til at komprimere og fremskynde R- træindekser [4] . Hilbert-kurver er også blevet brugt til at komprimere informationsdatabaser [5] [6] .
Det er nyttigt at have en algoritme, der tillader konvertering i begge retninger (både fra ( x , y ) til d og fra d til ( x , y )). I mange programmeringssprog foretrækkes iteration frem for rekursion. Det følgende C -program kortlægger i begge retninger ved hjælp af iteration og bitoperationer i stedet for rekursion. Programmet går ud på at opdele kvadratet i n x n celler (kvadrater med side 1), hvor n er en potens af to. Koordinater (0,0) hører til det nederste venstre hjørne, og ( n -1, n -1) hører til det øverste højre hjørne. Afstanden d måles fra nederste venstre hjørne (afstand 0) og vokser til nederste højre hjørne.
//Konverter (x,y) til d int xy2d ( int n , int x , int y ) { int rx , ry , s , d = 0 ; for ( s = n / 2 ; s > 0 ; s /= 2 ) { rx = ( x & s ) > 0 ; ry = ( y & s ) > 0 ; d += s * s * (( 3 * rx ) ^ ry ); rot ( s , & x , & y , rx , ry ); } returnere d ; } //Konverter d til (x,y) void d2xy ( int n , int d , int * x , int * y ) { int rx , ry , s , t = d ; * x = * y = 0 ; for ( s = 1 ; s < n ; s *= 2 ) { rx = 1 & ( t / 2 ); ry = 1 & ( t ^ rx ); rådne ( s , x , y , rx , ry ); * x += s * rx ; * y += s * ry ; t /= 4 ; } } //rotate/reflect the quadrant void rot ( int n , int * x , int * y , int rx , int ry ) { if ( ry == 0 ) { if ( rx == 1 ) { * x = n - 1 - * x ; * y = n - 1 - * y ; } // Byt x og y int t = * x ; * x = * y ; * y = t ; } }Programmet bruger konventionerne for C -sproget : &-tegnet betyder den bitvise AND (AND) operation, ^-tegnet betyder den bitvise XOR (OR), +=-tegnet betyder den variable additionsoperator, og /=-tegnet betyder variabel divisionsoperation.
Funktionen xy2d arbejder fra top til bund, startende fra de høje bits af x og y , og begynder at bygge d fra de høje bits. Funktionen d2xy arbejder i den modsatte retning, startende fra de lave bits af d og bygger x og y fra de lave bits. Begge funktioner bruger koordinatsystemets rotations- og reflektionsfunktion ( x , y ).
Begge algoritmer fungerer på samme måde. Hele pladsen betragtes som 4 2 x 2 områder Hvert område består af 4 mindre områder og så videre op til det endelige niveau. På niveau s har hver region s x s celler. Der er en enkelt FOR-løkke, der løber gennem niveauerne. Ved hver iteration lægges en værdi til d eller til x og y , som bestemmes af det område (ud af fire), hvor vi er på dette niveau. Regioner er givet ved et par ( rx , ry ), hvor rx og ry tager værdien 0 eller 1. Området er således defineret af 2 inputbits (enten to bits fra d , eller en bit fra x og y ), og de danner to output bits. Rotationsfunktionen kaldes også, så ( x , y ) kan bruges på næste niveau ved næste iteration. For xy2d starter den på det øverste niveau af hele firkanten og bevæger sig ned til det nederste niveau ned til de enkelte celler. For d2xy starter processen fra bunden af cellerne og bevæger sig op til en fuld firkant.
Det er muligt at implementere Hilbert-kurver effektivt, selvom området ikke danner en firkant [7] . Desuden er der nogle generaliseringer af Hilbert-kurver for højere dimensioner [8] [9] .
Oprettelsen af Hilbert-kurven kan omskrives til L-systemet .
Alfabet : A, B Konstanter : F + − Aksiom : A Regler : A→−BF+AFA+FB− B → + AF − BFB − FA+Her betyder F "gå fremad", "−" betyder drej 90° til venstre , "+" betyder drej 90° til højre (se skildpaddegrafik ), og A og B ignoreres ved tegning.
Arthur Butz [10] gav en algoritme til beregning af Hilbert-kurven i flerdimensionelle rum.
Bogen Graphics Gems II [11] diskuterer Hilbert-kurven og giver en implementering.
Baseret på Hilbert-kurven kan vibrator- eller trykte antennedesign implementeres [12] .
Kurver | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Definitioner | |||||||||||||||||||
Forvandlet | |||||||||||||||||||
Ikke-plan | |||||||||||||||||||
Flad algebraisk |
| ||||||||||||||||||
Flad transcendental |
| ||||||||||||||||||
fraktal |
|