Sequences and Time-Series have many applications. The primary inspiration for this project is my experience solving problems in programming with a strong mathematical component, such as those found on Project Euler, as well as my desire to get more experience implementing high-performance, concurrent applications in C++.
Often these problems that fuse concepts from Discrete Maths with programming can be solved using state-based models like markov chains. You can see an example of this in Leetcode Problem 552, and I plan on writing solutions using this approach to more complex problems soon.
The project is currently in its infancy so I haven’t made it public yet, but it will be an open source tool for tackling these problems; while there already exist solutions for automatically generating markov chains to fit a sequence, they require the user to preprocess the sequence to the point that it can be represented using a succint markov chain. This project aims to broaden the capabilities of existing tools to move some of this burden of preprocessing and understanding off the user, and produce a model that is easily implemented in a performance-critical environment.
For example, many of the problems I have come across have properties where successive numbers in a sequence can be grouped together into blocks, and it is far more useful to analyse the sequence of these blocks rather than the sequence itself. This tool would allow the user to suggest a range of block sizes to try, fit models using these different sizes, and then provide a commentary on how well these different models fit.
Overall, this project aims to improve on existing solutions in the following ways:
- more tools for automating preprocessing and assessing models
- greater performance when generating models
- simpler models with fewer states
- reducing ‘black boxes’
- increasing model performance