Although vast activity exists, especially recent, the editors did not find any book that treats applied algorithms in a comprehensive manner. The editors discovered a number of graduate courses in computer science programs with titles such as “Design and Analysis of Algorithms, “Combinatorial Algorithms” “Evolutionary Algorithms” and “Discrete Mathematics.” However, when glancing through the course contents, it appears that they were detached from the real-world applications. On the contrary, recently some graduate courses such as “Algorithms in Bioinformatics” emerged, which treat one specific application area for algorithms. Other graduate courses heavily use algorithms but do not mention them anywhere explicitly. Examples are courses on computer vision, wireless networks, sensor networks, data mining, swarm intelligence, and so on.
Generally, it is recognized that software verification is a necessary step in the design of large commercial software packages. However, solving the problem itself in an optimal manner precedes software verification.Was the problem solution (algorithm) verified? One can verify software based on good and bad solutions. Why not start with the design of efficient solutions in terms of their time complexities, storage, and even simplicity? One needs a strong background in design and analysis of algorithms to come up with good solutions.
This book is designed to bridge the gap between algorithmic theory and its applications. It should be the basis for a graduate course that will contain both basic algorithmic, combinatorial and graph theoretical subjects, and their applications in other disciplines and in practice. This direction will attract more graduate students into such courses. The students themselves are currently divided. Those with weak math backgrounds currently avoid graduate courses with a theoretical orientation, and vice versa. It is expected that this book will provide a much-needed textbook for graduate courses in algorithms with an orientation toward their applications.