Alfred V. Aho, Bell Laboratories, Murray Hill, New. Jersey This book presents the data structures and algorithms that underpin much of today's computer. Design and Analysis of Computer Algorithms;. Addison-Wesley, Aho A.V.; Hopcroft J.E.; Ullman J.D.; Data. Structures and Algorithms. Computer Science homeworks / projects / backups. Contribute to sunnypatel/ Classwork development by creating an account on GitHub.

Author: | THEDA ROSANDER |

Language: | English, Spanish, Arabic |

Country: | Turkmenistan |

Genre: | Children & Youth |

Pages: | 714 |

Published (Last): | 02.11.2015 |

ISBN: | 470-7-67531-692-9 |

PDF File Size: | 19.50 MB |

Distribution: | Free* [*Regsitration Required] |

Uploaded by: | JOANE |

AHO, A.V., J. E. HOPCROFT, J. D. ULLMAN: Data Structures and Algorithms. Addison‐Wesley Amsterdam S. W. Issel · Search for more papers by this. Data Structures and Algorithms. 6. Recommended readings. Alfred V. Aho, Jeffrey D. Ullman, John E. Hopcroft, Data Structures and. Algorithms, Addison Wesley. The authors' treatment of data structures in "Data Structures and Algorithms" is unified by an informal notion of "abstract data types," allowing readers to compare.

The full text of this article hosted at iucr. Use the link below to share a full-text version of this article with your friends and colleagues. Learn more. Volume 26 , Issue 4. Please check your email for instructions on resetting your password. If you do not receive an email within 10 minutes, your email address may not be registered, and you may need to create a new Wiley Online Library account.

No abstract is available for this article. Citing Literature Number of times cited according to CrossRef: A Global Perspective , Volume 26 , Issue 4 Pages Related Information. Email or Customer ID.

Forgot password? Old Password. New Password. Your password has been changed. Returning user. Request Username Can't sign in? Forgot your username? Enter your email address below and we will send you your username.

By finding a partition with the smallest number of groups, we can construct a traffic light with the smallest number of phases. For example, the intersection shown in Fig.

Roads C and E are oneway, the others two way. There are 13 turns one might make at this intersection. Some pairs of turns, like AB from A to B and EC , can be carried out simultaneously, while others, like AD and EB , cause lines of traffic to cross and therefore cannot be carried out simultaneously.

The light at the intersection must permit turns in such an order that AD and EB are never permitted at the same time, while the light might permit AB and EC to be made simultaneously. We can model this problem with a mathematical structure known as a graph. A graph consists of a set of points called vertices , and lines connecting the points, called edges.

For the traffic intersection problem we can draw a graph whose vertices represent turns and whose edges connect pairs of vertices whose turns cannot be performed simultaneously. For the intersection of Fig. The graph can aid us in solving the traffic light design problem. A coloring of a graph is an assignment of a color to each vertex of the graph so that no two vertices connected by an edge have the same color. It is not hard to see that our problem is one of coloring the graph of incompatible turns using as few colors as possible.

The problem of coloring graphs has been studied for many decades, and the theory of algorithms tells us a lot about this problem. Unfortunately, coloring an arbitrary graph with as few colors as possible is one of a large class of problems called "NP-complete problems," for which all known solutions are essentially of the type "try all possibilities. With care, we can be a little speedier than this, but it is generally believed that no algorithm to solve this problem can be substantially more efficient than this most obvious approach.

We are now confronted with the possibility that finding an optimal solution for the problem at hand is computationally very expensive.

We can adopt. If the graph is small, we might attempt to find an optimal solution exhaustively, trying all possibilities. This approach, however, becomes prohibitively expensive for large graphs, no matter how efficient we try to make the program. A second approach would be to look for additional information about the problem at hand. It may turn out that the graph has some special properties, which make it unnecessary to try all possibilities in finding an optimal solution.

The third approach is to change the problem a little and look for a good but not necessarily optimal solution. We might be happy with a solution that gets close to the minimum number of colors on small graphs, and works quickly, since most intersections are not even as complex as Fig. An algorithm that quickly produces good but not necessarily optimal solutions is called a heuristic. One reasonable heuristic for graph coloring is the following "greedy" algorithm.

Initially we try to color as many vertices as possible with the first color, then as many as possible of the uncolored vertices with the second color, and so on. To color vertices with a new color, we perform the following steps.

Select some uncolored vertex and color it with the new color. Scan the list of uncolored vertices. For each uncolored vertex, determine whether it has an edge to any vertex already colored with the new color. If there is no such edge, color the present vertex with the new color.

This approach is called "greedy" because it colors a vertex whenever it can, without considering the potential drawbacks inherent in making such a move. There are situations where we could color more vertices with one color if we were less "greedy" and skipped some vertex we could legally color. For example, consider the graph of Fig. The greedy algorithm would tell us to color 1 and 2 red, assuming we considered vertices in numerical order.

As an example of the greedy approach applied to Fig. Similarly, we cannot color BD , DA , or DB blue because each of these vertices is connected by an edge to one or more vertices already colored blue. However, we can color DC blue. Now we start a second color, say by coloring BC red. Each other uncolored vertex has an edge to a red vertex, so no other vertex can be colored red.

These two may be colored with a fourth color, say yellow. The colors are summarized in Fig. The "extra" turns are determined by the greedy approach to be compatible with the turns already given that color, as well as with each other.

When the traffic light allows turns of one color, it can also allow the extra turns safely. The greedy approach does not always use the minimum possible number of colors. We can use the theory of algorithms again to evaluate the goodness of the solution produced.

In graph theory, a k-clique is a set of k vertices, every pair of which is connected by an edge. Obviously, k colors are needed to color a k -clique, since no two vertices in a clique may be given the same color. In the graph of Fig.

Therefore, no coloring with three or fewer colors exists, and the solution of Fig. In terms of our original problem, no traffic light for the intersection of Fig. Therefore, consider a traffic light controller based on Fig. At each phase the turns indicated by the row of the table corresponding to that color are permitted, and the other turns are forbidden. This pattern uses as few phases as possible.

Once we have an appropriate mathematical model for a problem, we can formulate an algorithm in terms of that model. The initial versions of the algorithm are often couched in general statements that will have to be refined subsequently into smaller, more definite instructions. For example, we described the greedy graph coloring algorithm in terms such as "select some uncolored vertex. To convert such an informal algorithm to a program, however, we must go through several stages of formalization called stepwise refinement until we arrive at a program the meaning of whose steps are formally defined by a language manual.

Let us take the greedy algorithm for graph coloring part of the way towards a Pascal program. In what follows, we assume there is a graph G , some of whose vertices may be colored. The following program greedy determines a set of vertices called newclr , all of which can be colored with a new color.

The program is called repeatedly, until all vertices are colored. At a coarse level, we might specify greedy in pseudo-language as in Fig. GRAPH; var newclr: SET ;. First refinement of greedy algorithm. We notice from Fig. First, we use boldface lower case keywords corresponding to Pascal reserved words, with the same meaning as in standard Pascal. We shall discuss abstract data types in more detail in the next two sections.

The flow-of-control constructs of Pascal, like if , for , and while , are available for pseudolanguage statements, but conditionals, as in line 3 , may be informal statements rather than Pascal conditional expressions.

Note that the assignment at line 1 uses an informal expression on the right. Also, the for -loop at line 2 iterates over a set. To be executed, the pseudo-language program of Fig.

We shall not proceed all the way to such a program in this example, but let us give one example of refinement, transforming the if -statement in line. To test whether vertex v is adjacent to some vertex in newclr , we consider each member.

Data Structures and Algorithms: Preface Preface This book presents the data structures and algorithms that underpin much of today's computer programming. The Presentation of Algorithms We have used the conventions of Pascal to describe our algorithms and data structures primarily because Pascal is so widely known.

Use of the Book Chapter 1 contains introductory remarks, including an explanation of our view of the problem-to-program process and the role of abstract data types in that process. Preface function. Preface 4, 9, 10, and 12, with parts of Exercises A number of exercises of varying degrees of difficulty are found at the end of each chapter. Design and Analysis of Algorithms Design and Analysis of Algorithms There are many steps involved in writing a computer program to solve a given problem.

Algorithms Once we have a suitable mathematical model for our problem, we can attempt to find a solution in terms of that model. Design and Analysis of Algorithms in a finite amount of effort.