Book Image

C++ Data Structures and Algorithm Design Principles

By : John Carey, Anil Achary, Shreyans Doshi, Payas Rajan
Book Image

C++ Data Structures and Algorithm Design Principles

By: John Carey, Anil Achary, Shreyans Doshi, Payas Rajan

Overview of this book

C++ is a mature multi-paradigm programming language that enables you to write high-level code with a high degree of control over the hardware. Today, significant parts of software infrastructure, including databases, browsers, multimedia frameworks, and GUI toolkits, are written in C++. This book starts by introducing C++ data structures and how to store data using linked lists, arrays, stacks, and queues. In later chapters, the book explains the basic algorithm design paradigms, such as the greedy approach and the divide-and-conquer approach, which are used to solve a large variety of computational problems. Finally, you will learn the advanced technique of dynamic programming to develop optimized implementations of several algorithms discussed in the book. By the end of this book, you will have learned how to implement standard data structures and algorithms in efficient and scalable C++ 14 code.
Table of Contents (11 chapters)

Introduction

Loved and feared in equal measure by many programmers, dynamic programming (DP) is a conceptual extension of the divide-and-conquer paradigm that pertains to a specific class of problems. The difficulties involved in dynamic programming problems are multi-faceted and often require creativity, patience, and the ability to visualize abstract concepts. However, the challenges these problems pose frequently have elegant and surprisingly simple solutions, which can provide a programmer with insights that reach far beyond the scope of the immediate task.

In the previous chapter, we discussed several techniques, such as the divide-and-conquer and the greedy approach. These approaches, though quite effective in the right circumstances, will not produce optimal results in certain situations. For example, in the previous chapter, we discussed how Dijkstra's algorithm does not produce optimal results for graphs with negative edge weights, whereas the Bellman-Ford algorithm does. For...