How quickly do algorithms improve?
news.mit.edu
news.mit.edu
One of the less illuminating analogies I've heard. People should stick to "recipe" or "assembly instructions" and don't try to get so creative.
more like a process in a factory - material handling, coordination, input, output
https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=954...
It loses any feeling of objectivity, but it'd be interesting to broaden the question to approximate or specialized solutions, or things that make larger problems practical to solve without improving big-O. For some examples:
- probabilistic sketches have been very successful at approximately answering questions that took a lot more work to answer exactly
- adapting algorithms to hardware like GPUs doesn't reduce how many operations are done, but can make the operations cheaper/faster for the right problem
- similarly, a good parallel or distributed approach to a problem doesn't change the big-O, but is often what allows scaling up to big n in practice
- the B-tree (1970) did not improve on the big-O of the AVL tree (1962), but it made databases as we know them a lot more practical
- LSM trees and compressed columnar storage also don't improve big-O, but provide big benefits for write-heavy and scan-heavy workloads
Generally that pushes me more towards "hardware isn't responsible for all the advancements". Also, there's a fun conversation (happening out there, I assume) about how to value the sort of work that's more pragmatic than improving on a complexity bound but also more fundamental than just tuning some asm or C.
I'd bet lazily slapping caches on things has saved more total time than all other computer optimizations combined.
For compilers, "Proebsting's law" suggests the total gain from all compiler research to date has been ~3%/year or >3.3x total: https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.29...
If you prefer video, I've made a short summary video: https://youtu.be/R0k80fSRLts
The gains are not linearly related to the capacity or speed of memory. The memory improvements accomplish just the removal of a bottleneck.
You remove a bottleneck and everything flows faster instead of pools. So the increase itself can be greater than the same as the increase in the size of the corridor.
This is easily seen if you look at fun algorithms such as BDDs. If you have the memory for them, they are amazingly fast. But, if you don't have the memory for it, it gets you nothing.
Edit: removed a "not" that I didn't mean to type. :(