Algorithms and data structures are the basic building blocks of all computer programs. They are typically made available via data and procedural abstraction that aims to separate the logical perspective from the physical realization by creating interfaces whose usage does not depend on what is “under the hood”.
This ability to abstract away the underlying implementation is a very powerful idea that contributed immensely to computer science’s overall success and impact. However, in recent years, maintaining this kind of abstractions became more of a liability than an advantage. The main reason for that is the fact that much of the modern high-performance algorithmic results are very specialized in their applicability. Consequently, using such algorithms in an optimal way requires extensive expertise and thorough understanding of both the underlying implementations and the characteristics of the input data. Needless to say, this is not something we can expect from a typical programmer.
The goal of this project is to address this state of affairs by asking a question on the possibility of “unification of algorithms”. That is, developing a principled algorithmic framework that would enable one to combine a number of existing algorithms that perform well only in specific scenarios, into a single all-around optimal solution. Naturally, achieving this very ambitious goal in its full generality will be a major undertaking requiring many years of focused effort.
We believe that some of the recent advances in algorithms suggest that we have now the opportunity to make serious progress towards achieving such goal for several fundamental algorithmic problems. We hope that our project will pave a way towards unified algorithms that will remove the need to look “under the hood” when using them.