Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Fun with Mazes
Hendrik Neumann
2
https://pragprog.com/titles/jbmaze/
Standing on the shoulders of giants (one in particular)
3
What is a Maze?
4
Some more..
5
grid
cells
walls
passages
Build mazes
6
Build mazes
7
For each cell in the grid,
randomly carve either north or
east.
• strong diagonal texture
tending toward the north-
east...
8
„every cell can reach every
other cell by exactly one path”
logical and mathematical purity
perfect but yet flawed
Perfe...
9
opposite of a perfect maze
„characterized by few (if any)
dead ends, and passages
forming loops”
multiple different path...
10
Easy by hand for a 4x4 maze ;-)
Computer should do the work:
Dijkstra
Solve a maze
11
Measures the shortest distance
between some starting point
(which we specify), and every
other cell in the maze.
• shor...
12
Measures the shortest distance
between some starting point
(which we specify), and every
other cell in the maze.
• shor...
13
Measures the shortest distance
between some starting point
(which we specify), and every
other cell in the maze.
• shor...
14
Measures the shortest distance
between some starting point
(which we specify), and every
other cell in the maze.
• shor...
15
Measures the shortest distance
between some starting point
(which we specify), and every
other cell in the maze.
• shor...
16
Finding the longest path in a
maze
• find the longest path
between two cells
• might not be the longest
path of the maz...
17
Finding the longest path in a
maze
• find the longest path
between two cells
• might not be the longest
path of the maz...
18
Finding the longest path in a
maze
• find the longest path
between two cells
• might not be the longest
path of the maz...
19
Finding the longest path in a
maze
• find the longest path
between two cells
• might not be the longest
path of the maz...
20
Color a maze
21
 coloring emphazises the maze‘s texture
Color a maze
Binary Tree Sidewinder Recursive
Backtracker
22
Texture in a maze is a result of
the bias of the algorithm.
Other signs might be long
passages or the amount of dead
en...
23
Aldous-Broder Wilson‘s
Unbiased mazes
Random walk  for unbiased algorithm
24
Starting at an arbitrary location
in the grid, move randomly from
cell to cell.
If moving to a previously
unvisited cel...
25
1. Pick a cell at random
2. Pick a random neighbour: east – not visited yet, link cells together
3. Pick next random ne...
26
Aldous-Broder
4. Pick a random neighbour: west – not visited yet: link cells together
5. Pick a random neighbour: north...
27
Starts quickly but can take a
very long time to finish.
Mazes are guaranteed perfectly
random.
Unbiased – no preference...
28
Random Walks…
• ..can take a long time (Aldous-Broder)
• ..can need a lot of memory (Wilson‘s)
Bias not automatically a...
29
Starting at an arbitrary location,
perform a random walk,
avoiding previously visited cells.
When no more moves are
pos...
30
• Start at A4. Put current cell on the stack
• Choose an unvisited neighbor randomly - Carve a path and push it
on the ...
31
• Continue with the process.. Put the cells on the stack
• We‘re stuck - B4 has no unvisited neighbors
Recursive Backtr...
32
• Pop the dead end from the stack  C4 is again our current cell
• C4 has an unvisited neighbor  D4
Recursive Backtrac...
33
• Continue until every cell has been visited
• Final cell is always a dead end  backtrack to the beginning.
Recursive ...
34
• Stack is empty. Algorithm is finished.
Recursive Backtracker
stack
deapth-first search
35
• long, twisty passages with
relatively few dead ends
• fast - as it visits every cell
only twice
• needs considerably ...
36
ABAP
• colored mazes in html view
• more 7.4/7.5 magic
Github
Javascript mazes… and UI
• D3.js
• openUI5
Future with Ma...
37
More is possible…
Thanks
Hendrik Neumann
h.neumann@reply.de
Nächste SlideShare
Wird geladen in …5
×

Fun with Mazes

806 Aufrufe

Veröffentlicht am

SAP Inside Track Munich 2015

Veröffentlicht in: Technologie
  • Der Vortrag war super!Ist der ABAP und OPENUI5 Code, der auf den Folien erwähnt wird, verfügbar?
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Gehören Sie zu den Ersten, denen das gefällt!

Fun with Mazes

  1. 1. Fun with Mazes Hendrik Neumann
  2. 2. 2 https://pragprog.com/titles/jbmaze/ Standing on the shoulders of giants (one in particular)
  3. 3. 3 What is a Maze?
  4. 4. 4 Some more..
  5. 5. 5 grid cells walls passages Build mazes
  6. 6. 6 Build mazes
  7. 7. 7 For each cell in the grid, randomly carve either north or east. • strong diagonal texture tending toward the north- east corner of the grid. • corridors run the length of the northern row and the eastern column. Binary Tree
  8. 8. 8 „every cell can reach every other cell by exactly one path” logical and mathematical purity perfect but yet flawed Perfect maze
  9. 9. 9 opposite of a perfect maze „characterized by few (if any) dead ends, and passages forming loops” multiple different paths Braid maze
  10. 10. 10 Easy by hand for a 4x4 maze ;-) Computer should do the work: Dijkstra Solve a maze
  11. 11. 11 Measures the shortest distance between some starting point (which we specify), and every other cell in the maze. • shortest path from a chosen endpoint to our starting point Dijstra‘s Algorithm 0
  12. 12. 12 Measures the shortest distance between some starting point (which we specify), and every other cell in the maze. • shortest path from a chosen endpoint to our starting point Dijstra‘s Algorithm 0 1
  13. 13. 13 Measures the shortest distance between some starting point (which we specify), and every other cell in the maze. • shortest path from a chosen endpoint to our starting point Dijstra‘s Algorithm 0 1 2 2
  14. 14. 14 Measures the shortest distance between some starting point (which we specify), and every other cell in the maze. • shortest path from a chosen endpoint to our starting point Dijstra‘s Algorithm 0 1 2 3 4 3 2 3 8 5 4 3 6 7 6 5 4 5 6 7 6 7 8 7 8
  15. 15. 15 Measures the shortest distance between some starting point (which we specify), and every other cell in the maze. • shortest path from a chosen endpoint to our starting point • walk backward from end to start. Dijstra‘s Algorithm 0 1 2 3 4 3 2 3 8 5 4 3 6 7 6 5 4 5 6 7 6 7 8 7 8
  16. 16. 16 Finding the longest path in a maze • find the longest path between two cells • might not be the longest path of the maze! – but just part of it • run Dijstra again in the other direction Dijstra‘s Algorithm
  17. 17. 17 Finding the longest path in a maze • find the longest path between two cells • might not be the longest path of the maze! – but just part of it • run Dijstra again in the other direction Dijstra‘s Algorithm
  18. 18. 18 Finding the longest path in a maze • find the longest path between two cells • might not be the longest path of the maze! – but just part of it • run Dijstra again in the other direction Dijstra‘s Algorithm
  19. 19. 19 Finding the longest path in a maze • find the longest path between two cells • might not be the longest path of the maze! – but just part of it • run Dijstra again in the other direction Dijstra‘s Algorithm
  20. 20. 20 Color a maze
  21. 21. 21  coloring emphazises the maze‘s texture Color a maze Binary Tree Sidewinder Recursive Backtracker
  22. 22. 22 Texture in a maze is a result of the bias of the algorithm. Other signs might be long passages or the amount of dead ends. Not automatically a bad thing! Example: 2x2 grid perfect maze  four possibilities: • Binary Tree: A, B  50% • Sidewinder: A, B, C  75% Bias Random walk  for unbiased algorithm
  23. 23. 23 Aldous-Broder Wilson‘s Unbiased mazes Random walk  for unbiased algorithm
  24. 24. 24 Starting at an arbitrary location in the grid, move randomly from cell to cell. If moving to a previously unvisited cell, carve a passage to it. End when all cells have been visited. Aldous-Broder
  25. 25. 25 1. Pick a cell at random 2. Pick a random neighbour: east – not visited yet, link cells together 3. Pick next random neighbour.. Aldous-Broder
  26. 26. 26 Aldous-Broder 4. Pick a random neighbour: west – not visited yet: link cells together 5. Pick a random neighbour: north – already visited: don‘t link cells 6. Finish the maze by randomly visiting neighbours until all are visited
  27. 27. 27 Starts quickly but can take a very long time to finish. Mazes are guaranteed perfectly random. Unbiased – no preference to any particular texture or feature. Aldous-Broder
  28. 28. 28 Random Walks… • ..can take a long time (Aldous-Broder) • ..can need a lot of memory (Wilson‘s) Bias not automatically a bad thing! Let’s look a algorithms that add constraints to random walks: • Hunt-and-Kill • Recursive Backtracker Adding Constraints to Random Walks
  29. 29. 29 Starting at an arbitrary location, perform a random walk, avoiding previously visited cells. When no more moves are possible, backtrack to the most recently visited cell and resume the random walk from there. The algorithm ends when it tries to backtrack from the cell where it started. Recursive Backtrack
  30. 30. 30 • Start at A4. Put current cell on the stack • Choose an unvisited neighbor randomly - Carve a path and push it on the stack. A3 = current cell Recursive Backtracker stack A4 stack  A3 A4 stack
  31. 31. 31 • Continue with the process.. Put the cells on the stack • We‘re stuck - B4 has no unvisited neighbors Recursive Backtracker stack C4 C3 … A3 A4 stack B4 C4 C3 … A3 A4
  32. 32. 32 • Pop the dead end from the stack  C4 is again our current cell • C4 has an unvisited neighbor  D4 Recursive Backtracker stack B4 C4 C3 … A3 A4 stack D4 C4 C3 … A3 A4
  33. 33. 33 • Continue until every cell has been visited • Final cell is always a dead end  backtrack to the beginning. Recursive Backtracker stack A2 A1 B1 … A3 A4 stack A2 A1 B1 … A3 A4
  34. 34. 34 • Stack is empty. Algorithm is finished. Recursive Backtracker stack deapth-first search
  35. 35. 35 • long, twisty passages with relatively few dead ends • fast - as it visits every cell only twice • needs considerably memory to keep track of visited cells Recursive Backtrack
  36. 36. 36 ABAP • colored mazes in html view • more 7.4/7.5 magic Github Javascript mazes… and UI • D3.js • openUI5 Future with Mazes
  37. 37. 37 More is possible…
  38. 38. Thanks Hendrik Neumann h.neumann@reply.de

×