Fundamentals of Data Structures – Ellis Horowitz, Sartaj Sahni. Pages·· MB·6, Microbiology and Immunology Textbook of 2nd Edition. interview/Data Structures and Algorithm/Algorithm Books/Fundamentals of Computer Algorithm by Horowitz and Find file Copy path. Arup Saha. ELLIS HOROWITZ and SARTAJ SAHNI. Fundamentals of ceedingly large, and traditionally algorithms books have proceeded by ex- amining only a small.

Algorithm Book By Sahni Pdf

Language:English, Portuguese, Hindi
Genre:Children & Youth
Published (Last):31.01.2016
ePub File Size:21.88 MB
PDF File Size:10.73 MB
Distribution:Free* [*Sign up for free]
Uploaded by: MARC

SARTAJ SAHNI No part of this book may be reproduced or utilized in any form or The study of data structures and algorithms is fundamental to computer. Horowitz, Ellis. Computer algorithms / Ellis Horowitz, Sartaj Sahni, Sanguthevar Rajasekaran. .. Traditionally, algorithms books proceeded by examining only a. PDF | On Jan 1, , Ellis Horowitz and others published Fundamentals of Data Structure in C++. Book · January with 81, Reads Sartaj Sahni - access to the data element, -usage and important algorithms.

It is our purpose in writing this book to emphasize those trends which we see as especially valuable and long lasting. The most important of these new concepts is the need to distinguish between the specification of a data structure and its realization within an available programming language. This distinction has been mostly blurred in previous books where the primary emphasis has either been on a programming language or on representational techniques.

Our attempt here has been to separate out the specification of the data structure from its realization and to show how both of these processes can be successfully accomplished. The specification stage requires one to concentrate on describing the functioning of the data structure without concern for its implementation.

This can be done using English and mathematical notation, but here we introduce a programming notation called axioms. The resulting implementation independent specifications valuable in two ways: i to help prove that a program which uses this data structure is correct and ii to prove that a particular implementation of the data structure is correct.

To describe a data structure in a representation independent way one needs a syntax. This can be seen at the end of section 1. This book also seeks to teach the art of analyzing algorithms but not at the cost of undue mathematical sophistication.


The value of an implementation ultimately relies on its resource utilization: time and space. This implies that the student needs to be capable of analyzing these factors.

A great many analyses have appeared in the literature, yet from our perspective most students don't attempt to rigorously analyze their programs. The data structures course comes at an opportune time in their training to advance and promote these ideas. For every algorithm that is given here we supply a simple, yet rigorous worst case analysis of its behavior. The growth of data base systems has put a new requirement on data structures courses, namely to cover the organization of large files.

Also, many instructors like to treat sorting and searching because of the richness of its examples of data structures and its practical application. The choice of our later chapters reflects this growing interest. One especially important consideration is the choice of an algorithm description language.

Such a choice is often complicated by the practical matters of student background and language availability. Our decision was to use a syntax which is particularly close to ALGOL, but not to restrict ourselves to a specific language. This gives us the ability to write very readable programs but at the same time we are not tied to the idiosyncracies of a fixed language.

Wherever it seemed advisable we interspersed English descriptions so as not to obscure the main pointof an algorithm.

For those who have only FORTRAN available, the algorithms are directly translatable by the rules given in the appendix and a translator can be obtained see appendix A.

On the other hand, we have resisted the temptation to use language features which automatically provide sophisticated data structuring facilities. We have done so on several grounds. One reason is the need to commit oneself to a syntax which makes the book especially hard to read by those as yet uninitiated. Even more importantly, these automatic featules cover up the implementation detail whose mastery remains a cornerstone of the course.

The basic audience for this book is either the computer science major with at least one year of courses or a beginning graduate student with prior training in a field other than computer science. This book contains more than one semester's worth of material and several of its chapters may be skipped without harm. The following are two scenarios which may help in deciding what chapters should be covered.

He would cover chapters one through five skipping sections 2. Then, in whatever time was left chapter seven on sorting was covered. In the first quarter's data structure course, chapters one through three are lightly covered and chapters four through six are completely covered. The second quarter starts with chapter seven which provides an excellent survey of the techniques which were covered in the previous quarter.

Then the material on external sorting, symbol tables and files is sufficient for the remaining time. Note that the material in chapter 2 is largely mathematical and can be skipped without harm. The paradigm of class presentation that we have used is to begin each new topic with a problem, usually chosen from the computer science arena. Once defined, a high level design of its solution is made and each data structure is axiomatically specified.

A tentative analysis is done to determine which operations are critical. The finishedalgorithm in the book is examined followed by an argument concerning its correctness. Then an analysis is done by determining the relevant parameters and applying some straightforward rules to obtain the correct computing time formula. In summary, as instructors we have tried to emphasize the following notions to our students: i the ability to define at a sufficiently high level of abstraction the data structures and algorithms that are needed; ii the ability to devise alternative implementations of a data structure; iii the ability to synthesize a correct algorithm; and iv the abilityto analyze the computing time of the resultant program.

In addition there are two underlying currents which, though not explicitly emphasized are covered throughout. The first is the notion of writing nicely structured programs. For all of the programs contained herein we have tried our best to structure them appropriately. We hope that by reading programs with good style the students will pick up good writing habits.

XV Secondly, the student should be inhibited from taking a cookbook approach to algorithm design by assuming that each algorithm must derive from only a single technique. This is not so. A major portion of this book, Chapters 3 through 9, deal with the dif- ferent design strategies. First each strategy is described i11 general terms. Following this there are a succession of examples which reveal the intricacies and varieties of the general strategy.

The examples are somewhat loosely ordered in terms of increasing complexity.

The type of complexity may arise in several ways. Usually we begin with a problem which is very simple to understand and requires no data structures other than a one-dimensional array.

For this problem it is usually obvious that the design strategy yields a correct solu- tion. Later examples may require a proof that an algorithm based on this design technique does work.

Or, the later algorithms may require more so- phisticated data structures e. The major goal of this organization is to emphasize the arts of synthesis and analysis of algorithms. Auxiliary goals are to expose the student to good program structure and to proofs of algorithm correctness.

The algorithms in this book are presented in a pseudocode that resem- bles C and Pascal. Section 1. Most of the algorithms presented in this book are short and the language constructs used to describe them are simple enough that any one can understand.

Beautiful Boy: A Father's Journey through His Son's Addiction

Chapters 13, 14, and 15 deal with parallel computing. Another special feature of this book is that we cover the area of random- ized algorithms extensively. Many of the algorithms discussed in Chapters 13, 14, and 15 are randomized.

Some randomized algorithms are presented in the other chapters as well. An introductory one quarter course on parallel algorithms might cover Chapters 13, 14, and 15 and perhaps some minimal additional material. We view the material presented in this book as ideal for a one semester or two quarter course given to juniors, seniors, or graduate students. Practically speaking, it seems that a course on data structures is helpful, if only for the fact that the students have greater programming maturity.

The second quarter would cover Chapters 10 through Programs for most ofthe algorithms given in this book are available from the. Please send your comments to raj cise. For homework there are nurnerous exercises at the end of each chapter.

Since most of the algorithms in this book provide all the implementation details, they can be easily made use of. Translating these a. The problem then reduces to devising suita. The timing results should agree with the asymptotic analysis that was done Mesh ai8: This is a nontrivial task which can be both educational and fun. Acknowledgements We are grateful to Martin J. Campbell, and Stephen P.

Leach for their critical comments which have immensely enhanced our presentation. The word algorithm conles from the name of a Persian author.

Abu Jaffar Mohatnrned ibn Muse.

This is what makes algorithm different from words such as process, te: In addition, all algorithms must satisfy the following criteria: Zero or more quantities are externally supplied. At least one quantity is produced.

Each instruction is zlznr and unambiguous. If we trace out the instructions of an algorithm, then for all cases. Every instruction must be very basic so that it can be carried out.

It is not enough that each operation be definite as in criterion 3; it also must be feasible. The possibility of a computer carrying out these operations rlecessit-ates that certain constraints be placed on the type of operations an algorithm can include.

Computer Algorithms By Ellis Horowitz, Sartaj Sahni & Sanguthevar Rajasekaran

A related consideration is that the time for termination should be reasonably short. For example, an algorithm could be devised that decides whether any given position in the game of chess is a winning position. The algorithm works by examining all possible moves and countermoves that could be made from the starting po- sition.

The cliificulty with this algorithm is that even using the most modern computers, it may take billions of years to make the decision. We must be very concerned with analyzing the efficiency of each of our algoritiims. Adding two such numbers would violate the effectiveness property. One important exampie of computational procedures is the op- erating system of a digital computer.

This procedure is designed to control the execution of jobs, in such a way that when no jobs are available? Though computational procedures include important examples such as this one, we restrict our study to computational procedures that always terminate. Such languages are designed so that each legitimate sentence has a unique meaning. Sometimes words such as procedure, function, and subroutine are used synonymously for program.

Most readers of this book have probably already programmed and run some algorithms on a computer. This is desirable because before you Study a concept in general, it helps if you had some practical experience with it. Perhaps you had some difliculty getting started in formulating an initial solution to a problem, or perhaps you were unable to decide which of two algorithms was better.

The goal of this book is to teach you how to make these decisions. The study of algorithms includes many important and active areas of research. There are four distinct areas of study one can identify: A major goal of this book is to study vari- By mastering these design strategies, it will become easier for you to devise new and useful algorithms. Many of the chapters of this book are organized around what we believe are the major methods of algorithm design.

The reader may now wish to glance back at the table of c nILunLs to set: Wllilli Llicsc uiotliuds are called. Sonic of tlmso tccliiiiquos may already be familiar, and some have been found to be so useful that books have been written about thorn. Dynamic programming is one such technique. In this book we can only hope to give an introduction to these many approaches to algorithm formulation. All of the approaches we consider have applica- tions in a variety of areas including computer s: But some important design techniques such as linear, nonlinear.

How to militlrite olg 1'? We refer to this process as. The algorithm need not as yet be expressed as a program. It is suliicicnt to state it in any precise way. The purpose ofthe validation is to assiirc us that this algorithm will work correctly independently of the issues concerning the programming language it will eventually be written in.

Once the validity of the method has been shown, a program can be written and a second phase begins. A proof of correctness requires that the solution be stated in two forms.

One form is usually as a program which is annotated by a set of assertions about the input and output variables of the prograzn. Tlicsc assertions are tc11 expressed in the predicate calculus.

The second form is called a sgiecrijicruiirirt. A proof coirsists of showing that these two forms are equivalent in that for every given legal input. All these details may cause a proof to be very much longer than the program. As an algorithm is executed, it uses the coinputefs central pr: This is a challenging area which sometimes requires great mathematical skill.

An important result of this study is that it allows you to make quantitative judgments about the value of one algoritlurn over another. Another result is that it allows yo11 to predict whether the software will meet any efficiency constraints that exist. For each algorithm in the text, an analysis is also given. Analysis is more fully described in Section 4. How to test a program — Testing a program consists of two phases: Debugging is the process of executing programs on sample data sets to determine whether faulty results occur and, if so, to Correct them.

However, as E. If the outputs match, then there is a good chance that they are correct. A proof of correctness is much more Valuable than a thousand tests if that proof is correct , since it guarantees that the program will work correctly for all possible inputs.

A description of the measurement of timing complexity can be found in Section 1. These four categories serve to outline the questions we ask about algo- rithms throughout this book.

As we can't hope to cover all these subjects cornpletety, we content ourselves with concentrating on design and analysis, spending less time on program construction and correctness. Look up the words algorisin and algorithm in your dictionary and write down their meanings. See if you can find this country in an atlas.

Such a program does not terminate unless the system crashes. We can describe an algorithm in many ways. In this text we present most of our algorithms using a pseiidocode that resembles C and Pascal. Blocks are iiidicated with matching braces: A compound statement i. The body of a procedure also forms a block. Statements are delimited by ;. The data types of variables are not explicitly declared.

The types will be clear from the conte; x: Whether a variable is global or local to a procedure will also be evident from the context. We assume simple data types such as integer, float, char, boolean. Cornpouncl data types can be formed with records. Here is an example: On the other hand, if q is a. Assignment of values to variables is done using the assignment state- ment va, r1Ia. There are two boolean values true and false. Elements of Iriultidiniensiorial arrays are accessed using [ and For example, if A is a two dimensional array, the z', j tli element of the array is denoted A[i, 3'].

Array indiees start at zero. The following looping statenients are employed: The while loop takes the following form: When condition becomes false, the loop is exited. The value of condition is evaluated at the top of the loop. The general form of a for loop is for 'ua.

A variable of type integer or real or a numerical constant is a. The for loop can be implemented as a while loop as follows: The instruction break; can be used within any of the above looping instructions to force exit. In case of nested loops, break; results in the exit of the innermost loop that it is a part of.

A return statement within any of the above also will result in exiting the loops. A return statement results in the exit of the function itself. A conditional Statement has the following forms: We also employ the following case statement: A case statement is interpreted as follows.

If oondition 1 is true, statement 1 gets executed and the case statement is exited. If condition 2 is true, statement 2 gets executed and the case staterriellt exited, and so on.

If none of the conditions cmidition 1 ,. The else clause is optional. Input and output are done using the instructions read and write. No format is used to specify the size of input or output quantities. There is only one type of procedure: An algorithm con- sists of a heading and a body. Simple variables to procedures are passed by value. Arrays and records are passed by reference. An array name or a record name is treated as a pointer to the respective data type.

Result and 2' are local variables. Next we present two examples to illustrate the process of translating 3. Example 1.

A simple solution is given by the following Although this statement adequately describes the sorting problem, it is not an algorithm because it leaves several questions unanswered. For exam- ple, it does not tell us where and how the elements are initially stored or where we should place the result. Algorithm 1. We can solve the latter problem using the code t: Eventually a[n] is compared with the Current rninirnum, and we are done. Putting all these observations together, we get the algorithm Se!

The obvious question to ask at this point is, Does Se ectionSort work correctly? Throughout this text we use the notation o['l: Theorem 1. We observe at this point that the upper limit of the for loop in line 4 can be changed to n — 1 without damaging the correctness of the algorithm. Cl Similarly, an algorithm is said to be recursive if the same algorithm is invoked in the body. Algorithm A is said to be indire: These recursive mechanisms are extremely powerful, but even more importantly, many times they can express an otherwise complex process very clearly.

For these reasons we introduce recursion here. This is unfortunate be- cause any algorithm that can be written using assignment, the if-then—e1se statement, and the while statement can also be written using assignment, the iflthen-else statement, and recursion. Of course, this does not say that the resulting algorithm will necessarily be easier to understand. However, there are many instances when this will be the case. When is recursion an appropriate mechanism for algorithm exposition?

The following two examples show how to develop a recursive algorithm. In the first example, we consider the Towers of Hanoi problem, and in the second, we generate all possible permutations of a list of characters. According; to leg- end, at the time the world was created, there was a diamond tower labeled A with 64 golden disks.

The disks were of decreasing size and were stacked on the tower in decreasing order of size bottom to top.

Besides this tower there were two other diamond towers labeled B and C. Since the time of creation, Brahman priests have been attempting to move the disks from tower A to tower B using tower C for intermediate storage. As the disks are very heavy, they can be moved only one at a time. In addition, at no time can a disk be on top of a. According to legend, the world will come to an end when the priests have completed their task.

Assume that the number of disks is n. To get the largest disk to the bottom of tower B, we move the remaining Now we are left with the task of moving the disks from tower C to tower B. To do this, we have towers A and B available.

The fact that tower B has a disk on it can be ignored as the disk is larger than the disks being moved from tower C and so any disk can be placed or1 top of it. The recursive nature of the solution is apparent from Algorithm 1. Observe that our solution for an nrrlisk problem is formulated in terms of solutions to two n — 1 —disk problems. El Example 1. For exampie, if the set. It is easy to see that given 71 elements, there are 11!

A simple algorithm can be obtained by looking at the case of four elements a, b, c, d. The answer can be constructed by writing 1. I followed by all the permutations of 1. It implies that we can solve the problem for a set with n elements if we have an algorithm that works on n — 1 eiements. These considerations lead to Algorithm 1. Try this algoritliru out on sets of length one, two, and three to ensure that you understand how it works.

If the polynomial is: Given For instance, if H. Write an algorithm to accomplish this. Devise an algorithm that inputs three integers and outputs them in nondecreasing order. Present an algorithm that searches an unsorted array a.

The factorial function 71! Write both a recursive and an iterative algorithm to compute n! Write both a recursive and an iterative algorithm to Compute 7.

Write a recursive algorithm for computing this function. Then write a nonrectlrsive algoritlnn for computing it. The pt'ge m. Assume that the function inputs are 1, 2,. Give an algorithm to solve the following problem: Consider the function F a: Set of 71 elements, the powerset of S is the set of all possible subsets of S.

Write a recursive algorithm to compute powerset S. There are many criteria upon which we can judge an algorithm. For instance:Several such statements can be combined on a single line if they are separated by a semi-colon.

Traditionally, algorithms books proceeded by examining only a small number of problem areas in depth. A, and 73'. Such a matrix has mn elements.

Assume that n lists. A magic square is an n x n matrix of the integers 1 to n2 such that the sum of every row. The basic audience for this book is either the computer science major with at least one year of courses or a beginning graduate student with prior training in a field other than computer science.

Computer Algorithms There are many algorithms covered with diagrams and are easy to comprehend.

HERSHEL from York
I do love reading comics knottily. Look over my other articles. One of my extra-curricular activities is royal shrovetide football.