data structures and algorithms for data science