To develop efficient algorithms for simple computational tasks and reasoning about the correctness of them. Algorithm design and analysis provide the theoretical backbone of computer science and are a must in the daily work of the successful programmer.