A well-written book which would give a solid foundation in Computing Science and Software Engineering courses
The aim of this book is to give a solid foundation to the study of algorithms in computer science. It starts by discussing abstraction and its impact on the development of society, i.e. language, the alphabet (abstract symbol system), mechanical reproduction of physical objects (printing press) and electronic media technology (telephonic communication, records, TV and finally the Internet). This material can be regarded as optional reading putting the development of abstraction in computing in perspective. Chapter two discusses why one should think in terms of algorithms, what makes a good algorithm, how they are represented and implemented in programming languages, etc. The main section of the book covers the entire range of algorithmic constructs starting with simple data types and operations, through procedural abstraction (modules, parameters, recursion), data abstraction (records, arrays, linked lists, tress, graphs, etc.) and manipulation (searching, sorting, optimising access) to the object oriented paradigm. There is then a discussion of important issues such as correctness and verification and techniques for understanding and estimating the cost and complexity of algorithms. The final part of the book entitled 'The Limits of Computing' discusses what computers can and cannot do, covering concurrency and parallelism (this presents many precise definitions which I will use in my teaching), tractable, intractable and NP-complete problems.
A well-written book which would give a solid foundation in Computing Science and Software Engineering courses (preferably before students start programming). I disagree with the OO enthusiasts who do not consider the study of other paradigms necessary. An understanding of the fundamentals of algorithms and their implementation is essential! Highly recommended!