urn:lj:livejournal.com:atom1:110111100xDE0xDE0xDE2016-10-24T00:52:29Zurn:lj:livejournal.com:atom1:11011110:336685Tridecenary frustum tree2016-10-24T00:51:22Z2016-10-24T00:52:29Z<p>In <a href="https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Conway's Game of Life</a>, and <a href="https://en.wikipedia.org/wiki/Life-like_cellular_automaton">other cellular automata with the same neighborhood structure</a>, you can determine the values of the cells in any 2<i>x</i> × 2<i>x</i> square of cells from their values <i>x</i> steps earlier in a bigger 4<i>x</i> × 4<i>x</i> square. If we view this as a time-space diagram, with two of the dimensions as the spatial dimensions of the Life grid and the third dimension as time, we can view the bigger starting square and the smaller resulting square as the bottom and top of a sort of stepped pyramid formed by stacking concentric squares. The values of the cells in each layer of the pyramid are determined by the ones in the layer below. The squares shrink inward as they rise upward, because the other cells outside the pyramid need more information (outside the base of the pyramid) to determine their values. The image below shows this construction for <i>x</i> = 1, 2, and 4, with each time-space state of a cell represented as a cube.</p>
<p align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/Stepped-Pyramids.svg" style="background-color:white;"></p>
<p>The shape that these stepped pyramids approximate, for large values of <i>x</i>, is a square pyramid with its top point chopped off. It's called a <a href="https://en.wikipedia.org/wiki/Frustum">frustum</a> (plural frusta).</p>
<p>The <a href="https://en.wikipedia.org/wiki/Hashlife">Hashlife</a> algorithm for simulating Conway's Game of Life is often described as being based on a quadtree, a two-dimensional structure of squares divided into smaller squares, but really it's a three-dimensional recursive decomposition based on these shapes. The hash table that gives the algorithm its name stores a collection of these frusta of different sizes (all powers of two), with their initial state (the values of the cells in the bottom face) as their hash keys and with their final state (the values in the top face) as the associated hash values. With this structure you can quickly jump from a square of cells whose values form one of the keys to the resulting state some number of steps later, without having to simulate all the steps in between.</p>
<p>What about when you encounter an initial state that you don't recognize, because it's not already in the hash table? Then you need to make a new frustum and store it in the hash table. To do so, divide the top face of the new frustum into four smaller squares, and divide the bottom face into sixteen smaller squares (all smaller by a factor of two than the top square of the new frustum).
Place four overlapping small frusta under the four small squares on the top face, connecting them to nine small squares in the middle plane of the new frustum, and nine more small frusta connecting these nine squares to the base.
Then the top face values for the new frustum can be found by looking up the values of the nine smaller frusta on the bottom, and then using the results to look up the values for the four smaller frusta on top. In this way, we have decomposed one big frustum into 13 smaller frusta, which can in turn be decomposed recursively in the same way.</p>
<p align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/13-Frusta.svg" style="background-color:white;"></p>
<p>In fact, you don't need to know the actual values of any of the cells, except in the smallest frusta (the ones with 16 inputs and 4 outputs) to make this all work. At any higher level, you can represent each square of inputs or outputs symbolically, by a pointer to the frusta that have each of its four quarters as their bottom faces. In this way, each different frustum in the hash table can be represented by only a constant number of pointers, without also needing to store any big grids of cells.</p>
<p>The conventional wisdom, I think, is that Hashlife is good only for automata whose patterns begin in a sparse state and then stay that way (with lots of repeated substructures that the hash table can take advantage of). But actually, even for an automaton whose evolution is chaotic and structureless, Hashlife can provide a speedup. If you stop building new frusta when they become too big (where too big means that the surface area is logarithmic in the size of the grid you're simulating) then the total number of distinct frusta in the hash table is linear, no bigger than the grid itself. This method lets you simulate an <i>n</i> × <i>n</i> grid by decomposing it into only <i>O</i>(<i>n</i><sup>2</sup>/log <i>n</i>) overlapping frusta, whose height (number of time steps jumped) is proportional to the square root of the logarithm. Therefore, the algorithm time per cellular automaton time step is <i>O</i>(<i>n</i><sup>2</sup>/log<sup>3/2</sup> <i>n</i>), which compares favorably to the <i>O</i>(<i>n</i><sup>2</sup>/<i>w</i>) time per step of a conventional bit-parallel simulation on a machine with <i>w</i> bits per word. Of course, the random memory access pattern of the hash table could eat up most of the savings, making the comparison less clear in practice than it is in theory...</p>
<p>This 13-way decomposition of frusta into overlapping smaller frusta seems like it could also be useful in some scientific simulation problems, when there is a fixed speed at which information from one part of the simulation can propagate to another. But I don't know of any actual uses of this structure outside of cellular automaton simulation.</p><a name='cutid1-end'></a>urn:lj:livejournal.com:atom1:11011110:336554Linkage2016-10-16T05:18:50Z2016-10-16T05:18:50Z<ul><li><a href="https://www.quantamagazine.org/20160929-ghissi-altarpiece-and-mathematics/">Restoring the St. John Altarpiece...with mathematics!</a> (<a href="https://plus.google.com/100003628603413742554/posts/GMvZq1Sz8XJ">G+</a>)</li><br /><li><a href="https://plus.google.com/+IsaacCalder/posts/KrBP46dbWXP">Nonconvex equilateral hecatontetracontahedron</a> (<a href="https://plus.google.com/100003628603413742554/posts/iHr7G1oFBUn">G+</a>)</li><br /><li><a href="http://mathtourist.blogspot.com/2007/05/integral-heptagons.html">Sets of seven non-cocircular points with integral distances</a> (<a href="https://plus.google.com/100003628603413742554/posts/SdF6QLCdy7A">G+</a>)</li><br /><li><a href="http://lathisms.org/">Biographies of prominent Latin and Hispanic mathematicians</a> (<a href="https://plus.google.com/100003628603413742554/posts/2e7gjEfzew2">G+</a>)</li><br /><li><a href="https://www.theguardian.com/uk-news/2016/oct/04/rudd-announces-crackdown-on-overseas-students-and-new-work-visas">UK cuts off the flow of foreign students</a>, because British higher education hasn't imploded quickly enough in the wake of Brexit and needs a push (<a href="https://plus.google.com/100003628603413742554/posts/jSHVx9YJcDr">G+</a>)</li><br /><li><a href="http://news.mit.edu/2016/automating-dna-origami-opens-door-many-new-uses-0526">DNA origami: programmable matter for making nano-scale shapes and structures</a> (<a href="https://plus.google.com/100003628603413742554/posts/A71t5NSxX9H">G+</a>)</li><br /><li><a href="https://medium.com/i-data/trumpwon-trend-vs-reality-16cec3badd60#.hvq0e0vyl">How political hoaxes spread on twitter</a> (<a href="https://plus.google.com/100003628603413742554/posts/VRdGXqiygEA">G+</a>)</li><br /><li><a href="http://mathoverflow.net/questions/215211/what-algebraic-structures-are-related-to-the-mcgee-graph">The McGee graph animated in 3d to show off its symmetries</a> (<a href="https://plus.google.com/100003628603413742554/posts/QBiCfQdksbm">G+</a>)</li><br /><li><a href="https://en.wikipedia.org/wiki/2-satisfiability">2-satisfiability</a>, now a Good Article on Wikipedia (<a href="https://plus.google.com/100003628603413742554/posts/W9aYxXETMPp">G+</a>)</li><br /><li><a href="https://www.thestar.com/news/world/2016/09/29/canadian-medical-journals-hijacked-for-junk-science.html">OMICS hijacks two previously-reputable publishers and their journals</a> (<a href="https://plus.google.com/100003628603413742554/posts/3j6SiJPd83P">G+</a>)</li><br /><li><a href="http://sechel.de/reuleaux.html">The Reuleaux triangle tetrahedron</a>, what you get if you glue four Reuleaux triangles edge-to-edge (<a href="https://plus.google.com/100003628603413742554/posts/MYgATQDGwcU">G+</a>)</li><br /><li><a href="http://www.computational-geometry.org/documents/2017_cfp.pdf">Symposium on Computational Geometry call for papers</a> (abstracts Nov. 28, papers Dec. 5; <a href="https://plus.google.com/100003628603413742554/posts/HWKVRMNRuES">G+</a>)</li><br /><li><a href="https://plus.google.com/117663015413546257905/posts/1M6eqp6s8k5">The McGee graph, again, as a non-rigid unit distance graph</a> (<a href="https://plus.google.com/100003628603413742554/posts/iLKAfybLG6x">G+</a>)</li></ul>urn:lj:livejournal.com:atom1:11011110:336374The Kolakoski sequence via bit tricks instead of recursion2016-10-14T23:25:10Z2016-10-16T19:14:28Z<p>After posting about <a href="http://11011110.livejournal.com/335937.html">a recursive generator for the Kolakoski sequence</a> yesterday, I found the following alternative and non-recursive algorithm, which generates the same sequence in a linear number of bit operations with a logarithmic number of bits of storage.</p>
<pre>def Kolakoski():
x = y = -1
while True:
yield [2,1][x&1]
f = y &~ (y+1)
x ^= f
y = (y+1) | (f & (x>>1))</pre>
<p>Like the previous one, this can be understood as traversing an infinite tree. The tree is defined using essentially the same rules as before: two consecutive nodes on the same level of the tree have the same number of children if and only if they have the same parent. However, it extends infinitely upward rather than infinitely downward, with two children for each node on the leftmost path. Each level of the tree has the same sequence of degrees, which equals the Kolakoski sequence starting from its second position (the missing first position is why this starts at x = y = -1 rather than zero).</p>
<p align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/Upward-Kolakoski.svg" style="background-color:white;"></p>
<p>The algorithm traverses the bottom level of the tree in left-to-right order. As it does, the variable x maintains, in its binary representation, the numbers of children modulo 2 of the path of nodes extending infinitely upwards from the current leaf. All but finitely many (logarithmically many as a function of the position of the leaf) of these bits are zero, so (after the first step) x is a non-negative finite number with logarithmically many bits. The variable y, similarly, maintains a sequence of bits corresponding to the nodes on the same path that are 0 when the node is a left child of a degree-2 node and 1 otherwise. Again, finitely many of these bits are 1, so y is non-negative with logarithmically many bits. The bit manipulation tricks of the algorithm merely update these two variables to describe the next path in the traversal.</p>
<p>Update 10/16: <a href="http://jjj.de/fxt/demo/bits/#kolakoski-seq">Fast C++ implementation</a> by Jörg Arndt</p>urn:lj:livejournal.com:atom1:11011110:335937The Kolakoski tree2016-10-13T23:46:17Z2016-10-14T23:35:27Z<p>Draw an infinite tree according to the following rules:</p>
<ul>
<li>Each tree node is labeled 1 or 2, and has a number of children equal to its label.</li>
<li>If the nodes are placed into their breadth-first search ordering, then two consecutive nodes have the same label if and only if they have the same parent.</li>
</ul>
<p>There are two choices for the root label, but the trees they produce are almost the same as each other, so let's say the root is labeled 2, giving the tree shown below together with its <a href="http://11011110.livejournal.com/171440.html">spiraling breadth first search</a> order. (If the root were labeled 1, the only difference would be to add one more node labeled 1 above the node that is the root in the drawing.)</p>
<p align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/Kolakoski-tree.svg" style="background-color:white;"></p>
<p>Then the breadth-first sequence of labels that we obtain is exactly the <a href="https://en.wikipedia.org/wiki/Kolakoski_sequence">Kolakoski sequence</a>, starting from its third term. The Kolakoski sequence begins 1,2,2,1,1,2,1,2,2,1,2,2... and has the property that it equals the sequence of run-lengths in itself: the numbers 1, 2, 2, etc. are exactly the numbers of consecutive 1's, 2's, 1's, etc. in the sequence. Our tree is defined in such a way that each run of consecutive equal labels comes from the same parent, so the run-lengths of the sequence equal the numbers of children of the nodes, which equal the labels of the nodes, which define the sequence itself.</p>
<p>The fact that this tree encodes the Kolakoski sequence in its breadth-first ordering is closely related to the fact that <a href="http://code.activestate.com/recipes/231503/">breadth first search on a tree can be encoded recursively</a> as the following algorithm: first, output the root node. Then, for each node in a recursive breadth-first search, output its children. Applying this technique to the Kolakoski tree gives us the following Python recursive generator for the Kolakoski sequence itself:</p>
<pre>def recurse():
yield 2
output = 1
for x in recurse():
for i in range(x):
yield output
output = 3 - output
def Kolakoski():
yield 1
yield 2
for x in recurse():
yield x</pre>
<p>(The only reason we need two separate functions is to handle the first two terms in the sequence, the ones that are not part of the tree.) If this algorithm is used to generate the first <i>n</i> terms of the sequence, then it calls itself recursively <i>O</i>(log <i>n</i>) levels deep, with each level of recursion tracking one level higher in the tree and generating approximately 2/3 as many values as its caller. Each level of recursion has only a constant amount of storage for its local variables. Therefore, it takes <i>O</i>(<i>n</i>) time and <i>O</i>(log <i>n</i>) space to generate the whole sequence.</p>
<p>Something very similar to this algorithm, with the same analysis, is described in the paper "<a href="http://www.emis.ams.org/journals/JIS/VOL15/Nilsson/nilsson5.pdf">A space-efficient algorithm for calculating the digit distribution in the Kolakoski sequence</a>", by Johan Nilsson in <i>J. Integer Sequences</i> 2012. But he replaces the chain of recursive calls by an explicit data structure, which makes the algorithm's description longer and I think more confusing. And instead of making a single tree from all but the first two numbers in the sequence, Nilsson uses a forest with infinitely many trees, with each level of the forest being labeled by its own copy of the Kolakoski sequence.</p><a name='cutid1-end'></a>
<p><b>ETA:</b> <a href="http://11011110.livejournal.com/336374.html">See next post</a> for an alternative algorithm that avoids the recursion.</p>urn:lj:livejournal.com:atom1:11011110:335859Voting on a Turing machine using constant-amortized-time counters2016-10-02T05:54:45Z2016-10-02T06:05:55ZWhile fixing up <a href="https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_majority_vote_algorithm">the Wikipedia article on the constant-space streaming majority algorithm of Boyer and Moore</a> I ran across <a href="http://stackoverflow.com/questions/39182402/memory-complexity-of-boyer-moore-majority-vote-algorithm">a stackoverflow question complaining about some sloppy analysis</a> that I had already removed from the Wikipedia article. As a quick reminder, the algorithm stores one element from its input sequence, uses comparisons of that element with input values to decide whether to increment or decrement a counter, and uses comparisons of the counter with zero to decide when to replace the stored element.<br /><br />Usually in algorithm analysis we use a unit cost random access machine model in which "reasonable" sized objects such as input identifiers and counters take a single word of memory and basic operations on them like comparisons and arithmetic take constant time. We can argue about what "reasonable" means but I think it's good enough both mathematically and in practice to assume that there's a word size <i>w</i> that is unknown but big enough to index the input (<i>w</i> ≥ log <i>n</i>) and that the input values are machine words. So in this model the algorithm clearly takes linear time and constant space, and the old version's claim that the space is logarithmic is wrong.<br /><br />On the other hand, the complexity theorists still seem to want to stick to a Turing machine model of computing. The same voting algorithm still makes sense on a Turing machine as long as we assume a separate long read-only input tape and short read-write working memory tape, with enough space to store both a counter and a single input value. The old <i>O</i>(log <i>n</i>) space claim is still wrong, though, because you don't know how many bits long the input values are, and it might be a lot. But that's easily fixed. What about the Turing machine runtime?<br /><br />The comparisons of the stored value with the input values take linear total time, but now it's linear in the input length which is probably something larger than <i>n</i>. The counter increments and decrements are more of a problem, though. They could take as much as <i>O</i>(log <i>n</i>) time per increment or decrement, and (if there are not many distinct input values, so their lengths are much shorter than logarithmic) these times could sum to much larger than the input length. Repeatedly incrementing a binary number is a constant-amortized-time operation, but mixing increments and decrements is not. So what can we do?<br /><br />It turns out that there's a simple trick to reduce the amortized time per increment, decrement, or compare-with-zero to constant, while only blowing up the space by a constant factor. Instead of storing one counter, store two of them, with their bits interleaved with each other, and with the low-order bits on the end closest to the stored input value. let's call the two counters <i>x</i> and <i>y</i>. To increment, add one to <i>x</i>, and to decrement, add one to <i>y</i>. But if either of these add-one operations causes the two interleaved bit sequences to become completely equal to each other, reset them both to zero. Now, the usual amortized analysis of increment-only counters works, and shows that all counter operations take amortized constant time.<br /><br />Using this data structure, the Turing machine version of the majority voting algorithm really does take linear time. But not <i>O</i>(<i>n</i>) time, so that's one more detail <a href="https://en.wikipedia.org/w/index.php?title=Boyer%E2%80%93Moore_majority_vote_algorithm&oldid=739074025">the old version of the article</a> got wrong or at least inconsistent with the stated form of the space bound. Maybe they had in mind bit-space-complexity for a RAM algorithm whose time is still measured in word operations? Does anyone actually use that combination?<a name='cutid1-end'></a>urn:lj:livejournal.com:atom1:11011110:335510Linkage for the new school year2016-10-01T06:26:47Z2016-10-01T06:26:47Z<ul><li><a href="http://www.thisiscolossal.com/2016/09/geometric-watercolors-by-artist-jacob-van-loon/">Geometric Watercolors by artist Jacob Van Loon</a> (<a href="https://plus.google.com/100003628603413742554/posts/UJgteQjdvH8">G+</a>)</li><br /><li><a href="http://www.newyorker.com/news/news-desk/the-house-science-committees-anti-science-rampage">Congressman Lamar Smith's campaign of intimidation against global-warming researchers</a> (<a href="https://plus.google.com/100003628603413742554/posts/b1JTEHYFiAj">G+</a>)</li><br /><li><a href="http://www.ocregister.com/articles/irvine-729359-asian-city.html">Irvine has become the largest predominantly-Asian city in the continental US</a> — yay diversity! (<a href="https://plus.google.com/100003628603413742554/posts/co1QbTFkE5t">G+</a>)</li><br /><li><a href="https://www.insidehighered.com/news/2016/09/20/berkeley-may-remove-free-online-content-rather-complying-disability-law">Online course materials must be accessible to the blind and the hearing impaired</a>; uncaptioned videos are not good enough (<a href="https://plus.google.com/100003628603413742554/posts/Lr54utzQbTv">G+</a>)</li><br /><li><a href="http://doai.io/">Search engine for free versions of papers from their DOIs</a> (<a href="https://plus.google.com/100003628603413742554/posts/fsYzZjWpJRg">G+</a>)</li><br /><li><a href="https://www.insidehighered.com/quicktakes/2016/09/22/academics-win-macarthur-genius-fellowships">Subhash Khot declared a genius</a> (<a href="https://plus.google.com/100003628603413742554/posts/hWWesEkvShd">G+</a>)</li><br /><li><a href="http://www.npr.org/sections/alltechconsidered/2016/09/22/494925885/where-did-national-forests-go-green-spaces-disappear-from-google-maps">Disappearing national forests on online maps</a> highlight our dependence on an information monoculture in the cloud (<a href="https://plus.google.com/100003628603413742554/posts/Dwh8Cp2Srst">G+</a>)</li><br /><li><a href="http://www.latimes.com/local/lanow/la-me-wikipedia-science-classes-adv-snap-story.html">College students help edit Wikipedia</a> (<a href="https://plus.google.com/100003628603413742554/posts/j1HDmWbjPe3">G+</a>)</li><br /><li><a href="https://youtu.be/zahFj4AGthI">Levels of space-filling curves as cross-sections of a 3d-printed surface</a> (<a href="https://plus.google.com/100003628603413742554/posts/DTzBAtVQBsU">G+</a>)</li><br /><li><a href="http://www.graphdrawing.de/contest2016/results.html">Winner of the draw-the-Greek-gods'-genealogy contest</a> and others from Graph Drawing (<a href="https://plus.google.com/100003628603413742554/posts/HsDn7VFbLVp">G+</a>)</li><br /><li><a href="https://www.quantamagazine.org/20160928-off-the-shelf-lens-assists-dark-matter-find/">Canon DSLR telephoto lens array as a serious astronomical instrument</a> (<a href="https://plus.google.com/100003628603413742554/posts/8YXNvLTwFEM">G+</a>)</li><br /><li><a href="http://blog.computationalcomplexity.org/2016/09/give-second-order-statement-true-in-r.html">Distinguish the additive reals from the rationals in monadic second-order logic</a> (<a href="https://plus.google.com/100003628603413742554/posts/7aBbm9Ko9jN">G+</a>)</li><br /><li><a href="http://boingboing.net/2016/09/29/women-competitors-must-wear-hi.html">Female chess championship contenders protest being forced to wear hijabs</a> (<a href="https://plus.google.com/100003628603413742554/posts/VXPiDehvEGN">G+</a>)</li><br /><li><a href="http://boingboing.net/2016/09/30/eff-to-court-dont-let-us-go.html">EFF tells court that DMCA's preventing publication of academic crypto research should be unconstitutional</a> (<a href="https://plus.google.com/100003628603413742554/posts/LYsoxBvmttA">G+</a>)</li></ul>urn:lj:livejournal.com:atom1:11011110:335228Directing traffic2016-09-16T23:55:44Z2016-09-16T23:55:44ZI have another new arXiv preprint: "Scheduling Autonomous Vehicle Platoons Through an Unregulated Intersection", <a href="http://arxiv.org/abs/1609.04512">arXiv:1609.04512</a>, with Juan Besa, Will Devanny, and Mike Goodrich. The same paper also <a href="http://doi.org/10.4230/OASIcs.ATMOS.2016.5">appeared at ATMOS 2016</a>; the two versions differ only in formatting and their theorem numbering scheme.<br /><br />The paper is on how to direct vehicle traffic through a road intersection while minimizing the longest waiting time. We assume that the traffic comes in variable-length platoons, and that we shouldn't try to break up these platoons. We also assume (perhaps less reasonably) that we know about all of the traffic that will cross the intersection in advance. This turns out to be susceptible to dynamic programming, but for a different optimization criterion: minimize the completion time of a given prefix of the schedule, subject to a fixed limit on the waiting time. But then, using the magic of <a href="https://en.wikipedia.org/wiki/Parametric_search">parametric search</a> we can turn this algorithm for the wrong criterion into one for the right criterion.<br /><br />Some of the time bounds, although polynomial, have high exponents, and we didn't succeed in handling some common types of intersections. For instance, there's one that I walk through most days, which at times of light traffic is a four-way stop and at other times has a human traffic director (one of the student jobs on my campus). In the more major of the two roads that cross there, each direction has a through lane and a separate left turn pocket. On the other road, each direction only has one lane, which combines cross traffic and left-turning traffic. Here's a screenshot from Google Earth; the building at the top is the one I work in, and at the bottom is the edge of the housing complex I live in.<br /><br /><div align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/PeltasonLosTrancos.png"></div><br /><br />The difficulty is that, for this type of intersection, one can direct traffic in such a way that there is no "synchronization point" when nobody is crossing the intersection, for instance by allowing through traffic in both directions on the main road interleaved with phases where one of those two directions has both through traffic and left-turning traffic. Our dynamic programming algorithm relies on these synchronization points. And of course it would be a better fit to the real-world problem to allow the input to be online instead of known in advance. So I think there's still a lot more to do on these problems.<a name='cutid1-end'></a>urn:lj:livejournal.com:atom1:11011110:334957Linkage for the end of the summer break2016-09-16T06:05:35Z2016-09-16T06:06:55Z<ul><li><a href="http://math.andrej.com/2015/08/05/provably-considered-harmful/">"Provably" considered harmful</a> (<a href="https://plus.google.com/100003628603413742554/posts/GfNYn4yfWEE">G+</a>)</li><br /><li><a href="https://github.com/david-gpu/srez">Superresolution image enhancement through deep learning</a> (<a href="https://plus.google.com/100003628603413742554/posts/EsHt7V9qLvZ">G+</a>)</li><br /><li><a href="https://plus.google.com/+IsaacCalder/posts/dPKm19ADYok">Isohedral isosceles-triangle torus</a> (<a href="https://plus.google.com/100003628603413742554/posts/YTsk2tetQG3">G+</a>)</li><br /><li><a href="http://doi.org/10.1126/science.aah6493">30x bigger impact factor still not enough to give your paper a statistically significant chance of more citations</a> (<a href="https://plus.google.com/100003628603413742554/posts/QM7f4neTqtc">G+</a>)</li><br /><li><a href="http://arxiv.org/abs/1609.01042">Forbidden minors for infinite DFS trees depend on set-theoretic axioms</a> (<a href="https://plus.google.com/100003628603413742554/posts/cp3nqbbMiwb">G+</a>)</li><br /><li><a href="http://www.adl.org/combating-hate/hate-on-display/c/88.html">Why non-deplorable people should avoid saying they have 88 of anything</a> (<a href="https://plus.google.com/100003628603413742554/posts/BNPwavJ85L7">G+</a>)</li><br /><li><a href="http://mujeresconciencia.com/2016/09/07/alba-rojo-cama-la-matematica-escultora/">Premature death of geometric artist Alba Rojo Cama</a> (<a href="https://plus.google.com/100003628603413742554/posts/iwXqmYZbXHi">G+</a>)</li><br /><li><a href="http://arxiv.org/html/1609.02443v1">Graph Drawing 2016 proceedings mirror</a> (<a href="https://plus.google.com/100003628603413742554/posts/gA1cSWGdtDp">G+</a>)</li><br /><li><a href="http://www.acm.org/media-center/2016/september/knuth-prize-2016">Noam Nisan wins Knuth Prize</a> (<a href="https://plus.google.com/100003628603413742554/posts/GcdhQ434o48">G+</a>)</li><br /><li><a href="https://youtu.be/YIFO9dg83MA">Short video on how the Royal Society is trying to move away from being a boys-only club</a> (<a href="https://plus.google.com/100003628603413742554/posts/ajr8HHXqty7">G+</a>)</li><br /><li><a href="http://doi.org/10.1126/science.aah4571">Open-access legal quagmire re making a preprint available and then signing away copyright</a> (<a href="https://plus.google.com/100003628603413742554/posts/dLN2rn4uB85">G+</a>)</li><br /><li><a href="https://christophercliff.com/eppstein/">OpenStreetMap demo of k-shortest paths in a road network</a> (<a href="https://plus.google.com/100003628603413742554/posts/NG74efy1Kg4">G+</a>)</li><br /><li><a href="http://arxiv.org/abs/1602.07220">Optimal packing in the plane for regular pentagons</a> (<a href="https://plus.google.com/100003628603413742554/posts/YVFqPj1yX2h">G+</a>)</li><br /><li><a href="http://bit.ly/2cYdI6J">More than phi: Mathematical artist Lun-Yi London Tsai captures the feel of mathematicians' blackboards</a> (<a href="https://plus.google.com/100003628603413742554/posts/Ujt6wu3FQ51">G+</a>)</li></ul>urn:lj:livejournal.com:atom1:11011110:334654Drawing 2d modular lattices2016-09-07T07:17:55Z2016-09-07T07:17:55ZIt's pretty well known that a finite <a href="https://en.wikipedia.org/wiki/Lattice_(order)">lattice</a> has <a href="https://en.wikipedia.org/wiki/Order_dimension">order dimension</a> ≤ 2 if and only if its Hasse diagram is an <a href="https://en.wikipedia.org/wiki/St-planar_graph"><i>st</i>-planar graph</a> (below left), and every <a href="https://en.wikipedia.org/wiki/Transitive_reduction">transitively reduced</a> <i>st</i>-planar graph defines a 2-dimensional lattice in this way. The reference I know of for this is Platt, "Planar lattices and planar graphs", <i>J. Comb. Th.</i> 1976. And I don't know who first observed that the 2-dimensional finite <a href="https://en.wikipedia.org/wiki/Distributive_lattice">distributive lattices</a> are the ones that can be drawn as grid graphs (below right) but my guess would be Garrett Birkhoff.<br /><br /><div align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/stplanar+grid.png" /></div><br /><br />My own paper "<a href="http://arxiv.org/abs/cs.CG/0607094">Upright-quad drawing of st-planar learning spaces</a>" described an analogous geometric representation for <a href="https://en.wikipedia.org/wiki/Antimatroid">antimatroids</a> (which in this context can be seen as another special type of lattice). So <a href="http://cstheory.stackexchange.com/questions/36510/subclasses-or-characterizations-of-modular-or-pseudo-modular-planar-graphs">a recent CS-theory stack-exchange question about planar modular graphs</a> got me wondering: what do the graphs of 2-dimensional <a href="https://en.wikipedia.org/wiki/Modular_lattice">modular lattices</a> (a subclass of the planar modular graphs) look like?<br /><br />As it turns out there is a nice answer. They are the graphs that can be drawn as grid graphs (like the distributive lattices) but then adding extra vertices within some of the grid squares, connected only to the top and bottom of the square. Like this:<br /><br /><div align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/2d-modular.png" /></div><br /><br />In one direction, it's straightforward to verify that the lattices drawn this way satisfy the <a href="https://en.wikipedia.org/wiki/Semimodular_lattice">semimodular law</a>. But they have the same shape when you flip them upside down, so they're both upper and lower semimodular and therefore modular.<br /><br />In the other direction, we need to show that 2d modular lattices always form subdivided grids. Any 2d modular lattice (ignoring the modularity) comes from an <i>st</i>-planar graph, and in any <i>st</i>-planar graph the faces are partially ordered from left to right. So we can construct the graph by first drawing its leftmost path and then adding faces one at a time. The fact that the graph has a drawing as a grid with subdivided squares follows by induction on the number of faces we add. Each face must be a quadrilateral, adding a two-edge path to the right of an existing path of the same length, for if one side of the face were shorter the graph would not be transitively reduced and if one were longer then the elements of that face would violate modularity. If the path on the left side of the new face is concave, we can add the face as a new grid square. If it is convex, we can make it the new right side of a grid square by moving the previous right corner into the square. And if either edge of the left side of the face was previously a bridge, we can shift the grid below it to make the left side concave or convex, reducing to a previous case. So the only case that causes trouble is when the left side of the new face is straight, and has two grid squares on the opposite side of it. But when this happens, these squares together with the new face form a seven-element non-modular sublattice. So in all cases, we can either form a subdivided grid drawing as described, or find a violation of modularity.<br /><br />What about modular graphs more generally? Does the same operation of subdividing a quadrilateral by adding a degree-two vertex inside it preserve modularity? Unfortunately, no. <i>K</i><sub>2,3</sub> (a grid with one square and one subdivision point) is modular. But adding a horizontal subdivision to each of its three quadrilaterals (the outer one too) produces a non-modular graph: the three new subdivision points have no median.<br /><br /><div align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/non-modular.png" /></div><a name='cutid1-end'></a>urn:lj:livejournal.com:atom1:11011110:334348Linkage2016-09-01T04:59:21Z2016-09-01T05:00:54Z<ul><li><a href="https://plus.google.com/118320887831309218676/posts/gAaH5uXHBSQ">Honeycomb generated by interlocking hexagonal tilings</a> (<a href="https://plus.google.com/100003628603413742554/posts/BQ1dBEVSTFF">G+</a>)</li><br /><li><a href="https://siddbanpsu.github.io/publications/ijcai16-banerjee.pdf">Computer-written new Wikipedia articles</a> <a href="https://en.wikipedia.org/w/index.php?title=Wikipedia:Administrators%27_noticeboard/Incidents&oldid=734875096">didn't work as well as the programmers thought</a> (<a href="https://plus.google.com/100003628603413742554/posts/YdsQ9mi2d8b">G+</a>)</li><br /><li><a href="http://www.woodyblackwell.com/portfolio.html">Woody Blackwell's portfolio of glass and stone knapping</a> (<a href="https://plus.google.com/100003628603413742554/posts/gn9rWeHKNyp">G+</a>)</li><br /><li><a href="http://blogs.scientificamerican.com/roots-of-unity/a-few-of-my-favorite-spaces-the-olympic-rings/">A more mathematically interesting five-ring link</a> than the Olympic one (<a href="https://plus.google.com/100003628603413742554/posts/SqK5s7Na5Qj">G+</a>)</li><br /><li><a href="http://www.abc.net.au/news/2016-08-21/102yo-researcher-told-to-leave-his-edith-cowan-university-job/7769422">102-year-old researcher and honorary professor forced off campus</a> (<a href="https://plus.google.com/100003628603413742554/posts/AekU6uSXt4F">G+</a>)</li><br /><li><a href="http://www.maureeneppstein.com/mve_journal/?p=1340">A newspaper article from the early days</a> of pioneering computer programmer <a href="https://en.wikipedia.org/wiki/Steve_Shirley">Dame Stephanie Shirley</a> (<a href="https://plus.google.com/100003628603413742554/posts/BjJRMeA7mpW">G+</a>)</li><br /><li><a href="http://blog.andreahawksley.com/6osme/">A report from the 6th meeting on Origami, Science, Math, and Education</a> (<a href="https://plus.google.com/100003628603413742554/posts/RL2wjxCZBb4">G+</a>)</li><br /><li><a href="https://geometricolor.wordpress.com/2012/04/16/twofold-color-symmetry-in-translation/">Self-similar colorings of aperiodic tilings</a> (<a href="https://plus.google.com/100003628603413742554/posts/AkMJ3hLEg87">G+</a>)</li><br /><li><a href="https://plus.google.com/+DanPiponi/posts/EGefvErd54R">Counting grid graph matchings by continued fractions</a> (<a href="https://plus.google.com/100003628603413742554/posts/jTtL5vh3Khj">G+</a>)</li><br /><li><a href="http://retractionwatch.com/2016/08/26/u-s-government-group-sues-publisher-charging-it-with-deceiving-researchers/">US FTC takes action against predatory scientific publisher OMICS</a> (<a href="https://plus.google.com/100003628603413742554/posts/WBsfCEG86Dt">G+</a>)</li><br /><li><a href="https://arxiv.org/abs/1608.00152">A mathematical history of taffy pullers</a> (<a href="https://plus.google.com/100003628603413742554/posts/ChDb4cxPERh">G+</a>)</li><br /><li><a href="http://www.latimes.com/business/la-fi-rand-elliott-20160824-snap-story.html">Feds use Rand formula to spot discrimination; the GOP calls it junk science</a> (<a href="https://plus.google.com/100003628603413742554/posts/cxBqWakpVgk">G+</a>)</li><br /><li><a href="http://eatcs.org/index.php/component/content/article/1-news/2333-eatcs-ipec-nerode-prize-2016">Congratulations to Andreas Björklund, Nerode prize winner 2016</a> (<a href="https://plus.google.com/100003628603413742554/posts/6i6GT6Vj2Pz">G+</a>)</li><br /><li><a href="http://touch-geometry.karazin.ua/sitemap">The geometric models collection of V. N. Karazin Kharkiv National University, Ukraine</a> (<a href="https://plus.google.com/100003628603413742554/posts/42kLNxR4ou7">G+</a>)</li><br /><li><a href="https://www.eff.org/deeplinks/2016/08/stupid-patent-month-elsevier-patents-online-peer-review">Elsevier patents online peer review</a> (<a href="https://plus.google.com/100003628603413742554/posts/VTP2CatXgs4">G+</a>)</li></ul>urn:lj:livejournal.com:atom1:11011110:334167A game of cop and robber2016-08-19T01:33:31Z2016-08-19T01:49:21ZSuppose we play the following game. We place a bunch of hexagonal game board tiles on a table, edge-to-edge, to form our playing field. On the field, we place two game pieces, a cop (blue) and a robber (red). The cop and robber take turns, either moving to an adjacent hex or passing (staying put). The cop wins if he can end a turn on the same hex as the robber. The robber wins by evading the cop forever. Who has the advantage?<br /><br /><div align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/polyhex-cop-win.png"></div><br /><br />It turns out to depend on what game board shapes are allowed. If the hexes of the board can completely surround a hole (a shape where one or more hexes could have been placed, but weren't) then the robber can win by keeping the hole between himself and the robber. But if there are no holes, then the cop always wins.<br /><br />Probably there is a direct strategy that shows this, but it's also possible to prove that the cop wins by using the theory of <a href="https://en.wikipedia.org/wiki/Cop-win_graph">cop-win graphs</a>, graphs in which the cop wins a generalized version of this game, with the players moving on the vertices of a graph rather than the hexes of a game board. Cop-win graphs are the same as dismantlable graphs, the graphs that can be reduced to a single vertex by repeatedly removing a vertex whose closed neighborhood is a subset of another vertex's closed neighborhood. And the adjacency graphs of systems of hexes with no holes are always dismantlable.<br /><br />To see this, consider the tree of 2-vertex-connected components of the adjacency graph of the hexes. For instance, the example above has five 2-connected components: the hexagonal shape formed by the seven hexes in the lower left, a big mass of 18 hexes in the center and right, and three single-hex components in the upper left. (Two of these single hexes are connected to the rest of the board only by a single edge; the other single-hex component lies between the two big components.) Choose arbitrarily a single leaf component of this tree (the 18-vertex component, or the two single-hex components connected to the rest by a single edge). If this component is a single hex, then its closed neighborhood is a two-hex set, consisting of itself and its one neighbor. In this case, its neighborhood is always a subset of its neighbor's component.<br /><br />Otherwise, if the leaf component that you picked is a nontrivial 2-connected component, such as the 18-vertex component of the example, walk counterclockwise around its boundary. The angles that you turn always have to add up to 2pi, so you must have passed at least three points where your walk turns counterclockwise by an angle of pi/3 (a boundary hex adjacent to two others, such as the starting point of the cop in the example) or 2pi/3 (a boundary hex adjacent to three others). In particular, one of these three hexes is not the one that connects your component to the rest of the game board. If it has two neighbors, its neighborhood is a subset of either of its neighbors' neighborhoods. And if it has three neighbors, its neighborhood is a subset of its middle neighbor's neighborhood. So either way, we can find a hex to remove. By repeating this process, we can show that the adjacency graph of the hexes is always dismantlable. More strongly, it's dismantlable with any distinguished vertex (such as the cop's starting location) as its final vertex.<br /><br />Unfortunately, I don't know of a simple explicit strategy for the cop, even on a polyhex board rather than a general graph. The cop's strategy in the publications on this subject is: remove a removable vertex, and then follow the optimal strategy (recursively) for the remaining graph, pretending that the robber is on the parent of the removed vertex whenever it is actually on the removed vertex. Then, when you think you've won according to this strategy, you will either have actually won, or achieved a position where the robber is on the removed vertex and you're on its parent (where you're pretending that the robber is). But in this case, you can win in one more move.<br /><br />One way to visualize this strategy is to draw a tree representing the parent of each removed vertex, together with numbers indicating the order in which the vertices were removed:<br /><br /><div align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/polyhex-cop-tree.png"></div><br /><br />Then, at each turn, add back one more vertex (in the reverse of the order that they were removed) and move to the lowest-numbered ancestor of the robber's current position among the ones that have been added back so far. For instance, in the position shown, to figure out what to do on your first move, you would add back hex 28, realize that the lowest-numbered ancestor of the robber's position is hex 29 (the one you're already on), and pass. After the robber moves, you would add back hex 27, and (since all moves for the robber land in the subtree of hex 27) move there. Etc.<br /><br />But this strategy involves keeping track of a spanning tree, a numbering, and a current set of added-back tiles. Maybe for the hex board there's a simpler strategy based only on your position and the position of the robber?<br /><br />And finally, what about other kinds of game tiles? Square tiles don't work with edge-to-edge adjacency: the robber can evade the cop by staying on the opposite side of a 4-cycle. But for squares with corner adjacency (and no holes) the cop can always win; for instance, consider cops and robbers that move like kings on a chessboard. Being planar with only three game tiles meeting at a corner isn't good enough for the cop to win: the robber always wins on a dodecahedron by staying as far as possible from the cop. Maybe some other polyforms than polyhexes will also allow the cop to always win.<a name='cutid1-end'></a>urn:lj:livejournal.com:atom1:11011110:334024Linkage2016-08-16T06:26:40Z2016-08-16T06:26:40Z<ul><li><a href="https://en.wikipedia.org/wiki/Cap_set">Cap sets on Wikipedia</a> (mathematical models of stuck games of Set; <a href="https://plus.google.com/100003628603413742554/posts/RkVX65trjwZ">G+</a>)</li><br /><li><a href="https://www.quantamagazine.org/20160802-unified_theory_of_randomness">A unified theory of random shapes</a> (<a href="https://plus.google.com/u/0/100003628603413742554/posts/6FffXg7DdUe">G+</a>)</li><br /><li><a href="https://plus.google.com/100749485701818304238/posts/iDZ6KHwmF6S">Visualization of star polyhedra as surfaces of nonzero genus</a> (<a href="https://plus.google.com/100003628603413742554/posts/fZPUFz9odyg">G+</a>)</li><br /><li><a href="https://williamspaniel.com/2014/05/25/game-theory-is-really-counterintuitive/">Game theory weirdness</a> (<a href="https://plus.google.com/100003628603413742554/posts/QFEzWhmzbUk">G+</a>)</li><br /><li><a href="http://www.designboom.com/art/ventricle-installations-softlab-festival-love-london-uk-07-30-2016/">Ventricle by softlab</a>, hanging meshed membrane artwork (<a href="https://plus.google.com/100003628603413742554/posts/iEAbqWJn1r4">G+</a>)</li><br /><li><a href="https://www.insidehighered.com/news/2016/08/08/letter-publishers-group-adds-debate-over-sci-hub-and-librarians-who-study-it">A publishing industry association tries to spread FUD over open-access research</a> (<a href="https://plus.google.com/100003628603413742554/posts/8dQAY4YN4JZ">G+</a>; see also <a href="http://www.metafilter.com/161645/Association-of-American-Publishers-Pick-on-Wrong-Librarian">MF</a>)</li><br /><li><a href="http://www.atlasobscura.com/articles/the-secret-polish-university-for-women-where-marie-curie-got-her-start">Marie Curie and the underground university for women</a> (<a href="https://plus.google.com/100003628603413742554/posts/ERfXAuoy2YR">G+</a>)</li><br /><li><a href="http://www.designboom.com/architecture/hypargate-installation-stereotomy-italy-08-09-2016/">Stone hypar stereotomy</a> (<a href="https://plus.google.com/100003628603413742554/posts/aXgiY3PkaFs">G+</a>)</li><br /><li><a href="http://logo.twentygototen.org/LKqy-IDM">Run Logo programs in your browser</a> (<a href="https://plus.google.com/100003628603413742554/posts/LSnaCLLyh31">G+</a>)</li><br /><li><a href="http://gizmodo.com/internet-access-is-now-a-basic-human-right-1783081865">Internet access is a human right</a> which <a href="http://www.metafilter.com/161606/Indian-government-blacks-out-internet-in-Kashmir">India is violating</a> (<a href="https://plus.google.com/100003628603413742554/posts/HzWHiLyxDU7">G+</a>)</li><br /><li><a href="http://www.cmog.org/collection/exhibitions/blaschka">Leopold Blaschka's glass sea creatures</a> (<a href="https://plus.google.com/100003628603413742554/posts/8jMJ77h6S2b">G+</a>)</li><br /><li><a href="http://gizmodo.com/amazing-photographs-capture-the-microscopic-iridescence-1768121093">Peacock feather macrophotography</a> (<a href="https://plus.google.com/100003628603413742554/posts/NeTjtAg4txc">G+</a>)</li><br /><li><a href="https://spacesymmetrystructure.wordpress.com/2014/05/15/force-polygons-of-equilibrium-structures/">Force polygons of equilibrium structures</a> (<a href="https://plus.google.com/100003628603413742554/posts/eR3FHt4RCFn">G+</a>)</li></ul>urn:lj:livejournal.com:atom1:11011110:333802Bichromatic Euclidean minimum spanning trees2016-08-07T23:37:46Z2016-08-07T23:37:46ZOne of the talks at CCCG was by Ahmad Biniaz, on <a href="http://www.cglab.ca/~biniaz/papers/Red-Blue-Purple.pdf">red-blue-purple spanning graphs</a>: given a partition of a point set into red, blue, and purple points, find a minimum-weight graph such that the red-purple and blue-purple subsets induce connected subgraphs. It can be solved by <a href="https://en.wikipedia.org/wiki/Matroid_intersection">matroid intersection</a>, but this is slow and Biniaz talked about a faster special case. Anyway, in his talk, Ahmad mentioned a different colored spanning problem: find a minimum spanning tree of the complete bipartite geometric graph determined by a set of red and blue points in the Euclidean plane (with no purple this time). He noted that bichromatic closest pairs can be used to solve it in time <i>O</i>(<i>n</i> log<sup>8</sup> <i>n</i>), and asked whether a faster algorithm is possible. The illustration below gives an example of this problem and its solution.<br /><br /><div align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/BCMST.png"></div><br /><br />Although Ahmad didn't go into detail, the <i>O</i>(<i>n</i> log<sup>8</sup> <i>n</i>) bound that he mentioned is not hard to achieve by a form of the Prim–Dijkstra–Jarník minimum spanning tree algorithm. This algorithm maintains a tree on a subset of the input graph vertices (red and blue points in our case) and at each step adds to it the shortest edge to a new vertex. We split the problem of finding the shortest edge into two subproblems, one of finding the shortest distance between a red point in the tree and a blue point outside the tree, and a second one with the colors reversed. For both problems, we need to maintain a dynamic red-blue point set and find the closest red-blue pair, which is exactly the bichromatic closest pair problem. My paper <a href="http://www.ics.uci.edu/~eppstein/pubs/Epp-DCG-95.pdf">"Dynamic Euclidean minimum spanning trees and extrema of binary functions" (DCG 1995)</a> shows how to solve dynamic bichromatic closest pairs using another data structure for dynamic (uncolored) nearest neighbor queries, in <i>O</i>(log<sup>2</sup> <i>n</i>) nearest-neighbor operations per closest-pair update, and Chan's paper <a href="https://cs.uwaterloo.ca/~tmchan/dch3d.pdf">"A dynamic data structure for 3-d convex hulls and 2-d nearest neighbor queries" (SODA 2006)</a> gives a randomized method for dynamic nearest neighbor queries with <i>O</i>(log<sup>6</sup> <i>n</i>) time per update. Putting these two data structures together and using them to find each successive edge to add to the tree in the Prim–Dijkstra–Jarník minimum spanning tree algorithm gives the claimed <i>O</i>(<i>n</i> log<sup>8</sup> <i>n</i>) (randomized) time bound.<br /><br />But of course, Prim–Dijkstra–Jarník is not the only way to compute minimum spanning trees, and for this problem it turns out to work better to use Borůvka's algorithm. This algorithm maintains a forest (initially with each vertex in its own one-node tree) and at each stage of the algorithm adds a set of edges, the shortest edges connecting each tree to a vertex outside of it. The number of trees goes down by a factor of two or more in each stage, so there are <i>O</i>(log <i>n</i>) stages. To solve this efficiently for red-blue point sets, the problem we need to solve is the following: given a partition of the points into subsets (the current trees), find for each point the nearest oppositely-colored point that's not in its own tree. Let's call this the "nearest unrelated point" problem, as a convenient shorthand.<br /><br />To solve the nearest unrelated point problem, number the subsets of the partition, and represent each of these numbers in binary as a sequence of <i>O</i>(log <i>n</i>) bits. Define a "canonical set" <i>C</i>(<i>p</i>,<i>b</i>,<i>c</i>) to be the subset of points that belong to a set whose label's <i>p</i>th bit is <i>b</i>, and whose color is <i>c</i>. Then for a point <i>q</i>, the subset of points that are unrelated to <i>q</i> can be expressed as a union of logarithmically many canonical sets <i>C</i>(<i>p</i>,<i>b</i>,<i>c</i>), one for each possible value of <i>p</i>, where <i>b</i> is the complement of the <i>p</i>th bit of the label for <i>q</i>'s subset, and <i>c</i> is the opposite color to <i>q</i>. Therefore, we can solve the nearest unrelated point problem by computing a Voronoi diagram for each canonical set, and building a point location data structure for each Voronoi diagram. For each point <i>q</i> we query the canonical sets whose union is the set of unrelated points to <i>q</i>, and combine the result of the queries to find <i>q</i>'s nearest unrelated point. There are <i>O</i>(log <i>n</i>) Voronoi diagrams, each of which takes logarithmic time to build, after which we take <i>O</i>(log<sup>2</sup> <i>n</i>) time per point to query these diagrams. So the total time for all nearest unrelated points is <i>O</i>(<i>n</i> log<sup>2</sup> <i>n</i>).<br /><br />Since Borůvka's algorithm takes logarithmically many stages, and each stage can be performed using a single computation of all nearest unrelated points, the total time to construct the bichromatic minimum spanning tree is <i>O</i>(<i>n</i> log<sup>3</sup> <i>n</i>). I'm not entirely satisfied with this bound, though. Although much improved from the bichromatic closest pair solution, it still has too many logs. And what I'd really prefer would be a construction like the usual Euclidean minimum spanning tree one, where we find a single sparse graph guaranteed to contain the optimal spanning tree, and then just run a graph algorithm on that graph. So I think there's still more to do on this problem.<a name='cutid1-end'></a>urn:lj:livejournal.com:atom1:11011110:333508Some recent talk slides2016-08-06T00:14:47Z2016-08-06T00:14:47ZThis week I've been in Vancouver for the Canadian Conference on Computational Geometry, where I spoke about <a href="http://11011110.livejournal.com/332331.html">radius-sum optimization</a>. This seemed like a good occasion to post a pointer to the slides from my recent conference talks (and to go back through the talks to make sure their slides were all online), so here they are:<br /><ul><li><a href="http://www.ics.uci.edu/~eppstein/pubs/BalDamEpp-SODA-15-slides.pdf">"Minimum forcing sets for Miura folding patterns"</a>, SODA 2015.</li><br /><li><a href="http://www.ics.uci.edu/~eppstein/pubs/BokCabEpp-GD-15-slides.pdf">"Finding all maximal subsequences with hereditary properties"</a>, SoCG 2015.</li><br /><li><a href="http://www.ics.uci.edu/~eppstein/pubs/AlaEppKau-WADS-15-slides.pdf">"Contact graphs of circular arcs"</a>, WADS 2015.</li><br /><li><a href="http://www.ics.uci.edu/~eppstein/pubs/EppMcCPar-WADS-15-slides.pdf">"Rooted cycle bases"</a>, WADS 2015.</li><br /><li><a href="http://www.ics.uci.edu/~eppstein/pubs/Epp-WADS-15-slides.pdf">"The parametric closure problem"</a>, WADS 2015.</li><br /><li><a href="http://www.ics.uci.edu/~eppstein/pubs/DujEppWoo-GD-15-slides.pdf">"Genus, treewidth, and local crossing number"</a>, GD 2015.</li><br /><li><a href="http://www.ics.uci.edu/~eppstein/pubs/Epp-SODA-16-slides.pdf">"Treetopes and their graphs"</a>, SODA 2016.</li><br /><li><a href="http://www.ics.uci.edu/~eppstein/pubs/EppKinKob-LATIN-16-slides.pdf">"On the planar split thickness of graphs"</a>, LATIN 2016.</li><br /><li><a href="http://www.ics.uci.edu/~eppstein/pubs/EppHir-LATIN-16-slides.pdf">"From discrepancy to majority"</a>, LATIN 2016.</li><br /><li><a href="http://www.ics.uci.edu/~eppstein/pubs/Epp-SWAT-16-slides.pdf">"Cuckoo filter: simplification and analysis"</a>, SWAT 2016.</li><br /><li><a href="http://www.ics.uci.edu/~eppstein/pubs/Epp-CCCG-16-slides.pdf">"Maximizing the sum of radii of disjoint balls or disks"</a>, CCCG 2016.</li></ul>urn:lj:livejournal.com:atom1:11011110:333234Linkage2016-08-01T05:13:28Z2016-08-01T05:14:55Z<ul><li><a href="https://en.wikipedia.org/wiki/Kate_Claghorn">Kate Claghorn</a>, forgotten giant of the Progressive Era (<a href="https://plus.google.com/100003628603413742554/posts/61km89LT2Mo">G+</a>)</li><br /><li><a href="https://github.com/jipsen/latexmathjax">latexmathjax</a>, turn latex sources into nicely formatted web pages by putting them in the same folder as a short html stub (<a href="https://plus.google.com/100003628603413742554/posts/ayYApNQXe39">G+</a>)</li><br /><li><a href="https://www.quantamagazine.org/20150408-a-grand-theory-of-wrinkles/">The physics of wrinkles vs dimples</a> (<a href="https://plus.google.com/100003628603413742554/posts/HNX79qcDo35">G+</a>)</li><br /><li><a href="http://www.reuters.com/article/turkey-security-universities-idUSI7N1A1000">The post-coup crackdown in Turkey extends to higher education</a> (<a href="https://plus.google.com/100003628603413742554/posts/CSCyusj2ztp">G+</a>)</li><br /><li><a href="https://www.insidehighered.com/blogs/mama-phd/plagiarism-rubric">A plagiarism rubric</a>, or maybe a catalog of excuses (<a href="https://plus.google.com/100003628603413742554/posts/7HK2dVmgFB3">G+</a>)</li><br /><li><a href="http://www.polyscene.com/curved/index.htm">Curved folds by Polly Verity</a> (<a href="https://plus.google.com/100003628603413742554/posts/HaqAX4hWLDf">G+</a>)</li><br /><li><a href="http://www.amstat.org/newsroom/pdfs/2016-ASAFellows.pdf">Fellows of the American Statistical Association</a> (<a href="https://plus.google.com/100003628603413742554/posts/MUr1G3hDqbq">G+</a>)</li><br /><li><a href="http://processalgebra.blogspot.com/2016/07/report-on-eatcs-general-assembly-at.html">ICALP business meeting report</a> with discussions on the health of Track C and on strictness of proceedings formatting (<a href="https://plus.google.com/100003628603413742554/posts/cAY68TiYKcs">G+</a> with more discussion)</li><br /><li><a href="https://heatst.com/politics/wikileaks-posts-and-deletes-anti-semitic-tweet-as-it-does-putins-bidding-for-trump/">Wikileaks squanders its legacy for a mess of pottage</a> (<a href="https://plus.google.com/100003628603413742554/posts/ftNG6UwZhNL">G+</a>)</li><br /><li><a href="http://www.dw.com/en/dont-call-me-a-prodigy-the-rising-stars-of-european-mathematics/a-19421389">Former refugee Sara Zahedi</a> and the other winners of the EMS Prize (<a href="https://plus.google.com/100003628603413742554/posts/fk2odrRHMRa">G+</a>)</li><br /><li><a href="http://algo.math.ntua.gr/~gd2016/index.php?id=accepted-papers">Accepted papers for Graph Drawing</a> (<a href="https://plus.google.com/100003628603413742554/posts/SYFwbLWpq5f">G+</a>)</li><br /><li><a href="http://chronicle.com/article/1999-Opening-Lab-Doors-to/237194">Fighting anti-women discrimination in science in 1999</a> (<a href="https://plus.google.com/100003628603413742554/posts/PiJckREzWoN">G+</a>)</li><br /><li><a href="https://www.theguardian.com/science/gallery/2016/jul/27/astronomy-photographer-of-the-year-2016-shortlist-in-pictures">Astronomy photo of the year candidates</a> (<a href="https://plus.google.com/100003628603413742554/posts/WMaZGPCSHeU">G+</a>)</li><br /><li><a href="http://phys.org/news/2016-07-refutes-famous-physical.html">Reversible logic unnecessary for ultra-low power</a> (<a href="https://plus.google.com/100003628603413742554/posts/K4U8kWKkyaX">G+</a>)</li><br /><li><a href="https://www.technologyreview.com/s/602025/how-vector-space-mathematics-reveals-the-hidden-sexism-in-language/">When AIs learn language from human texts, they pick up human sexism</a> (<a href="https://plus.google.com/100003628603413742554/posts/dJwsyEu2fk4">G+</a>)</li><br /><li><a href="https://www.youtube.com/watch?v=IqrsptUdxHs">Promotional video</a> on the algorithmic design of caustics (<a href="https://plus.google.com/100003628603413742554/posts/9hachv2Fn3y">G+</a>)</li></ul>urn:lj:livejournal.com:atom1:11011110:332980Linkage2016-07-16T05:51:38Z2016-07-16T05:51:38ZMore actual posts from the last couple of weeks means fewer links.<br /><ul><li><a href="https://www.youtube.com/watch?v=oWfFco7K9v8">Squircle illusion</a>: now 3d printing can make things round and square at the same time (<a href="https://plus.google.com/100003628603413742554/posts/bBUP52zARpB">G+</a>)</li><br /><li><a href="http://archive.bridgesmathart.org/">The latest wonders of mathematical art from Bridges 2016</a> (<a href="https://plus.google.com/100003628603413742554/posts/NBbD7gkShq2">G+</a>)</li><br /><li><a href="https://sympa.inria.fr/sympa/arc/compgeom-announce/2016-07/msg00002.html">CCCG accepted papers</a> (<a href="http://www.sfu.ca/~shermer/CCCG2016/schedule.pdf">or now there's an actual schedule</a>; <a href="https://plus.google.com/100003628603413742554/posts/Xyv25CoLuzu">G+</a>)</li><br /><li><a href="http://chronicle.com/article/The-U-of-California-s/237044">Low faculty uptake of the University of California's all-subjects open access repository</a> (<a href="https://plus.google.com/100003628603413742554/posts/HBAEJQsmb3M">G+</a>, many good comments)</li><br /><li><a href="https://www.youtube.com/watch?v=WMqmKHcI38A">20-minute nontechnical video documentary about recent hacking culture</a> (<a href="https://plus.google.com/100003628603413742554/posts/eueyjuz7ncr">G+</a>)</li><br /><li><a href="http://blog.wolfram.com/2013/03/28/from-close-to-perfect-a-triangle-problem/">How can you divide a square into finitely many similar acute triangles?</a> (<a href="https://plus.google.com/100003628603413742554/posts/hvYyP72KT34">G+</a>)</li><br /><li><a href="http://blogs.plos.org/plos/2016/07/impact-factors-do-not-reflect-citation-rates/">No article can be judged on the basis of the Impact Factor of the journal in which it is published</a> (<a href="https://plus.google.com/100003628603413742554/posts/GsFnL16BcJX">G+</a>)</li><br /><li><a href="https://www.quantamagazine.org/20160712-hyperuniformity-found-in-birds-math-and-physics">Uniformly-spaced point sets in nature</a> (see also <a href="https://en.wikipedia.org/wiki/Delone_set">Wikipedia on Delone sets</a>; <a href="https://plus.google.com/100003628603413742554/posts/E5vzYhkWpoB">G+</a>)</li><br /><li><a href="http://blog.plover.com/math/17-puzzle.html">A trickier variant of the 4 4's puzzle</a> (<a href="https://plus.google.com/100003628603413742554/posts/4HWgNELfx3A">G+</a>, with spoilers in the comments)</li><br /><li><a href="http://www.theestablishment.co/2016/07/11/even-doing-academic-research-on-video-games-puts-me-at-risk/">Researchers keeping a low online profile</a> in the face of persistent harassment of anyone who criticizes misogyny in computer gaming (<a href="https://plus.google.com/100003628603413742554/posts/YKUU5XJxW6T">G+</a>)</li></ul>urn:lj:livejournal.com:atom1:11011110:332617Preprocessing arrays for fast sorted-subarray queries2016-07-14T01:02:11Z2016-07-14T01:02:11ZSuppose you have an array of <i>n</i> real numbers (or other totally ordered values that you can compare but not treat as small integers). You want to answer queries that specify a contiguous subarray and return the sorted sequence of values within that subarray. Without any preprocessing you could query a subarray of length <i>k</i> in time <i>O</i>(<i>k</i> log <i>k</i>), by pulling out the subarray and then comparison sorting it. With preprocessing, how much better can we do?<br /><br />The obvious answer would be to sort the input, and replace each real number by an integer, its position in the sorted sequence. Doing this would allow us to use <a href="https://en.wikipedia.org/wiki/Integer_sorting">integer sorting</a> algorithms to handle each query. This works particularly well for long queries (longer than <i>n</i><sup><i>ε</i></sup> for some <i>ε</i> > 0), because then you can use <a href="https://en.wikipedia.org/wiki/Radix_sort">radix sort</a> to answer the query in linear time. But it is still somewhat problematic for shorter queries, where we don't have time to set up and then take down the big arrays used by radix sort, and where other integer sorting algorithms are both less practical than radix sort and slower than linear time.<br /><br />So here's a trick that works better. For each <i>i</i> from 1 to log<sup>*</sup> <i>n</i>, divide the array into sub-arrays of size 2<sup>2<sup><i>i</i></sup></sup>. Sort these subarrays (by merging the smaller subarrays from the next smaller value of <i>i</i>) and, for each element, write down its position in the sorted subarray; this is a 2<sup><i>i</i></sup>-bit binary number. Then, for each element of the whole big array, write down one number, the concatenation of these numbers for all the subarrays. (It works best if the bigger subarrays get more-significant bits of the concatenation.) That way, each of the original inputs gets an index number that is still only <i>O</i>(log <i>n</i>) bits long. By doing the recursive array partition top-down instead of bottom-up you can make the number of bits at most 2 log <i>n</i>, and by using a larger base than 2 you can make it at most (1 + <i>ε</i>)log <i>n</i> for any <i>ε</i> > 0.<br /><br />Then, to handle any query subarray of length <i>k</i>, decompose the query into at most two of the subarrays of the recursive decomposition above that are both of length <i>O</i>(<i>k</i><sup>2</sup>). Mask off the higher order bits of the index numbers within those subarrays so that the remaining number of bits is <i>O</i>(log <i>k</i>), small enough that radix sort can be used to sort these numbers in linear time. Merge the two sorted subarrays to give the answer to the query.<br /><br />The time to preprocess the input is <i>O</i>(<i>n</i> log <i>n</i>), unsurprising since we have to comparison sort somewhere. But the space for the resulting data structure is only <i>O</i>(<i>n</i>), and it allows sorted-subarray queries in time linear in the length of the subarray.<a name='cutid1-end'></a>urn:lj:livejournal.com:atom1:11011110:332331Circle packings via matching and LP duality on sparse graphs2016-07-11T07:12:07Z2016-07-11T07:12:07ZI have another new paper out on arXiv: <a href="http://arxiv.org/abs/1607.02184">"Maximizing the Sum of Radii of Disjoint Balls or Disks", arXiv:1607.02184</a>, to appear at <a href="http://www.sfu.ca/~shermer/CCCG2016/">CCCG</a>. The problem solved by the paper is, as the title says, to find a set of disks in the plane (or balls in a metric space), with given centers, that do not overlap each other and have as large a sum of radii as possible. There's some weak motivation in terms of map labeling, but really it's an exercise in how LP duality and sparse graph theory can be used to find efficient combinatorial algorithms for problems that can be solved numerically and less efficiently by linear programming. In fact as I was writing it I half-expected the metric space part to show up as an exercise in a book on related topics, such as Vazirani's book on primal-dual approximation algorithms. Maybe it is and I just didn't find the reference; if so please tell me.<br /><br />First of all, in general metric spaces, "overlap" needs to be defined carefully, because balls that you might think should overlap are not guaranteed to have any points of intersection. Rather, the paper defines as overlapping when their radii sum to more than the distance between their centers. With that definition, the condition that no two balls overlap is given by a system of linear inequalities, and the goal of maximizing the sum of radii is a linear objective function, so we have a linear program. It's a linear program with two variables per inequality, which is suggestive that a combinatorial algorithm should exist: feasibility testing for these programs is strongly polynomial, and they include important combinatorial problems such as shortest paths and bipartite matching.<br /><br />But the ball problem doesn't quite seem to be one of those known problems. Instead, it ends up being the LP dual of the LP relaxation of weighted matching on a complete (not bipartite) graph. That's good, because it relates it to a known problem, but bad, because the LP relaxation of non-bipartite matching is not actually the same as matching itself. To formulate a matching problem as a linear program, you make a variable for each edge of a graph, and look for a way to set these variables to values between zero and one that has a sum of exactly one at each vertex and minimizes the weighted sum of the variables. This works for bipartite graphs, because there is always an optimum solution that assigns zeros and ones to each edge variable; the ones are the matched edges. But for non-bipartite graphs, you sometimes get edge variables equal to 1/2, and then you can't interpret the result of the linear program as a matching. And this linear program with the 0's, 1's, and 1/2's in its solution is the one that is equivalent (under LP duality) to non-overlapping ball radius optimization.<br /><br />So now, we have two problems, where before we had one: how do we find a combinatorial algorithm for this fractional matching-like problem? And how do we turn its solution back into a circle packing?<br /><br />The first question turns out to be easy enough: if we double the edge variables (so they're 0, 1, or 2 instead of 0, 1/2, or 1) what we're looking for are edge multiplicities of a 2-regular multigraph. We can turn the problem of finding the optimal 2-regular multigraph back into a standard matching problem by using the <a href="https://en.wikipedia.org/wiki/Bipartite_double_cover">bipartite double cover</a> of the complete graph. A matching in the double cover is equivalent (up to some choices of cycle orientation that don't matter for us) to a 2-regular multigraph on the vertices of the original complete graph. But the answer to the second question is trickier. It involves understanding the details of weighted graph matching algorithms in terms of primal-dual optimization, in order to extract the dual variables of the matching problem from these algorithms. These dual variables turn out to look like ball radii for the circle packing problem. Only, because we doubled the graph, we double the number of dual variables and end up with two radii for each center, more than we want. Because everything is still linear, it turns out to work to average the two variables, giving a single optimal radius for each circle.<br /><br />That was all the exercise in LP duality. What about the sparse graph theory?<br /><br />Well, we don't actually need to use the complete graph. We just need some graph that contains a basis for the linear program. One that turns out to work is the graph formed by drawing a too-big circle around each center, one that reaches all the way to the nearest neighbor, and then take the intersection graph of these big circles.<br /><br /><div align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/radius-sum-nng.png"></div><br /><br />This graph is non-bipartite, but the same sequence of tricks (doubling the graph, matching, extracting the dual variables from the matching, and averaging them in pairs) still works. Importantly, it's sparse (the number of edges is at most proportional to the number of vertices, with a constant of proportionality depending exponentially on dimension) and obeys a <a href="https://en.wikipedia.org/wiki/Planar_separator_theorem">separator theorem</a> (again depending on dimension). So we can use a separator-based divide and conquer to speed up the matching. The general idea of using separators to speed up matching was long known, but the paper that proved it was too vague in how it handled the dual variables for me to rely on, since that's the information I need it to produce, so (in an appendix to my paper) I rederived that part, and in the process shaved a log factor from its time bound.<br /><br />When we put this all together, we get cubic time for ball packing in metric spaces, but a much faster bound, <i>O</i>(<i>n</i><sup>3/2</sup>) for circles in the Euclidean plane.<a name='cutid1-end'></a>urn:lj:livejournal.com:atom1:11011110:332116Streaming integer points in smaller space2016-07-05T01:11:35Z2016-07-08T23:28:34ZHere's an update to the <a href="http://11011110.livejournal.com/332029.html">streaming integer point puzzle</a> that I posted yesterday. Recall that the puzzle was to generate all the integer points in the plane, in constant amortized time per point, using as little space as possible. In the post, I gave a solution whose space is proportional to the square root of the number of points generated so far. In the comments to <a href="https://plus.google.com/100003628603413742554/posts/21StgVRfqX1">my G+ link to the post</a>, Sariel Har-Peled suggested an improvement, but without much detail. So, here is some detail for Sariel's idea.<br /><br />As before, we use a <a href="https://en.wikipedia.org/wiki/Bucket_queue">bucket queue</a> of candidates for the next point to generate, but with fewer candidates. To make the space small, we should implement the bucket queue as hash table of buckets (as I implemented it) rather than an array of buckets (as it is usually described).<br /><br />Instead of maintaining a pixelated curve representing the frontier between generated and not-yet-generated points, we maintain the <a href="http://Convex hull">convex hull</a> of the generated points, together with a candidate point for the next point to generate, beyond each hull edge. Each edge's candidate is the closest point to the origin that has not yet been generated and that lies on the far side of the edge from the origin. As before, the priorities of each candidate are just their squared Euclidean distances from the origin.<br /><br />In most cases, a convex hull edge will not have any interior grid points. Then it turns out that the candidate for each such edge must form a triangle of area 1/2 with that edge, by <a href="https://en.wikipedia.org/wiki/Pick%27s_theorem">Pick's theorem</a>, or else there would be a better candidate inside the triangle. That means that it must lie on a line parallel to the edge, the one closest to the edge that passes through at least one integer point. On this line, there are infinitely many grid points, but in most cases only one or two lie within a rectangle having the given edge as one side and the line through the candidate as the other side. The candidate must be one of these one or two rectangle points.<br /><br /><div align="center"><img src="http://www.ics.uci.edu/~eppstein/0xDE/disk-hull-candidates.png"></div><br /><br />When a convex hull edge has interior grid points, its candidate will still lie on the closest grid line, but the rectangle defined by the edge and the line may have more than one grid point on it. In these cases we can still find a single best candidate point but it will be helpful also to store a pair of closest points along the edge, in order to make it easier to construct future candidates.<br /><br />When we generate a new point, we can subdivide the convex hull edge that it comes from (the one that it is a candidate for) into two edges through the new point, and compute the new candidates for these two new edges, in constant time, by looking at small integer combinations of the edge endpoints, the generated point, and (in cases where the edge has interior points) the vector difference between consecutive points along the edge. But the problem is that the polygon resulting from this subdivided step might not be convex. So, as long as one of the two new edges has a nonconvex angle, we have to merge it and its adjacent edge, popping out a triangle and making the polygon closer to its convex hull. In each of these merge steps, the candidate point for the merged edge can be taken as the better of the two candidates for the edges being merged (these candidates have not been generated yet, so they must still be outside the convex hull and outside the merged edge, and if one of them was the closest outside point before the merge then it remains so after the merge). Each merge step reduces the hull complexity and can be charged against an earlier step that increased the complexity. So the total time per generated point still remains constant amortized.<br /><br />The remaining question is, how much space does this structure use? Equivalently, when the disk of a given radius centered at the origin has <i>n</i> points in it, how many edges can its convex hull have? Conveniently, this question has already been answered by Balog and Bárány, in their paper "<a href="http://doi.org/10.1145/109648.109666">On the convex hull of the integer points in a disc</a>" in SoCG 1991. They show that the answer is Θ(<i>n</i><sup>1/3</sup>). Therefore, the same <i>O</i>(<i>n</i><sup>1/3</sup>) bound holds for the space of this point-generation algorithm.<br /><br />ETA 7/7: It might not actually be the case that the closest point beyond a hull edge is inside the rectangle. For instance, when the squared distance is 481, we might have a hull edge (16,15)–(18,12) (with point (20,9), on the same line and also at squared distance 481, not yet generated). In that case the point in the rectangle is (17,14) at squared distance 485, but there is a closer point beyond the edge, (19,11) at squared distance 482. Nevertheless, it seems to work correctly for each edge to maintain as its candidate the unique rectangle point (or, in the case that the two corners of the rectangle are both lattice points, so that it's actually a lattice square, the one of these two points that is closest to the origin) and let other hull edges worry about other points that might be closer.<br /><br />ETA2, 7/8: <a href="http://www.ics.uci.edu/~eppstein/PADS/IntegerPoints.py">Implemented and tested up to radius 100</a>.<a name='cutid1-end'></a>urn:lj:livejournal.com:atom1:11011110:332029Streaming integer points sorted by distance2016-07-03T23:14:32Z2016-07-04T16:59:22ZHere's a puzzle in streaming algorithms: suppose you want to generate a stream of all the (infinitely many) integer points (<i>x</i>,<i>y</i>) in the plane, in sorted order by their Euclidean distance from the origin. How little space do you need?<br /><br />The answer is <i>O</i>(1), if you assume that a single variable can store any number whose size is comparable to the coordinates output so far and you're willing to do it slowly enough. First, observe that you can avoid non-integer arithmetic by using the squared distance <i>x</i><sup>2</sup> + <i>y</i><sup>2</sup> in place of the distance itself. Maintain a current squared distance <i>d</i> and a number <i>r</i> equal to the square root of <i>d</i> rounded up to an integer (both initially zero). Search a square of radius <i>r</i>, outputting all points at distance <i>d</i>, then increment <i>d</i> and update <i>r</i> and repeat.<br /><br />But now suppose you want to do it much more quickly, constant (amortized) time per point. In this case it's still possible to achieve sublinear space (as a function of the output length so far) with a little data structural help. The idea is to observe that if <i>n</i> points have been output so far, then they form a pixelated disk whose boundary length is proportional to √<i>n</i>. By maintaining a priority queue of boundary points, each can be found quickly. A suitable priority queue is the <a href="https://en.wikipedia.org/wiki/Bucket_queue">bucket queue</a> (new Wikipedia article): an array of buckets, indexed by squared distance, where bucket <i>i</i> stores all the boundary points at squared distance <i>i</i>. Conveniently, the maximum squared distance seen at any time will be proportional to the number of points output, so the total time spent scanning the array for the next nonempty bucket can be amortized out to constant time per point.<br /><br />Is less than √<i>n</i> space possible? I don't know, but I also don't know any streaming lower bound techniques powerful enough to prove that it isn't possible. Most of the lower bounds I know of are information theoretic, but the slow constant-space method shows that information theory alone won't prove anything nontrivial for this problem.<br /><br />Along with the Wikipedia article, I added to my <a href="http://www.ics.uci.edu/~eppstein/PADS/">PADS library of Python implementations</a> three new modules: <a href="http://www.ics.uci.edu/~eppstein/PADS/BucketQueue.py">BucketQueue.py</a> (bucket queues), <a href="http://www.ics.uci.edu/~eppstein/PADS/IntegerPoints.py">IntegerPoints.py</a> (the fast streaming integer point algorithm), and <a href="http://www.ics.uci.edu/~eppstein/PADS/GraphDegeneracy.py">GraphDegeneracy.py</a> (another application of bucket queues for <a href="https://en.wikipedia.org/wiki/Degeneracy_(graph_theory)">graph degeneracy</a> and triangle finding).<a name='cutid1-end'></a>urn:lj:livejournal.com:atom1:11011110:331528Reykjanes2016-07-02T17:42:32Z2016-07-02T17:42:32Z<p>Here are some of my photos from the SWAT excursion to the Reykjanes peninsula, and of some of the participants. Iceland (even this small part of it) was easily as scenic as I had been led to believe.</p><br /><br /><div style="clear:both"></div><div align="center"><table border="0" cellpadding="10">
<tr align="center" valign="middle">
<td><a href="http://www.ics.uci.edu/~eppstein/pix/reykjanes/DanielMarx.html"><img src="http://www.ics.uci.edu/~eppstein/pix/reykjanes/DanielMarx-m.jpg" width="240" border="2" style="border-color:black;" /></a></td>
<td><a href="http://www.ics.uci.edu/~eppstein/pix/reykjanes/Kleifarvatn3.html"><img src="http://www.ics.uci.edu/~eppstein/pix/reykjanes/Kleifarvatn3-m.jpg" width="360" border="2" style="border-color:black;" /></a></td>
</tr><tr align="center" valign="middle">
<td><a href="http://www.ics.uci.edu/~eppstein/pix/reykjanes/PetteriKaskiAndAndreasBjorklund.html"><img src="http://www.ics.uci.edu/~eppstein/pix/reykjanes/PetteriKaskiAndAndreasBjorklund-m.jpg" width="360" border="2" style="border-color:black;" /></a></td>
<td><a href="http://www.ics.uci.edu/~eppstein/pix/reykjanes/MagnusHalldorsson.html"><img src="http://www.ics.uci.edu/~eppstein/pix/reykjanes/MagnusHalldorsson-m.jpg" width="240" border="2" style="border-color:black;" /></a></td>
</tr><tr align="center" valign="middle">
<td><a href="http://www.ics.uci.edu/~eppstein/pix/reykjanes/Seltun3.html"><img src="http://www.ics.uci.edu/~eppstein/pix/reykjanes/Seltun3-m.jpg" width="240" border="2" style="border-color:black;" /></a></td>
<td><a href="http://www.ics.uci.edu/~eppstein/pix/reykjanes/Valahnukur3.html"><img src="http://www.ics.uci.edu/~eppstein/pix/reykjanes/Valahnukur3-m.jpg" width="360" border="2" style="border-color:black;" /></a></td>
</tr></table></div><br /><br /><p><b>( <a href="http://www.ics.uci.edu/~eppstein/pix/reykjanes/index.html">The rest of the photos</a> )</b></p>urn:lj:livejournal.com:atom1:11011110:331438Linkage2016-07-01T05:35:55Z2016-07-01T05:35:55ZI'm getting the hard-to-quantify but persistent feeling that G+ is getting quieter lately...too much of the actual content has moved elsewhere, maybe, and I'm seeing more of the filler. Wouldn't be surprised if Google pulls the plug soon, like they have on other projects. But for now here's my filler for the last couple of weeks.<br /><ul><li><a href="https://www.insidehighered.com/quicktakes/2016/06/16/examining-why-female-students-leave-engineering">Why do women leave engineering?</a> (<a href="https://plus.google.com/100003628603413742554/posts/cjY35yveEx2">G+</a>)</li><br /><li><a href="http://www.conwaylife.com/forums/viewtopic.php?f=7&t=2188&start=75">Still life prototiles</a> (<a href="https://plus.google.com/100003628603413742554/posts/2AFNpeiLsbS">G+</a>)</li><br /><li><a href="http://drops.dagstuhl.de/portals/extern/index.php?semnr=16005">Proceedings of the 32nd International Symposium on Computational Geometry</a>, free online (<a href="https://plus.google.com/100003628603413742554/posts/gCk97o7meFT">G+</a>)</li><br /><li><a href="http://lemire.me/blog/2016/06/15/how-fast-is-tabulation-based-hashing-or-the-downsides-of-zobrist/">How fast is tabulation-based hashing?</a> Not as fast as you might hope (<a href="https://plus.google.com/100003628603413742554/posts/afeDtm4MjYL">G+</a>)</li><br /><li><a href="https://circlesandtrianglesblog.wordpress.com/2016/06/06/three-dimensional-tessellation/">Three dimensional tessellation of crosses</a> (<a href="https://plus.google.com/100003628603413742554/posts/itrith3hLwa">G+</a>)</li><br /><li><a href="http://curiosamathematica.tumblr.com/post/140731259824/animation-by-twocubes-showing-the-roots-of-the">Animations of polynomial roots</a> as one coefficient moves on a circle in the complex plane (<a href="https://plus.google.com/100003628603413742554/posts/WsRdtQfMdH9">G+</a>)</li><br /><li><a href="http://drops.dagstuhl.de/portals/extern/index.php?semnr=16008">Proceedings of the 15th Scandinavian Symposium and Workshops on Algorithm Theory (SWAT 2016)</a>, also free online (<a href="https://plus.google.com/u/0/100003628603413742554/posts/DPSPPYRYobL">G+</a>)</li><br /><li><a href="http://www.metafilter.com/160532/Translated-he-says-Yes-yes-yes-yes-yes-we-are-winning-this">Iceland 2 Austria 1</a>, a fun thing to experience in Iceland at SWAT (<a href="https://plus.google.com/100003628603413742554/posts/976LpxHEmkG">G+</a>)</li><br /><li><a href="https://twitter.com/kcsaff/status/744351065496182784">Singular they</a>, still the right way to do gender-neutral third-person pronouns (<a href="https://plus.google.com/100003628603413742554/posts/1AqG4ZDviMt">G+</a>)</li><br /><li><a href="http://www.physics.utoronto.ca/nonlinear/PNASpress/PNASpress.html">Make your own miniature columnar basalt out of corn starch</a> (<a href="https://plus.google.com/100003628603413742554/posts/PAxuLJBGvei">G+</a>)</li><br /><li><a href="http://www.smithsonianmag.com/history/surprising-history-infographic-180959563/?no-ist">The 200-year history of infographics</a> (<a href="https://plus.google.com/100003628603413742554/posts/NHmZVYcP8q4">G+</a>)</li><br /><li><a href="https://www.insidehighered.com/news/2016/06/27/stopping-tenure-clock-may-help-male-professors-more-female-study-finds">Having a child-care tenure-delay policy hurts women by giving a greater advantage to the men</a> (<a href="https://plus.google.com/100003628603413742554/posts/5H5NGKmfPP7">G+</a>)</li><br /><li><a href="https://www.wired.com/2016/06/researchers-sue-government-computer-hacking-law/">Researchers sue for the right to investigate algorithmic discrimination</a> (<a href="https://plus.google.com/100003628603413742554/posts/DR4qLZKKFAa">G+</a>)</li><br /><li><a href="https://news.artnet.com/art-world/yinmn-blue-to-be-sold-commercially-520433">Chemical serindipity finds a new blue</a> (<a href="https://plus.google.com/100003628603413742554/posts/Y9TAToMTzXr">G+</a>)</li></ul>urn:lj:livejournal.com:atom1:11011110:331074Reykjavik street art2016-06-29T04:22:58Z2016-06-29T04:22:58ZHere's the first of two batches of photos from my recent visit to Iceland. This set is from before the conference, when I had most of a day free to wander around Reykjavik. It's mostly of street art from the touristy shopping area where my hotel was located, and graffiti from some rougher looking areas nearby. This shot was the first I had a chance to take, of a building across the street from my hotel:<br /><br /><div align="center"><img src="http://www.ics.uci.edu/~eppstein/pix/reykjavik/Caratoes-m.jpg" border="2" style="border-color:black;" /></div><br /><br /><b>( <a href="http://www.ics.uci.edu/~eppstein/pix/reykjavik/index.html">More photos</a> )</b>urn:lj:livejournal.com:atom1:11011110:330960Open problems from SWAT2016-06-25T09:04:32Z2016-06-25T09:04:32ZI'm now making my way back from Iceland, where I attended the <a href="http://swat16.ru.is">15th Scandinavian Symposium and Workshops on Algorithm Theory (SWAT 2016)</a>. Rather than providing a run-down of the talks and results I found interesting (you can choose your own from the <a href="http://drops.dagstuhl.de/portals/extern/index.php?semnr=16008">conference proceedngs</a>, this year provided as open-access through <a href="http://drops.dagstuhl.de/opus/institut_lipics.php?fakultaet=04">LIPIcs</a>), I thought it might be more fun to mention a few open problems that people mentioned along the way and that caught my attention.<br /><br />The first invited talk, by Julia Chuzhoy, concerned the relation between grid minor size and treewidth. There exist graphs of treewidth t whose biggest grid minor has side length O(sqrt t/log t), and the results she spoke about give polynomiial lower bounds, but with much smaller exponents (currently around 1/19). As her abstract states, "an important open question is establishing tight bounds" for this problem.<br /><br />From Zachary Friggstad's talk on integrality gaps for directed Steiner trees, we have the situation that (for directed Steiner tree problems with t terminals) it is possible to approximate the solution within a t<sup>ε</sup> factor, for any ε > 0, in polynomial time, or to within a polylog factor in quasipolynomial time. Is a polynomial-time polylog-factor approximation possible?<br /><br />Daniël Paulusma spoke on finding square roots of k-apex graphs; that is, one is given a graph G that could be made planar by the deletion of k vertices, and the goal is to find another graph R on the same vertex set such that two vertices are adjacent in G if and only if their distance in R is at most two. There are a lot of other graph classes for which the problem is known to be polynomial or hard, but he listed as open finding square roots of split graphs or cographs, and finding graph square roots that are planar.<br /><br />Jens Schmidt's talk was motivated by some older work of Mikkel Thorup on recognizing map graphs, the intersection graphs of interior-disjoint simply-connected regions in the plane. These differ from planar graphs because of the four corners phenomenon, where Arizona, Colorado, New Mexico, and Utah all meet at a point (and are all adjacent in the map graph). Thorup gave a polynomial time recognition algorithm but his exponent is huge and his algorithm does not provide a combinatorial certificate of being a map graph (a planar bipartite graph whose half-square is the given graph). Schmidt gave a more satisfactory solution to a special case but would like a better algorithm for the general problem.<br /><br />My own talk concerned <a href="http://11011110.livejournal.com/327681.html">cuckoo filters</a>, a more space-efficient replacement for Bloom filters. A data structure of Pagh et al provides a theoretical but not-yet-practical solution for the same problem (for all false positive rates), but cuckoo filters only work well when the false positive rate is small enough. What about if we want a practically efficient filter that gives a high false positive rate, say 20%? Can we get close to optimal space in this case?<br /><br />Konrad Dabrowski made progress on classifying which sets of forbidden induced subgraphs lead to graph families with bounded clique-width by showing that (diamond,P1+2P2)-free graphs and four other similarly defined classes do have bounded clique-width. But as he reports, there are many remaining open cases.<br /><br />Dana Richards spoke on a problem of comparison-sorting a set of items when only certain pairs of items are allowed to be compared, but his paper has more questions on this problem than answers. Any set of comparisons that you make (a subset of allowed ones) gives you a DAG with an edge for each comparison, oriented from smaller to larger, and you can infer the results of all comparisons in the transitive closure of this DAG. The goal is to either test or infer the results of all allowed comparisons. You can do it in a sublinear number of comparisons when either the set of allowed comparisons is small (by just doing them all) or its complement is small (by Richards' algorithm) but what he would like to prove is a subquadratic (deterministic) bound that holds in all cases.<br /><br />Timothy Chan revisited one of the first kinetic data structures, for closest pairs (and/or nearest neighbors). The static version of the problem can be solved in O(n log n) time in any constant dimension, but previous kinetic structures had a factor of log<sup>dimension</sup> in their time bounds. Chan eliminated this, but at the expense of making the time bound depend on the geometry of the input (the range of values that the closest pair might span) instead of just on the number of points. He asked whether it is possible to eliminate both the dependence on dimension and the dependence on geometry.<br /><br />One of the disadvantages of the move from paper to electronic proceedings (at least in my own experience) is less browsing and more going directly to the papers you already knew you were looking for. And one of the continuing advantages of going to a symposium like this (especially a small and welcoming one like SWAT) is that by listening to talks on subjects you don't already know about, you can broaden your own interests and find out about topics you might not have discovered on your own. But browsing is still possible, even if we no longer are forced to leaf through paper proceedings. So, I'd encourage you to download the full proceedings (from the link at the top left corner of the proceedings link) rather than just the individual papers, and browse them to find many more problems that the papers there have listed as open.<a name='cutid1-end'></a>urn:lj:livejournal.com:atom1:11011110:330609Lesley2016-06-20T01:02:53Z2016-06-20T01:03:31ZI've been slow processing this but the arrival of the official shots reminded me: this is from my daughter's graduation a month ago from Lesley (with a B.F.A. in photography).<br /><br /><div align="center"><img src="http://www.ics.uci.edu/~eppstein/pix/lesley/2-m.jpg" border="2" style="border-color:black;" /></div><br /><br />Sara tells me she likes <a href="http://www.ics.uci.edu/~eppstein/pix/lesley/1.html">the other shot</a> better, though.