591 karma · joined November 19, 2016
There are also problems in online algorithms where randomization provably changes what is possible, for example the "cup game problem." (https://arxiv.org/abs/1904.02861)
Finally, although randomized primality testing (1970s) is often credited as the start of randomized algorithms as a field, it's worth noting that hash tables (1954) and quick sort (1961) were much earlier.
I didn't invent the algorithmic idea --- it's basically a simplification of a data structure that was published in ICALP 2003 [1]. As far as I know, the idea of combining hash tables and tries in this kind of way (despite being incredibly simple!) doesn't appear in either the theoretical or experimental literature prior to that.
I'd be interested in any other earlier sources that people might have.
[1] Raman, Rao. Succinct Dynamic Dictionaries and Trees. https://link.springer.com/chapter/10.1007/3-540-45061-0_30. ICALP, 2003.
There are already implementations of sample sorting that are much faster than c++ sort (but I don't recall how much faster). I'd be very interested in a comparison to some of those...
Also, since we are sorting integers, I'd also be interested to know how well a modern implementation of radix sort can be made.
"sum (20000 choose x)/2^20000 for x from 10231 to 20000",
which Wolfram Alpha evaluates to 0.00056.
The probability of getting a number of flips that differs from 10000 by at least 231 is twice that, so about 0.001.
So, in fact, the probability of this happening by dumb luck is about 1/1000. That's pretty strong evidence.
The reason this does well, is that oftentimes, (1) overestimates the true answer by roughly the same multiplicative factor as (2) underestimates the true answer by. So the geometric mean cancels the over and under estimates in order to get an estimation that does pretty well.
I find that this works remarkably well for estimating the dimensions of buildings, trees, etc.
The widespread emergence of nonprofit open access journals is promising. I am hoping that in twenty years, Elsevier will be a thing if the past.
If tasks arrive arrive randomly at the same average rate as they can be processed, then the amount of time that the nth task will have to wait is proportional to sqrt(n) in expectation. So one would expect a total waiting time of n^1.5, which incidentally fits much better to their plotted curve than n^2 does.
"If both operands are nonnegative then the remainder is nonnegative; if not, the sign of the remainder is implementation-defined"
Fortunately, this was changed at some point between C '99 and C '11, so that now the remainder is consistently defined across all implementations.
I don't like any voting system that incentivizes group collusion. A much fairer system would be some form of random ballot: everyone gets to allocate some number of votes, and then a random vote gets picked to select the winner. This type of system is especially good for situations where there are many winners (eg the Congress), since it allows for even small parties (eg the Green party) to get proportionate representation.
Interestingly Arrow's theorem doesn't apply to randomized voting systems. In particular, the system of picking a random voter to decide the election satisfies (probabilistically) every standard notion of fairness.
To make matters worse, this is an evolved trait: researchers whose papers are intimidating are more likely to succeed, which means they're more likely to have future PhD students, which means that the style of writing is more likely to get passed on.
I think the main way to address this is to change the incentives. In particular, by creating publication venues that value simplicity and clarity (one such conference is SOSA, which has had a lot of impact on theoretical computer science in the last few years).
Small comment on the argument against anti-aging genes existing: "genes only propagate if selected for, and there’s no selective pressure for longevity after reproductive age" (I know that this was just a very minor aside, but I still think it's worth pointing out the flaw.)
That's not how evolution works. Even after you have reproduced, you have impact on whether your children survive and reproduce. This means that there could very reasonably be evolutionary pressure in either direction (causing people to die younger that way they stop taking resources from their children or causing people to live longer that way they keep providing support for their children).
Based on that, it seems like the outcomes of the tests are pretty reasonable.
Also, if you're interested in learning more about B^\epsilon trees, here's a talk given by Rob Johnson a few years ago at Microsoft Research: BetrFS: A Right-Optimized Write-Optimized File System https://www.youtube.com/watch?v=fBt5NuNsoII
In general, I think it's really cool that there is a file system that exists today (i.e., BetrFS) that uses data structures which didn't exist 25 years ago. It's a great example of theoreticians and systems researchers working together.
Small comment: Ideally, big-O notation is for upper bounds. If you are doing lower bounds, you should ideally use big-Omega notation. But Omegas are harder to format in plain text, so it may be better to abuse notation and use big-O...