invasion percolation: tuning copyright © software carpentry 2010 this work is licensed under the...
TRANSCRIPT
![Page 1: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/1.jpg)
Invasion Percolation: Tuning
Copyright © Software Carpentry 2010
This work is licensed under the Creative Commons Attribution License
See http://software-carpentry.org/license.html for more information.
Program Design
![Page 2: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/2.jpg)
Program Design Invasion Percolation Tuning
Our program works correctly
![Page 3: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/3.jpg)
Program Design Invasion Percolation Tuning
Our program works correctly
At least, it passes all our tests
![Page 4: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/4.jpg)
Program Design Invasion Percolation Tuning
Our program works correctly
At least, it passes all our tests
Next step: figure out if we need to make it faster
![Page 5: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/5.jpg)
Program Design Invasion Percolation Tuning
Our program works correctly
At least, it passes all our tests
Next step: figure out if we need to make it faster
Spend time on other things if it's fast enough
![Page 6: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/6.jpg)
Program Design Invasion Percolation Tuning
How do we measure a program's speed?
![Page 7: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/7.jpg)
Program Design Invasion Percolation Tuning
How do we measure a program's speed?
Average of many running times on various grids
![Page 8: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/8.jpg)
Program Design Invasion Percolation Tuning
How do we measure a program's speed?
Average of many running times on various grids
How do we predict running time on bigger grids?
![Page 9: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/9.jpg)
Program Design Invasion Percolation Tuning
How do we measure a program's speed?
Average of many running times on various grids
How do we predict running time on bigger grids?
Use asymptotic analysis
![Page 10: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/10.jpg)
Program Design Invasion Percolation Tuning
How do we measure a program's speed?
Average of many running times on various grids
How do we predict running time on bigger grids?
Use asymptotic analysis
One of the most powerful theoretical tools in
computer science
![Page 11: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/11.jpg)
Program Design Invasion Percolation Tuning
N×N grid has
N2 cells
5 3 7 2 6 1 1 3 4
8 5 6 5 7 2 3 6 2
2 5 8 7 5 5 6 5 9
5 2 6 4 9 3 9 6 5
4 6 8 8 5 9 7 3 9
7 6 4 5 1 2 6 8 5
5 4 2 5 8 5 5 5 8
5 7 5 1 5 3 8 5 5
4 5 1 9 7 8 6 5 1
N
N
![Page 12: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/12.jpg)
Program Design Invasion Percolation Tuning
N×N grid has
N2 cells
Must fill at least N
to reach
boundary
5 3 7 2 -1 1 1 3 4
8 5 6 5 -1 2 3 6 2
2 5 8 7 -1 5 6 5 9
5 2 6 4 -1 3 9 6 5
4 6 8 8 -1 9 7 3 9
7 6 4 5 1 2 6 8 5
5 4 2 5 8 5 5 5 8
5 7 5 1 5 3 8 5 5
4 5 1 9 7 8 6 5 1
N
N
![Page 13: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/13.jpg)
Program Design Invasion Percolation Tuning
N×N grid has
N2 cells
Must fill at least N
to reach
boundary
Can fill at most
(N-2)2+1 = N2-
4N+5
5 3 7 2 -1 1 1 3 4
8 -1 -1 -1 -1 -1 -1 -1 2
2 -1 -1 -1 -1 -1 -1 -1 9
5 -1 -1 -1 -1 -1 -1 -1 5
4 -1 -1 -1 -1 -1 -1 -1 9
7 -1 -1 -1 -1 -1 -1 -1 5
5 -1 -1 -1 -1 -1 -1 -1 8
5 -1 -1 -1 -1 -1 -1 -1 5
4 5 1 9 7 8 6 5 1
N
N
![Page 14: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/14.jpg)
Program Design Invasion Percolation Tuning
N×N grid has
N2 cells
Must fill at least N
to reach
boundary
Can fill at most
(N-2)2+1 = N2-
4N+5
For large N, this is
approximately N2
5 3 7 2 -1 1 1 3 4
8 -1 -1 -1 -1 -1 -1 -1 2
2 -1 -1 -1 -1 -1 -1 -1 9
5 -1 -1 -1 -1 -1 -1 -1 5
4 -1 -1 -1 -1 -1 -1 -1 9
7 -1 -1 -1 -1 -1 -1 -1 5
5 -1 -1 -1 -1 -1 -1 -1 8
5 -1 -1 -1 -1 -1 -1 -1 5
4 5 1 9 7 8 6 5 1
N
N
![Page 15: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/15.jpg)
Program Design Invasion Percolation Tuning
Program looks at
N2 cells to find
the
next cell to fill
N
N
![Page 16: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/16.jpg)
Program Design Invasion Percolation Tuning
Program looks at
N2 cells to find
the
next cell to fill
Best case: N·N2 or
N3 steps in total
N
N
![Page 17: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/17.jpg)
Program Design Invasion Percolation Tuning
Program looks at
N2 cells to find
the
next cell to fill
Best case: N·N2
or N3 steps in total
Worst case: N2·N2
or N4 stepsN
N
![Page 18: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/18.jpg)
Program Design Invasion Percolation Tuning
Program looks at
N2 cells to find
the
next cell to fill
Best case: N·N2
or N3 steps in total
Worst case: N2·N2
or N4 stepsOuch
N
N
![Page 19: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/19.jpg)
Program Design Invasion Percolation Tuning
Averaging exponent to N3.5 doesn't make sense...
![Page 20: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/20.jpg)
Program Design Invasion Percolation Tuning
Averaging exponent to N3.5 doesn't make sense...
...but it will illustrate our problem
![Page 21: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/21.jpg)
Program Design Invasion Percolation Tuning
Averaging exponent to N3.5 doesn't make sense...
...but it will illustrate our problem
Grid Size Time
N T
2N 11.3 T
3N 46.7 T
4N 128 T
![Page 22: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/22.jpg)
Program Design Invasion Percolation Tuning
Grid Size Time Which Is...
N T 1 sec
2N 11.3 T 11 sec
3N 46.7 T 47 sec
4N 128 T 2 min
10N 3162 T 52 min
50N 883883 T 1 day
100N 107 T 115 days
Averaging exponent to N3.5 doesn't make sense...
...but it will illustrate our problem
![Page 23: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/23.jpg)
Program Design Invasion Percolation Tuning
Idea #1:
Why are we
looking
at all the cells?
N
N
![Page 24: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/24.jpg)
Program Design Invasion Percolation Tuning
Idea #1:
Why are we
looking
at all the cells?
Just look at cells
that might be
adjacentN
N
![Page 25: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/25.jpg)
Program Design Invasion Percolation Tuning
Idea #1:
Why are we
looking
at all the cells?
Just look at cells
that might be
adjacent
Keep track of min
and max X and Y
and loop over
those
N
N
![Page 26: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/26.jpg)
Program Design Invasion Percolation Tuning
But on average,
the
filled region is
half
the size of the
grid
N
N
![Page 27: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/27.jpg)
Program Design Invasion Percolation Tuning
But on average,
the
filled region is
half
the size of the
grid
N/2 · N/2 = N2/4N
N
![Page 28: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/28.jpg)
Program Design Invasion Percolation Tuning
But on average,
the
filled region is
half
the size of the
grid
N/2 · N/2 = N2/4
115 days → 29
days
N
N
![Page 29: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/29.jpg)
Program Design Invasion Percolation Tuning
But on average,
the
filled region is
half
the size of the
grid
N/2 · N/2 = N2/4
115 days → 29
days
148N×148N grid
eats that up
N
N
![Page 30: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/30.jpg)
Program Design Invasion Percolation Tuning
But on average,
the
filled region is
half
the size of the
grid
N/2 · N/2 = N2/4
115 days → 29
days
148N×148N grid
eats that up
Need to attack the exponent
N
N
![Page 31: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/31.jpg)
Program Design Invasion Percolation Tuning
If we just added
this cell...
N
N
![Page 32: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/32.jpg)
Program Design Invasion Percolation Tuning
If we just added
this cell...
...why check
these
cells again?
N
N
![Page 33: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/33.jpg)
Program Design Invasion Percolation Tuning
N
N
If we just added
this cell...
...why check
these
cells again?
We should
already
know that these
are candidates
![Page 34: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/34.jpg)
Program Design Invasion Percolation Tuning
N
N
If we just added
this cell...
...why check
these
cells again?
We should
already
know that these
are
candidates
This is the only
new
candidate cell
![Page 35: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/35.jpg)
Program Design Invasion Percolation Tuning
Big idea: trade memory for time
![Page 36: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/36.jpg)
Program Design Invasion Percolation Tuning
Big idea: trade memory for time
Record redundant information in order to save
re-calculation
![Page 37: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/37.jpg)
Program Design Invasion Percolation Tuning
Big idea: trade memory for time
Record redundant information in order to save
re-calculation
In this case, keep a list of cells on the boundary
![Page 38: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/38.jpg)
Program Design Invasion Percolation Tuning
Big idea: trade memory for time
Record redundant information in order to save
re-calculation
In this case, keep a list of cells on the boundary
Each time a cell is filled, check its neighbors
![Page 39: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/39.jpg)
Program Design Invasion Percolation Tuning
Big idea: trade memory for time
Record redundant information in order to save
re-calculation
In this case, keep a list of cells on the boundary
Each time a cell is filled, check its neighbors
If already in the list, do nothing
![Page 40: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/40.jpg)
Program Design Invasion Percolation Tuning
Big idea: trade memory for time
Record redundant information in order to save
re-calculation
In this case, keep a list of cells on the boundary
Each time a cell is filled, check its neighbors
If already in the list, do nothing
Otherwise, add to list
![Page 41: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/41.jpg)
Program Design Invasion Percolation Tuning
Big idea: trade memory for time
Record redundant information in order to save
re-calculation
In this case, keep a list of cells on the boundary
Each time a cell is filled, check its neighbors
If already in the list, do nothing
Otherwise, add to list
Insert into list so that low-valued cells at front
![Page 42: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/42.jpg)
Program Design Invasion Percolation Tuning
Big idea: trade memory for time
Record redundant information in order to save
re-calculation
In this case, keep a list of cells on the boundary
Each time a cell is filled, check its neighbors
If already in the list, do nothing
Otherwise, add to list
Insert into list so that low-valued cells at front
Making it easy to choose next cell to fill
![Page 43: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/43.jpg)
Program Design Invasion Percolation Tuning
0 1 2 3 4 5 6 7 8
5 3 7 2 6 1 1 3 4 8
8 5 6 5 7 2 3 6 2 7
2 5 8 7 5 5 6 5 9 6
5 2 6 4 9 3 9 6 5 5
4 6 8 8 5 9 7 3 9 4
7 6 4 5 1 2 6 8 5 3
5 4 2 5 8 5 5 5 8 2
5 7 5 1 5 3 8 5 5 1
4 5 1 9 7 8 6 5 1 0
edge = []
List of cells on
edge
is initially empty
![Page 44: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/44.jpg)
Program Design Invasion Percolation Tuning
0 1 2 3 4 5 6 7 8
5 3 7 2 6 1 1 3 4 8
8 5 6 5 7 2 3 6 2 7
2 5 8 7 5 5 6 5 9 6
5 2 6 4 9 3 9 6 5 5
4 6 8 8 -1 9 7 3 9 4
7 6 4 5 1 2 6 8 5 3
5 4 2 5 8 5 5 5 8 2
5 7 5 1 5 3 8 5 5 1
4 5 1 9 7 8 6 5 1 0
edge = [(1,4,3), (8,3,4), (9,4,5), (9,5,4)]
List of cells on
edge
is initially empty
Fill center cell
and
add its neighbors
![Page 45: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/45.jpg)
Program Design Invasion Percolation Tuning
0 1 2 3 4 5 6 7 8
5 3 7 2 6 1 1 3 4 8
8 5 6 5 7 2 3 6 2 7
2 5 8 7 5 5 6 5 9 6
5 2 6 4 9 3 9 6 5 5
4 6 8 8 -1 9 7 3 9 4
7 6 4 5 1 2 6 8 5 3
5 4 2 5 8 5 5 5 8 2
5 7 5 1 5 3 8 5 5 1
4 5 1 9 7 8 6 5 1 0
edge = [(1,4,3), (8,3,4), (9,4,5), (9,5,4)]
value
coordinates
List of cells on
edge
is initially empty
Fill center cell
and
add its neighbors
![Page 46: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/46.jpg)
Program Design Invasion Percolation Tuning
0 1 2 3 4 5 6 7 8
5 3 7 2 6 1 1 3 4 8
8 5 6 5 7 2 3 6 2 7
2 5 8 7 5 5 6 5 9 6
5 2 6 4 9 3 9 6 5 5
4 6 8 8 -1 9 7 3 9 4
7 6 4 5 -1 2 6 8 5 3
5 4 2 5 8 5 5 5 8 2
5 7 5 1 5 3 8 5 5 1
4 5 1 9 7 8 6 5 1 0
edge = [(8,3,4), (9,4,5), (9,5,4)]
Take first cell
from
list and fill it
![Page 47: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/47.jpg)
Program Design Invasion Percolation Tuning
0 1 2 3 4 5 6 7 8
5 3 7 2 6 1 1 3 4 8
8 5 6 5 7 2 3 6 2 7
2 5 8 7 5 5 6 5 9 6
5 2 6 4 9 3 9 6 5 5
4 6 8 8 -1 9 7 3 9 4
7 6 4 5 -1 2 6 8 5 3
5 4 2 5 8 5 5 5 8 2
5 7 5 1 5 3 8 5 5 1
4 5 1 9 7 8 6 5 1 0
edge = [(2,5,3), (5,3,3), (8,4,2), (8,3,4),
(9,4,5), (9,5,4)]
Take first cell
from
list and fill it
Add its neighbors
to the list
![Page 48: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/48.jpg)
Program Design Invasion Percolation Tuning
0 1 2 3 4 5 6 7 8
5 3 7 2 6 1 1 3 4 8
8 5 6 5 7 2 3 6 2 7
2 5 8 7 5 5 6 5 9 6
5 2 6 4 9 3 9 6 5 5
4 6 8 8 -1 9 7 3 9 4
7 6 4 5 -1 -1 6 8 5 3
5 4 2 5 8 5 5 5 8 2
5 7 5 1 5 3 8 5 5 1
4 5 1 9 7 8 6 5 1 0
edge = [(5,3,3), (5,5,2), (6,6,3), (8,4,2), (8,3,4),
(9,4,5), (9,5,4)]
Take, fill, and add
again
![Page 49: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/49.jpg)
Program Design Invasion Percolation Tuning
0 1 2 3 4 5 6 7 8
5 3 7 2 6 1 1 3 4 8
8 5 6 5 7 2 3 6 2 7
2 5 8 7 5 5 6 5 9 6
5 2 6 4 9 3 9 6 5 5
4 6 8 8 -1 9 7 3 9 4
7 6 4 5 -1 -1 6 8 5 3
5 4 2 5 8 5 5 5 8 2
5 7 5 1 5 3 8 5 5 1
4 5 1 9 7 8 6 5 1 0
edge = [(5,3,3), (5,5,2), (6,6,3), (8,4,2), (8,3,4),
(9,4,5), (9,5,4)]
Take, fill, and add
again
Don't re-add cells
that are already
in
the list
![Page 50: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/50.jpg)
Program Design Invasion Percolation Tuning
0 1 2 3 4 5 6 7 8
5 3 7 2 6 1 1 3 4 8
8 5 6 5 7 2 3 6 2 7
2 5 8 7 5 5 6 5 9 6
5 2 6 4 9 3 9 6 5 5
4 6 8 8 -1 9 7 3 9 4
7 6 4 5 -1 -1 6 8 5 3
5 4 2 5 8 5 5 5 8 2
5 7 5 1 5 3 8 5 5 1
4 5 1 9 7 8 6 5 1 0
edge = [(5,3,3), (5,5,2), (6,6,3), (8,4,2), (8,3,4),
(9,4,5), (9,5,4)]
In case of ties,
find
all cells at the
front
of the list with the
lowest value...
![Page 51: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/51.jpg)
Program Design Invasion Percolation Tuning
0 1 2 3 4 5 6 7 8
5 3 7 2 6 1 1 3 4 8
8 5 6 5 7 2 3 6 2 7
2 5 8 7 5 5 6 5 9 6
5 2 6 4 9 3 9 6 5 5
4 6 8 8 -1 9 7 3 9 4
7 6 4 5 -1 -1 6 8 5 3
5 4 2 5 8 -1 5 5 8 2
5 7 5 1 5 3 8 5 5 1
4 5 1 9 7 8 6 5 1 0
edge = [(3,5,1), (5,3,3), (5,5,2), (6,6,3), (8,4,2),
(8,3,4), (9,4,5), (9,5,4)]
In case of ties,
find
all cells at the
front
of the list with the
lowest value...
...and select and
fill one of them
![Page 52: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/52.jpg)
Program Design Invasion Percolation Tuning
How quickly can we insert into a sorted list?
![Page 53: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/53.jpg)
Program Design Invasion Percolation Tuning
def insert(values, new_val):
'''Insert (v, x, y) tuple into list in right place.'''
i = 0
while i < len(values):
if values[i][0] >= new_val[0]:
break
values.insert(i, new_val)
How quickly can we insert into a sorted list?
![Page 54: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/54.jpg)
Program Design Invasion Percolation Tuning
def insert(values, new_val):
'''Insert (v, x, y) tuple into list in right place.'''
i = 0
while i < len(values):
if values[i][0] >= new_val[0]:
break
values.insert(i, new_val)
How quickly can we insert into a sorted list?
Works even if list is empty...
![Page 55: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/55.jpg)
Program Design Invasion Percolation Tuning
def insert(values, new_val):
'''Insert (v, x, y) tuple into list in right place.'''
i = 0
while i < len(values):
if values[i][0] >= new_val[0]:
break
values.insert(i, new_val)
How quickly can we insert into a sorted list?
Works even if list is empty...
...or new value greater than all values in list
![Page 56: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/56.jpg)
Program Design Invasion Percolation Tuning
If list has K values...
![Page 57: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/57.jpg)
Program Design Invasion Percolation Tuning
If list has K values...
...insertion takes on average K/2 steps
![Page 58: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/58.jpg)
Program Design Invasion Percolation Tuning
If list has K values...
...insertion takes on average K/2 steps
Our fractals fill about N1.5 cells...
![Page 59: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/59.jpg)
Program Design Invasion Percolation Tuning
If list has K values...
...insertion takes on average K/2 steps
Our fractals fill about N1.5 cells...
...and there are as many cells on the boundary
as there are in the fractal...
![Page 60: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/60.jpg)
Program Design Invasion Percolation Tuning
If list has K values...
...insertion takes on average K/2 steps
Our fractals fill about N1.5 cells...
...and there are as many cells on the boundary
as there are in the fractal...
...so this takes N1.5 · N1.5 = N3 steps
![Page 61: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/61.jpg)
Program Design Invasion Percolation Tuning
If list has K values...
...insertion takes on average K/2 steps
Our fractals fill about N1.5 cells...
...and there are as many cells on the boundary
as there are in the fractal...
...so this takes N1.5 · N1.5 = N3 steps
Not much of an improvement on N3.5
![Page 62: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/62.jpg)
Program Design Invasion Percolation Tuning
If list has K values...
...insertion takes on average K/2 steps
Our fractals fill about N1.5 cells...
...and there are as many cells on the boundary
as there are in the fractal...
...so this takes N1.5 · N1.5 = N3 steps
Not much of an improvement on N3.5
But there's a much faster way to insert
![Page 63: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/63.jpg)
Program Design Invasion Percolation Tuning
To look up a name in the phone book...
![Page 64: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/64.jpg)
Program Design Invasion Percolation Tuning
To look up a name in the phone book...
...open it in the middle
![Page 65: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/65.jpg)
Program Design Invasion Percolation Tuning
To look up a name in the phone book...
...open it in the middle
If the name there comes after the one you want,
go to the middle of the first half
![Page 66: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/66.jpg)
Program Design Invasion Percolation Tuning
To look up a name in the phone book...
...open it in the middle
If the name there comes after the one you want,
go to the middle of the first half
If it comes after the one you want, go to the
middle of the second half
![Page 67: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/67.jpg)
Program Design Invasion Percolation Tuning
To look up a name in the phone book...
...open it in the middle
If the name there comes after the one you want,
go to the middle of the first half
If it comes after the one you want, go to the
middle of the second half
Then repeat this procedure in that half
![Page 68: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/68.jpg)
Program Design Invasion Percolation Tuning
To look up a name in the phone book...
...open it in the middle
If the name there comes after the one you want,
go to the middle of the first half
If it comes after the one you want, go to the
middle of the second half
Then repeat this procedure in that half
1 1 2 4 4 5 6 7 7 8 8 8 9
![Page 69: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/69.jpg)
Program Design Invasion Percolation Tuning
How fast is this?
1 1 2 4 4 5 6 7 7 8 8 8 9
![Page 70: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/70.jpg)
Program Design Invasion Percolation Tuning
How fast is this?
One probe can find one value
1 1 2 4 4 5 6 7 7 8 8 8 9
![Page 71: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/71.jpg)
Program Design Invasion Percolation Tuning
How fast is this?
One probe can find one value
Two probes can find one value among two (21)
1 1 2 4 4 5 6 7 7 8 8 8 9
![Page 72: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/72.jpg)
Program Design Invasion Percolation Tuning
How fast is this?
One probe can find one value
Two probes can find one value among two (21)
Three probes can find one value among four (22)
1 1 2 4 4 5 6 7 7 8 8 8 9
![Page 73: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/73.jpg)
Program Design Invasion Percolation Tuning
How fast is this?
One probe can find one value
Two probes can find one value among two (21)
Three probes can find one value among four (22)
Four probes: one among eight (23)
1 1 2 4 4 5 6 7 7 8 8 8 9
![Page 74: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/74.jpg)
Program Design Invasion Percolation Tuning
How fast is this?
One probe can find one value
Two probes can find one value among two (21)
Three probes can find one value among four (22)
Four probes: one among eight (23)
K probes: one among 2K
1 1 2 4 4 5 6 7 7 8 8 8 9
![Page 75: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/75.jpg)
Program Design Invasion Percolation Tuning
How fast is this?
One probe can find one value
Two probes can find one value among two (21)
Three probes can find one value among four (22)
Four probes: one among eight (23)
K probes: one among 2K
log2(N) probes: one among N values
1 1 2 4 4 5 6 7 7 8 8 8 9
![Page 76: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/76.jpg)
Program Design Invasion Percolation Tuning
0 1 2 3 4 5 6 7 8
5 3 7 2 6 1 1 3 4 8
8 5 6 5 7 2 3 6 2 7
2 5 8 7 5 5 6 5 9 6
5 2 6 4 9 3 9 6 5 5
4 6 8 8 -1 9 7 3 9 4
7 6 4 5 -1 -1 6 8 5 3
5 4 2 5 8 -1 5 5 8 2
5 7 5 1 5 3 8 5 5 1
4 5 1 9 7 8 6 5 1 0
Running time is
N1.5 · log2(N1.5)
1 1 2 4 4 5 6 7 7 8 8 8 9
![Page 77: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/77.jpg)
Program Design Invasion Percolation Tuning
0 1 2 3 4 5 6 7 8
5 3 7 2 6 1 1 3 4 8
8 5 6 5 7 2 3 6 2 7
2 5 8 7 5 5 6 5 9 6
5 2 6 4 9 3 9 6 5 5
4 6 8 8 -1 9 7 3 9 4
7 6 4 5 -1 -1 6 8 5 3
5 4 2 5 8 -1 5 5 8 2
5 7 5 1 5 3 8 5 5 1
4 5 1 9 7 8 6 5 1 0
Running time is
N1.5 · log2(N1.5)
Or N1.5log2(N) if
we
get rid of
constants
1 1 2 4 4 5 6 7 7 8 8 8 9
![Page 78: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/78.jpg)
Program Design Invasion Percolation Tuning
That changes things quite a bit
Grid Size Old Time Which Was... New Time Which Is...
N T 1 sec
2N 11.3 T 11 sec 2.8 T 3 sec
3N 46.7 T 47 sec 8.2 T 8 sec
4N 128 T 2 minutes 16 T 16 sec
10N 3162 T 52 minutes 105 T 2 min
50N 883883 T 1 day 1995 T 33 min
100N 107 T 115 days 6644 T 2 hours
![Page 79: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/79.jpg)
Program Design Invasion Percolation Tuning
That changes things quite a bit
Grid Size Old Time Which Was... New Time Which Is...
N T 1 sec
2N 11.3 T 11 sec 2.8 T 3 sec
3N 46.7 T 47 sec 8.2 T 8 sec
4N 128 T 2 minutes 16 T 16 sec
10N 3162 T 52 minutes 105 T 2 min
50N 883883 T 1 day 1995 T 33 min
100N 107 T 115 days 6644 T 2 hours
![Page 80: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/80.jpg)
Program Design Invasion Percolation Tuning
That changes things quite a bit
And the gain gets bigger as N increases
Grid Size Old Time Which Was... New Time Which Is...
N T 1 sec
2N 11.3 T 11 sec 2.8 T 3 sec
3N 46.7 T 47 sec 8.2 T 8 sec
4N 128 T 2 minutes 16 T 16 sec
10N 3162 T 52 minutes 105 T 2 min
50N 883883 T 1 day 1995 T 33 min
100N 107 T 115 days 6644 T 2 hours
![Page 81: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/81.jpg)
Program Design Invasion Percolation Tuning
"Divide and conquer" technique used to insert
values into list is called binary search
![Page 82: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/82.jpg)
Program Design Invasion Percolation Tuning
"Divide and conquer" technique used to insert
values into list is called binary search
Only works if list values are sorted
![Page 83: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/83.jpg)
Program Design Invasion Percolation Tuning
"Divide and conquer" technique used to insert
values into list is called binary search
Only works if list values are sorted
But it keeps the list values sorted
![Page 84: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/84.jpg)
Program Design Invasion Percolation Tuning
"Divide and conquer" technique used to insert
values into list is called binary search
Only works if list values are sorted
But it keeps the list values sorted
Python implementation is in bisect library
![Page 85: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/85.jpg)
Program Design Invasion Percolation Tuning
We can do even better
![Page 86: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/86.jpg)
Program Design Invasion Percolation Tuning
Generating the
grid
takes N2 steps
5 3 7 2 6 1 1 3 4
8 5 6 5 7 2 3 6 2
2 5 8 7 5 5 6 5 9
5 2 6 4 9 3 9 6 5
4 6 8 8 5 9 7 3 9
7 6 4 5 1 2 6 8 5
5 4 2 5 8 5 5 5 8
5 7 5 1 5 3 8 5 5
4 5 1 9 7 8 6 5 1
We can do even better
![Page 87: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/87.jpg)
Program Design Invasion Percolation Tuning
Generating the
grid
takes N2 steps
If we fill these
cells...
5 3 7 2 6 1 1 3 4
8 5 6 5 7 2 3 6 2
2 5 8 7 5 5 6 5 9
5 2 6 4 9 3 9 6 5
4 6 8 8 -1 9 7 3 9
7 6 4 5 -1 -1 6 8 5
5 4 2 5 8 -1 -1 5 8
5 7 -1 -1 -1 -1 8 5 5
4 5 -1 9 7 8 6 5 1
We can do even better
![Page 88: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/88.jpg)
Program Design Invasion Percolation Tuning
Generating the
grid
takes N2 steps
If we fill these
cells...
...we only ever
look
at these cells...
5 3 7 2 6 1 1 3 4
8 5 6 5 7 2 3 6 2
2 5 8 7 5 5 6 5 9
5 2 6 4 9 3 9 6 5
4 6 8 8 -1 9 7 3 9
7 6 4 5 -1 -1 6 8 5
5 4 2 5 8 -1 -1 5 8
5 7 -1 -1 -1 -1 8 5 5
4 5 -1 9 7 8 6 5 1
We can do even better
![Page 89: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/89.jpg)
Program Design Invasion Percolation Tuning
Generating the
grid
takes N2 steps
If we fill these
cells...
...we only ever
look
at these cells...
...so why bother
generating values
for these ones?
9
8 -1 9
5 -1 -1 6
2 5 8 -1 -1 5
7 -1 -1 -1 -1 8
5 -1 9 7 8 6
We can do even better
![Page 90: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/90.jpg)
Program Design Invasion Percolation Tuning
Store grid as a dictionary
![Page 91: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/91.jpg)
Program Design Invasion Percolation Tuning
Store grid as a dictionary
Keys are (x,y) coordinates of cells
![Page 92: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/92.jpg)
Program Design Invasion Percolation Tuning
Store grid as a dictionary
Keys are (x,y) coordinates of cells
Values are current cell values
![Page 93: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/93.jpg)
Program Design Invasion Percolation Tuning
Store grid as a dictionary
Keys are (x,y) coordinates of cells
Values are current cell values
Instead of grid[x][y], use get_value(grid, x, y, Z)
![Page 94: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/94.jpg)
Program Design Invasion Percolation Tuning
Store grid as a dictionary
Keys are (x,y) coordinates of cells
Values are current cell values
Instead of grid[x][y], use get_value(grid, x, y, Z)
def get_value(grid, x, y, Z):
'''Get value of grid cell, creating if necessary.'''
if (x, y) not in grid:
grid[(x, y)] = random.randint(1, Z)
return grid[(x, y)]
![Page 95: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/95.jpg)
Program Design Invasion Percolation Tuning
Store grid as a dictionary
Keys are (x,y) coordinates of cells
Values are current cell values
Instead of grid[x][y], use get_value(grid, x, y, Z)
def get_value(grid, x, y, Z):
'''Get value of grid cell, creating if necessary.'''
if (x, y) not in grid:
grid[(x, y)] = random.randint(1, Z)
return grid[(x, y)]
And of course use set_value(grid, x, y, V) as well
![Page 96: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/96.jpg)
Program Design Invasion Percolation Tuning
Another common optimization
![Page 97: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/97.jpg)
Program Design Invasion Percolation Tuning
Another common optimization
Lazy evaluation
![Page 98: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/98.jpg)
Program Design Invasion Percolation Tuning
Another common optimization
Lazy evaluation
Don't compute values until they're actually needed
![Page 99: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/99.jpg)
Program Design Invasion Percolation Tuning
Another common optimization
Lazy evaluation
Don't compute values until they're actually needed
Again, makes program more complicated...
![Page 100: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/100.jpg)
Program Design Invasion Percolation Tuning
Another common optimization
Lazy evaluation
Don't compute values until they're actually needed
Again, makes program more complicated...
...but also faster
![Page 101: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/101.jpg)
Program Design Invasion Percolation Tuning
Another common optimization
Lazy evaluation
Don't compute values until they're actually needed
Again, makes program more complicated...
...but also faster
Trading human time for machine performance
![Page 102: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/102.jpg)
Program Design Invasion Percolation Tuning
How much work does this save us?
![Page 103: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/103.jpg)
Program Design Invasion Percolation Tuning
How much work does this save us?
Old cost of creating grid: N2
![Page 104: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/104.jpg)
Program Design Invasion Percolation Tuning
How much work does this save us?
Old cost of creating grid: N2
New cost: roughly N1.5
![Page 105: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/105.jpg)
Program Design Invasion Percolation Tuning
How much work does this save us?
Old cost of creating grid: N2
New cost: roughly N1.5
Difference is not N0.5
![Page 106: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/106.jpg)
Program Design Invasion Percolation Tuning
How much work does this save us?
Old cost of creating grid: N2
New cost: roughly N1.5
Difference is not N0.5
As N gets large, N2-N1.5 ≈ N2
![Page 107: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/107.jpg)
Program Design Invasion Percolation Tuning
How much work does this save us?
Old cost of creating grid: N2
New cost: roughly N1.5
Difference is not N0.5
As N gets large, N2-N1.5 ≈ N2
I.e., without this change, total runtime would be
N2 + N1.5log2(N) ≈ N2
![Page 108: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/108.jpg)
Program Design Invasion Percolation Tuning
Moral of the story:
![Page 109: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/109.jpg)
Program Design Invasion Percolation Tuning
Moral of the story:
Biggest performance gains always come
from changing algorithms and data
structures
![Page 110: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/110.jpg)
Program Design Invasion Percolation Tuning
The story's other moral:
![Page 111: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/111.jpg)
Program Design Invasion Percolation Tuning
The story's other moral:
Write and test a simple version first,
then improve it piece by piece
(re-using the tests to check your work)
![Page 112: Invasion Percolation: Tuning Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See](https://reader038.vdocuments.site/reader038/viewer/2022110116/5518a14d550346881f8b48b6/html5/thumbnails/112.jpg)
Copyright © Software Carpentry 2010
This work is licensed under the Creative Commons Attribution License
See http://software-carpentry.org/license.html for more information.
June 2010
created by
Greg Wilson