This document introduces algorithms and their design. It defines an algorithm as a sequence of unambiguous instructions to solve a problem within a finite time. It discusses algorithm notation, features, and examples for finding the greatest common divisor and prime numbers. The document outlines the algorithm design process of understanding the problem, deciding on a representation, designing a model, proving correctness, analyzing efficiency, coding it, and classifying algorithms. It also covers important problem types like sorting, searching, and graphs, and fundamental data structures like arrays, linked lists, stacks, queues, trees, and graphs.