algorithms in computer science notes