<<

Algorithms for Scientific Computing Space-Filling

Michael Bader Technical University of Munich Summer 2017 Start: Morton Order / Cantor’s Mapping

00 01 0000 0001 0100 0101

0010 0011 0110 0111

1000 1001 1100 1101

10 11 1010 1011 1110 1111

Questions: • Can this mapping lead to a contiguous “”? • i.e.: Can we find a continuous mapping? • and: Can this continuous mapping fill the entire square?

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 2 Morton Order and Cantor’s Mapping

Georg Cantor (1877):

 0.0110 ...  0.01111001 ... → 0.1101 ...

• bijective mapping [0, 1] → [0, 1]2 • proved identical of [0, 1] and [0, 1]2 • provoked the question: is there a continuous mapping? (i.e. a curve)

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 3 History of Space-Filling Curves

1877: finds a bijective mapping from the unit interval [0, 1] into the unit square [0, 1]2. 1879: Eugen Netto proves that a bijective mapping f : I → Q ⊂ Rn can not be continuous (i.e., a curve) at the same time (as long as Q has a smooth boundary). 1886: rigorous definition of curves introduced by Camille Jordan 1890: Giuseppe Peano constructs the first space-filling curves. 1890: Hilbert gives a geometric construction of Peano’s curve; and introduces a new example – the 1904: Lebesgue curve 1912: Sierpinski curve

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 4 Part I

Space-Filling Curves

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 5 What is a Curve?

Definition (Curve) n As a curve, we define the image f∗(I) of a continuous mapping f : I → R . x = f (t), t ∈ I, is called parameter representation of the curve.

With: • I ⊂ R and I is compact, usually I = [0, 1]. • the image f∗(I) of the mapping f∗ is defined as n f∗(I) := {f (t) ∈ R | t ∈ I}. • Rn may be replaced by any Euklidian vector space (norm & scalar product required).

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 6 What is a Space-filling Curve?

Definition (Space-filling Curve) n Given a mapping f : I → R , then the corresponding curve f∗(I) is called a space-filling curve, if the Jordan content (area, volume, . . . ) of f∗(I) is larger than 0.

Comments: • assume f : I → Q ⊂ Rn to be surjective (i.e., every element in Q occurs as a value of f );

then, f∗(I) is a space-filling curve, if the area (volume) of Q is positive. • if the domain Q has a smooth boundary, then there can be no bijective n mapping f : I → Q ⊂ R , such that f∗(I) is a space-filling curve (theorem: E. Netto, 1879).

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 7 Remember: Construction of the Hilbert Order

Incremental construction of the Hilbert order: • start with the basic pattern on 4 subsquares • combine four numbering patterns to obtain a twice-as-large pattern • proceed with further iterations

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 8 Remember: Construction of the Hilbert Order

Recursive construction of the Hilbert order: • start with the basic pattern on 4 subsquares • for an existing grid and Hilbert order: split each cell into 4 congruent subsquares • order 4 subsquares following the rotated basic pattern, such that a contiguous order is obtained

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 8 Definition of the Hilbert Curve’s Mapping

Definition: (Hilbert curve) • each parameter t ∈ I := [0, 1] is contained in a sequence of intervals

I ⊃ [a1, b1] ⊃ ... ⊃ [an, bn] ⊃ ...,

where each interval results from a division-by-four of the previous interval. • each such sequence of intervals can be uniquely mapped to a corresponding sequence of 2D intervals (subsquares) → “uniquely mapped” based on grammar for Hilbert order • the 2D sequence of intervals converges to a unique point q in q ∈ Q := [0, 1] × [0, 1] – q is defined as h(t).

Theorem h : I → Q defines a space-filling curve, the Hilbert curve.

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 9 Proof: h defines a Space-filling Curve

We need to prove: • h is a mapping, i.e. each t ∈ I has a unique function value h(t) → OK, if h(t) is independent of the choice of the sequence of intervals (see next chapter) • h: I → Q is surjective: • for each point q ∈ Q, we can construct an appropriate sequence of 2D-intervals • the 2D sequence corresponds in a unique way to a sequence of intervals in I – this sequence defines an original value of q ⇒ every q ∈ Q occurs as an image point. • h is continuous

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 10 Continuity of the Hilbert Curve

A function f : I → Rn is uniformly continuous, if for each  > 0 a δ > 0 exists, such that

for all t1, t2 ∈ I with |t1 − t2| < δ, the following inequality holds:

kf (t1) − f (t2)k2 < 

Strategy for the proof: For any given parameters t1, t2, we compute an estimate for the distance kh(t1) − h(t2)k2 (functional dependence on |t1 − t2|). ⇒ for any given , we can then compute a suitable δ

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 11 Continuity of the Hilbert Curve (2)

−n • given: t1, t2 ∈ I; choose an n, such that |t1 − t2| < 4 • in the n-th iteration of the interval sequence, all interval are of length 4−n ⇒ [t1, t2] overlaps at most two neighbouring(!) intervals.

• due to construction of the Hilbert curve, the values h(t1) and h(t2) will be in neighbouring subsquares with face length 2−n. • the two neighbouring√ subsquares build a rectangle with a diagonal of −n length 2 · 5; √ −n therefore: kh(t1) − h(t2)k2 ≤ 2 5 √ For a given  > 0, we choose an n, such that 2−n 5 < . −n Using that n, we choose√ δ := 4 ; then, for all t1, t2 with |t1 − t2| < δ, we get: −n kh(t1) − h(t2)k2 ≤ 2 5 < . Which proves the continuity!

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 12 Part II

Arithmetisation of Space-Filling Curves

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 13 Space-filling Orders – Required Algorithms

Traversal of h-indexed objects:

• given a set of objects with “positions” pi ∈ Q • ¯−1 ¯−1 traverse all objects, such that h (pi0 ) < h (pi1 ) < . . . • solved by grammar representation

Compute mapping: • for a given index t ∈ I, compute the image h(t)

Compute the index of a given point: • given p ∈ Q, find a parameter t, such that h(t) = p • problem: inverse of h is not unique (h not bijective!) • define a “technically unique” inverse mapping h¯−1

Mapping and index computation required for random access to a data structure!

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 14 Arithmetic Formulation of the Hilbert Curve

Idea: • interval sequence within the parameter interval I corresponds to a quaternary representation; e.g.:

 1 2   3  4 , 4 = [04.1, 04.2] , 4 , 1 = [04.3, 14.0] • self-similarity: every subsquare of the target domain contains a scaled, translated, and rotated/reflected Hilbert curve.

⇒ Construction of the arithmetic representation: • find quaternary representation of the parameter • use quaternary coefficients to determine the required sequence of operations

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 15 Arithmetic Formulation of the Hilbert Curve (2)

Recursive approach:

h(04.q1q2q3q4 ...) = Hq1 ◦ h(04.q2q3q4 ...)

• ˜t = 04.q2q3q4 ... is the relative parameter in the subinterval [04.q1, 04.(q1 + 1)]

• h(˜t) = h(04.q2q3q4 ...) is the relative position of the curve point in the subsquare ˜ • Hq1 transforms h(t) to its correct position in the unit square: – rotation – translation • expanding the equation leads to:

h(04.q1q2q3q4 ...) = Hq1 ◦ Hq2 ◦ Hq3 ◦ Hq4 ◦ · · ·

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 16 Arithmetic Formulation of the Hilbert Curve (3)

If t is given in quaternary digits, i.e. t = 04.q1q2q3q4 ..., then h(t) may be represented as

0 h(0 .q q q q ...) = H ◦ H ◦ H ◦ H ◦ · · · 4 1 2 3 4 q1 q2 q3 q4 0

using the following operators: ! !  x  1 y  x  1 x H := → 2 H := → 2 0 y 1 1 y 1 1 2 x 2 y + 2 ! !  x  1 x + 1  x  − 1 y + 1 H := → 2 2 H := → 2 2 y 1 1 3 y 1 1 2 y + 2 − 2 x + 2

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 17 Matrix Form of the Operators H0,..., H3

In matrix notation, the operators H0,..., H3 are:

 1     1      0 2 x 2 0 x 0 H0 := 1 H1 := 1 + 1 2 0 y 0 2 y 2 !  1 0  x  1  0 − 1  x   1  H := 2 + 2 H := 2 + 2 0 1 y 1 3 − 1 0 y 1 2 2 2 2

Governing operations: • 1 scale with factor 2  0  • translate start of the curve, e.g. + 1 2 • reflect at x and y axis (for H3)

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 18 A First Comment Concerning Uniqueness

Question: Are the values h(t) independent of the choice of quaternary representation of t concerning trailing zeros:

h(04.q1 ... qn) = h(04.q1 ... qn000 ...),

Outline of the proof: n n  x  1. compute the limit lim H0 , or lim H ; n→∞ n→∞ 0 y     Result: lim Hn x = 0 n→∞ 0 y 0

 0   0   0  2. show: 0 is a fixpoint of H0, i. e. H0 0 = 0 .

⇒ independence of trailing zeros, as Hqn is applied to the fixpoint!

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 19 A Second Comment Concerning Uniqueness

Question: Are the values h(t) independent of the choice of quaternary representation of t, as in:

h(04.q1 ... qn) = h(04.q1 ... qn−1(qn − 1)333 ...), qn 6= 0

(if qn = 0, then consider 04.q1 ... qn = 04.q1 ... qn−1) Outline of the proof: n n 1. compute the limits lim H0 and lim H3 . n→∞ n→∞

2. for qn = 1, 2, 3, show that

n n Hqn ◦ lim H0 = Hqn−1 ◦ lim H3 n→∞ n→∞

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 20 Algorithm to Compute the Hilbert Mapping

Task: given a parameter t, find h(t) = (x, y) ∈ Q

Most important subtasks: 1. compute quaternary digits – use multiply by 4:

4 · 04.q1q2q3q4 ... = (q1.q2q3q4 ... )4 and cut off the integer part

2. apply operators Hq in the correct sequence – use recursion:

0 h(0 .q q q q ...) = H ◦ H ◦ H ◦ H ◦ · · · 4 1 2 3 4 q1 q2 q3 q4 0

3. stop recursion, when a given tolerance is reached ⇒ track size of interval or set number of digits

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 21 Implementation of the Hilbert Mapping

Algorithm 1 hilbert(t, eps) 1: if eps > 1 then 2: return (0, 0) 3: else 4: q ← floor(4 ∗ t) 5: r ← 4 ∗ t − q 6: (x, y) ← hilbert(r, 2 ∗ eps) 7: switch q do 8: case q = 0: return (y/2, x/2) 9: case q = 1: return (x/2, y/2 + 0.5) 10: case q = 2: return (x/2 + 0.5, y/2 + 0.5) 11: case q = 3: return (−y/2 + 1.0, −x/2 + 0.5) 12: end 13: end if

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 22 Computing the Inverse Mapping

Task: find a parameter t, such that h(t) = (x, y) for a given (x, y) ∈ Q

Problem: h not bijective; hence, t is not unique ⇒ a strict inverse mapping h−1 does not exist ⇒ instead, compute a “technically unique” inverse h¯−1

Recursive Idea: • determine the subsquare that contains (x, y)

• transform (using the inverse operations of H0,..., H3) the point (x, y) into the original domain → (x˜, y˜) • recursively compute a parameter ˜t that is mapped to (x˜, y˜) • depending on the subsquare, compute t from ˜t

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 23 Inverse Operators of H0,..., H3

Example → compute inverse of operator H0: !  x   x˜  1 y˜  x˜   2y  = H = 2 ⇒ = y 0 y˜ 1 ˜ y˜ 2x 2 x

By similar computations:

 x   2y   x   2x  H−1 := → H−1 := → 0 y 2x 1 y 2y − 1

 x   2x − 1   x   −2y + 1  H−1 := → H−1 := → 2 y 2y − 1 3 y −2x + 2

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 24 Algorithm to Compute the Inverse Mapping

h¯−1 :=proc(x, y) (1) determine the subsquare q ∈ {0,..., 3} by checking 1 1 x <> 2 and y <> 2 : 1 2 0 3

1 (treat cases x, y = 2 in a unique way: either < or > ⇒ technically unique inverse) −1 (2) set (x˜, y˜) := Hq (x, y) (3) recursively compute ˜t := h¯−1(x˜, y˜) 1 ˜ (4) return t := 4 q + t as value

(stopping criterion still to be added)

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 25 Implementation of the Inverse Hilbert Mapping

Algorithm 2 hilbertInverse(x, y, eps) 1: if eps > 1 then return 0 2: if x ≤ 0.5 then 3: if y ≤ 0.5 then 4: return (0 + hilbertInverse(2 ∗ y, 2 ∗ x, 4 ∗ eps))/4 5: else 6: return (1 + hilbertInverse(2 ∗ x, 2 ∗ y − 1, 4 ∗ eps))/4 7: end if 8: else 9: if y ≤ 0.5 then 10: return (3 + hilbertInverse(1 − 2 ∗ y, 2 − 2 ∗ x, 4 ∗ eps))/4 11: else 12: return (2 + hilbertInverse(2 ∗ x − 1, 2 ∗ y − 1, 4 ∗ eps))/4 13: end if 14: end if

Michael Bader | Algorithms for Scientific Computing | Space-Filling Curves | Summer 2017 26