In the past few weeks, I have made myself familiar with a book called “The Algorithm Design Manual”, by Steven Skiena. As the title suggests, the book mainly focuses on algorithms. In the first chapters, the focus is on analysing and proving algorithms which in this case are mainly mathematical.
The first
chapter of the book focuses on explaining the reader how to properly analyse
algorithms. Of course, the reader is first introduced to the concept of
algorithms and how they function. Next the reader is explained how an algorithm
can go wrong. This is done by first introducing a problem, then telling the
reader different possible solutions, all of which end up not really solving the
problem. I found this method of teaching to be effective because instead of
straight up getting the right answer to do things properly, I also learned why
certain things don’t work.
Afterwards
the book moves on to explaining the reader how to prove that your algorithm is
working. However, it can be rather
challenging to prove that an algorithm works as designed which is why it might
be easier to prove that an algorithm does not work. If you have any experience
on upper secondary level mathematics, this method of proving something might
already be somewhat familiar.
The first
chapter focused on how to define a problem and briefly explained how to solve
it. The second chapter, on the other hand, focuses more on the analytical and
mathematical side of algorithms solving and proving. In this chapter the reader
is met with a bunch of mathematical functions that may or may not prove
themselves useful on the long run. For me this chapter was definitely the more
challenging read. I was a bit taken back by the amount of math I had to read
through in this chapter, but I can also see the benefit of knowing these things
in computer science.
I had very
few expectations when starting to read this book. I chose it because it seemed
like a good overall book to help me create better-functioning algorithms in the
future. Though the first chapters have been more on the analytical side, which
has admittedly felt a bit draining. But I believe that with further reading the
book could prove itself to be interesting and instructive. I think this book
could be an excellent thing to read if you want to learn the more analytical
side of computer science.