figure abstract data type allow us to define the complex data models for our problems without giving any indication as to the details of how the model will actually be built this provides an implementationindependent view of the data since there will usually be many different ways to implement an abstract data typethis implementation independence allows the programmer to switch the details of the implementation without changing the way the user of the data interacts with it the user can remain focused on the problem-solving process why study algorithmscomputer scientists learn by experience we learn by seeing others solve problems and by solving problems by ourselves being exposed to different problem-solving techniques and seeing how different algorithms are designed helps us to take on the next challenging problem that we are given by considering number of different algorithmswe can begin to develop pattern recognition so that the next time similar problem ariseswe are better able to solve it algorithms are often quite different from one another consider the example of sqrt seen earlier it is entirely possible that there are many different ways to implement the details to compute the square root function one algorithm may use many fewer resources than another one algorithm might take times as long to return the result as the other we would like to have some way to compare these two solutions even though they both workone is perhaps "betterthan the other we might suggest that one is more efficient or that one simply works faster or uses less memory as we study algorithmswe can learn analysis techniques that allow us to compare and contrast solutions based solely on their own characteristicsnot the characteristics of the program or computer used to implement them in the worst case scenariowe may have problem that is intractablemeaning that there is no algorithm that can solve the problem in realistic amount of time it is important to be able to distinguish between those problems that have solutionsthose that do notand those where solutions exist but require too much time or other resources to work reasonably there will often be trade-offs that we will need to identify and decide upon as computer scientistsin addition to our ability to solve problemswe will also need to know and understand what is computer science