P- 2 ELEMENTARYALGORITHMICs Int lurti 7. Prºblems and instances The efficiency of algorithms Average and worst-case analyses. Fundamentals of Algorithmics - Brassard, Bratley - Ebook download as PDF File ( .pdf), Text File .txt) or read book online. Nice book. Gilles Brassard and Paul Bartley, Fundamental of Algorithmics. Pages · Horowitz and Sahani, Fundamentals of Computer Algorithms, 2ND Edition.

Fundamentals Of Algorithmics Pdf

Language:English, French, German
Published (Last):24.02.2016
ePub File Size:24.40 MB
PDF File Size:11.49 MB
Distribution:Free* [*Register to download]
Uploaded by: CORRIE

FUNDAMENTALS. OF ALGORITHMICS. Gilles Brassard and Paul Bratley. Departement d'informatique et de recherche operationeile. Universite de Montreal. Fundamentals of algorithmics pdf. Fundamentals of Algorithmics Gilles Brassard, Paul Bratley Publisher: Pearson Release Date: ISBN. You can't. Free PDFs do not exist. Seriously though you may want to check a university library. Solution manuals are there to help get you on the right track.

The use of Pascal or a similarly structured language will help reduce this effort to the minimum necessary. In particular. Ordinary heaps Section 5. This is the approach of this text: It works!

Chapter 12 introduces computational complexity. Chapter 11 gives an introduction to the increasingly important topic of parallel algorithms. The first five sections of Chapter 4. Section 4. JW -completeness. The first five sections cover notions such as arrays.

The last four chapters are more advanced and it is not possible to cover them in detail in a first undergraduate algorithmics class.

Chapter 5 ends the preliminary material. Sections We avoid "one-sided equalities" by using a more logical set notation. Preface xvii understood the fundamentals of creating and analysing algorithms.

Sections 9. Most of Chapter 2 can be assigned as independent reading as well. It is not necessary to go over each and every example given there of how the techniques can be applied. Each one with the exception of Chapter 12 presents a basic technique for the design of efficient algorithms. Chapter 3. The teacher may find it interesting to discuss these topics briefly in an undergraduate class.

Chapter 9 describes basic techniques for searching graphs. Chapter 10 deals with probabilistic algorithms. The other chapters are to a great extent independent of one another. In making a choice of subjects. Many students find Section 7. An elementary course should certainly cover Chapters 6 greedy algorithms. The remainder of Chapter 5 describes more sophisticated data structures such as associative tables hashing. Although we give the origin of a number of algorithms and ideas.

We benefited greatly from feedback from some of the professors who taught from our former text in well over universities in the United States alone. The review of simple data structures in Chapter 5 is more extensive than before. Our thanks go first to the students who have followed our courses in algorithmics over more than 15 years at the Universit6 de Montreal.

Chapter 10 on probabilistic algorithms. Each chapter on design techniques was revised to present easier. The references from each chapter are combined at the end of the book in an extensive bibliography including well over items. Most importantly. Chapter 13 is new: You should therefore not be surprised if information of this kind is sometimes missing.

Writing this book would have been impossible without the help of many people. In addition. The experience we gained from writing our previous text. Readers familiar with our graduate-level text Algorithmics: Theory and Practice will notice similarities between both books.

Equally important were the comments provided on a regular basis by reviewers sponsored by Prentice-Hall: Our goal is to suggest supplementary reading that can help you deepen your understanding of the ideas we introduce. Our main source of encouragement and of constructive suggestions was friends and colleagues such as Manuel Blum.

Chapter 4 provides more background material on the analysis of algorithms. Chapter 13 tells you what you can do and what you should not even dream about when you are faced with an intractable problem that you must nevertheless solve.

Each chapter ends with suggestions for further reading. Chapter 12 on computational complexity has new sections on adversary arguments and on complexity classes more exotic than P and NP. The final typesetting was taken care of by Paul Mailhot. Steacie Memorial Fellowship. Olivier Lecarme. Parts of this book were written while Paul Bratley was on sabbatical at the Universities of Strasbourg. Preface Axi included Michael Atkinson.

Robert Gerin-Lajoie. We particularly wish to thank Jean-Francois Dufourd. We are also grateful to those who made it possible for us to work intensively on our book during long periods spent away from Montreal. Our colleagues Pierre L'Ucuyer. Last but not least.

It was Tom McElwee. Paul Bratley is just grateful that his cats are elegant. Once launched. Doug Tygar and Steve Hoover. Christian L6ger and Pierre McKenzie helped us straighten up some of the chapters. Clifford Shaffer. Jacques Stern and Jennifer Seberry for their kindness and hospitality. Earlier parts of this book were written while Gilles Brassard was enjoying the freedom offered by his E.

Isabelle and Pat. We thank the team at Prentice-Hall for their support and enthusiasm. The head of the laboratories at the Universit6 de Montreal's Departement d'informatique et de recherche operationnelle.

Fribourg and Nice. Jurg Kohlas. The material on adversary arguments in Chapter 12 was inspired by course notes written by Faith Fich. Gilles Brassard. Continuity was assured by Phyllis Morgan.

Richard Newman-Wolfe. Gilles Brassard is also grateful for the patience of his wonderful daughters Alice and L6onore who were not even born on the previous occasion. He also thanks Lise DuPlessis who made her country house available.

Fairy Meadow Paul Bratley. It was overseen by several computer science editors. After a brief review of some standard mathematical notation. We illustrate this informal discussion by showing several ways to do a straightforward multiplication. Our presentation is succinct and informal. This introductory chapter begins by defining what we mean by these two words.

Special attention should be paid to Section 1. Next we list some results concerning limits. Next we explain the notation we shall use throughout the book for describing algorithms.

The rest of the chapter consists essentially of reminders of things we expect the reader to have seen already elsewhere. Chapter 1 Preliminaries 1. An algorithm. Those whose basic maths and computer science are rusty should at least read through the main results we present to refresh their memories. A reader familiar with these topics should read Sections 1.

Even such an everyday task has hidden depths! We also take the opportunity to explain why we think that the study of algorithms is both useful and interesting. Most of the results we give are needed later in the book. In this book we are mainly concerned with algorithms for 1. In this case. If we can prove that the answer computed by this set of rules is not too badly in error. One apparent exception to this rule is that we shall accept as algorithms some procedures that make random choices about what to do in a given situation.

However in some circumstances such approximate algorithms can be useful. However it would be acceptable to say "choose a number between 1 and 6 in such a way that each value has the same probability of being chosen". An instruction such as "choose a number between 1 and 6". The most famous algorithm in history dates from well before the time of the ancient Greeks: A set of rules that calculate that 23 times 51 is is not generally useful in practice.

Sometimes even this is not possible. If we want to calculate the square root of 2. Notice one crucial difference between approximate algorithms and heuristics: When we use an algorithm to calculate the answer to a particular problem. The methods we learn at school for adding. The important point here is that "random" does not mean arbitrary.

When this happens. Many an English choirboy. More importantly. Chapter 10 in particular deals with these probabilistic algorithms. For such problems. The execution of an algorithm must not normally involve any subjective decisions. This kind of procedure. Hence a cooking recipe can be considered to be an algorithm if it describes precisely how to make a certain dish.

In this case it is important to decide which one to use. Algorithmics can now be defined simply as the study of algorithms. Section 1. Thus to multiply by you would produce an arrangement like that of Figure 1. Depending on our priorities and on the limits of the equipment available to us. Take elementary arithmetic as an example. It may be that none of the available algorithms is entirely suitable so that we have to design a new algorithm of our own. Multiplication a American b English These two algorithms for multiplication are very similar: Chapter A third.

When we set out to solve a problem. Make two columns. Algorithmics is the science that lets us evaluate the effect of these various external factors on the available algorithms so that we can choose the one that best suits our particular circumstances. If you were raised in North America. Write the multiplicand and the multiplier side by side.

Suppose you have to multiply two positive integers using only pencil and paper. The answer can depend on many factors. Multiplication i la russe any fractions. The figure illustrates how to multiply by For this algorithm..

Still another algorithm for multiplying two positive integers is illustrated in Figures 1. Multiplying by by divide-and-conquer Now to multiply by we first multiply the left half of the multiplicand 09 by the left half of the multiplier This algorithm. All we need to know is how to add up. Although it is not the algorithm usually taught in school.

It has the advantage that there is no need to memorize any multiplication tables. Again we illustrate the method by multiplying by This is easily fixed by adding zeros on the left if necessary: Next cross out each row where the number in the left-hand column is even.

Multiply i ii iii iv 09 09 81 81 12 34 12 34 Shift 4 2 2 0 Result Of course we have to do the four multiplications of two-figure numbers first.

Multiplying 09 by 12 by divide-and-conquer If you have followed the working of the algorithm so far. Still faster methods are known for very large operands. This unusual algorithm is an example of the technique called "divide-andconquer". If you think it unlikely that it could outperform the classic algorithm. However we shall see in Chapter 7 that it is possible to reduce the multiplication of two large numbers to three.

Finally we add these intermediate results to obtain the answer For instance. Finally we add up the four intermediate results as shown in Figure 1. If you are stimulated by challenges. Next we multiply the left half of the multiplicand 09 by the right half of the multiplier Thirdly we multiply the right half of the multiplicand 81 by the left half of the multiplier It is not absolutely necessary for the length.

The trick is to observe that each of these multiplications of two-figure numbers can be carried out in exactly the same way. Using these ideas the whole of our calculation can be carried out in such a way that the multiplications involve only one-figure operands. Although we described Figure 1. With this improvement. Figure 1. We use phrases in English in our programs whenever this makes for simplicity and clarity. It is by making a more formal study of the properties of the algorithms-by using algorithmics.

To avoid confusion. If we try to explain them in English. A few aspects of our notation for programs deserve special attention. Problem 1. The point of all these examples is that. The aim of our book is to teach you how to make such choices. We assume that the reader is familiar with at least one well-structured programming language such as Pascal.

As a consequence. One may appeal by its familiarity. As we shall see. To simplify our programs further. The statement return marks the dynamic end of a procedure or a function. In the same spirit of simplification.

In cases where it matters-as in recursive functions and procedures-all variables used are implicitly understood to be local variables. The negationof p. A and parentheses in the obvious way. Which do you prefer? If the truth of p is equivalent to that of q. This generalizes to arbitrary truth-valued expressions.

In contrast. In particular the disjunction of p and q is true when both p and q are true. If p is a Boolean variable. The last two are denoted exactly as in Pascal. We can build up Booleanformulas from Boolean variables. Our review is succinct. Compare this program to the informal English description of the same algorithm in Section 1.

Brassard & Bratley, ―Fundamentals of Algorithmics

Their conjunction p A q. Here denotes integer division: Let p and q be two Boolean variables. Their disjunction p v q. Scalar parameters are passed by value.. A Boolean or propositional variable may only take one of these two values. If the truth of p implies that of q. To wrap up this section. We shall sometimes refer to the natural numbers as the nonnegative integers.

We denote the set of real numbers by lR.. A set is finite if it contains a finite number of elements. The sets X and Y are equal. We write x f X when x does not belong to X. We denote by x. We denote X x X by X2 and similarly for Xi. We sometimes emphasize that 0 is not included in lR by referring explicitly to the set of strictly positive real numbers. When no ambiguity can arise.

If X and Y are two sets. The vertical bar " I " is read "such that" and it is used to define a set by describing the property that its members share. X c Y means that each element of X also belongs to Y. If X is an infinite set.. The simplest way to denote a set is to surround the enumeration of its elements with braces.

If X is a finite set. This is equivalent to saying X c Y and Y c X. For all practical purposes. Be aware that some authors use " c " to mean what we denote by "c".. Note in particular that z c X u Y when z belongs to both X and Y..

If X and Y are two sets.. The Cartesian product of X and Y is the set of ordered pairs whose first component is an element of X and whose second component is an element of Y. Y is infective or one-to-one if there do not exist two distinct xl. Consider any relation f between X and Y.

In general. It is bijective if it is both invective and subjective. A function f: The open interval a. Note that I[i. The set X is called the domain of the function. The integer interval [i. In other words. If f is bijective. There are also semi-open intervals a. Y is its image. Any subset p of their Cartesian product X x Y is a relation.

Given x E X. An integer interval is a set of integers lying between two bounds. Given any set X. The closed interval [a. This is denoted f: The relation is called function if. There is a natural equivalence between predicates on X and subsets of X: When P is a predicate on X.

If X is the empty set. Another useful quantifier.

Note that B is stronger than 3 but weaker than V. An alternation of quantifiers may be used in a single expression. Consider the following three concrete examples.

When using alternation of quantifiers. V x E X [P x ] is always vacuously true-try to find a counterexample if you disagree!

Gilles Brassard and Paul Bartley, Fundamental of Algorithmics

Bn e N [n is prime]. The appropriate quantifier in this case is 3.

There is also a natural interpretation of Boolean formulas in terms of predicates. Provided the set X is infinite. To illustrate this. In the latter case. N as a special case. If P is a property of the integers. This includes f: A property P of the natural numbers holds infinitely often if. It is sometimes useful to consider conditional sums. The duality principle for quantifiers says that "it is not the case that property P holds for all x E X if and only if there exists at least one x E X for which property P does not hold".

When we are interested in properties of the natural numbers. If there are no such integers. Lx] denotes the largest integer that is not larger than x. If x is a real number. For example. In algorithmics. Although we assume that the reader is familiar with logarithms.

Note that although b and x must be positive. Some authors take the base to be 10 when it is not specified and denote the natural logarithm by "In". We may also use a mixed notation.

This notation is generalized in the same way as the sum notation. When the base b is not specified. Lx] is the in-. This sum may not be well-defined if it involves an infinite number of integers.

For instance.. When x is positive. In the case n. Lx] is smaller than this by 1. S could be "there are infinitely many prime numbers". Our first example is the one already mentioned. What can you conclude if. To give an indirect proof of S.

We denote the quotient by the symbol ". We illustrate this principle with two examples. Contradiction 13 teger you obtain by discarding the fractional part of x if there is one.

Proof by contradiction. A useful approximation to the factorial function is given by Stirling'sformula: If m is a positive integer. Contradiction We have seen that there may be a choice of algorithms available when we set out to solve a problem. To decide which is best suited to our specific application. When x is negative and not itself an integer.

This section and the next review two proof techniques that are often useful in algorithmics: It is natural to define 0! This may involve demonstrating these properties by way of a mathematical proof. Now n! Did you notice that the previous sentence is itself a proof by contradiction.

Since P is finite and nonempty. The inescapable conclusion is that the original assumption was equally impossible. This shows that d is also a divisor of x since x is the product of a collection of integers including d. Assume for a contradiction that P is a finite set. Chapter 1 Proof Let P denote the set of all prime numbers. The set P is not empty since it contains at least the integer 2. But who needs Euclid when writing an algorithm for this task?

What about the following. Such an integer certainly exists since y is larger than 1 and we do not require that d be different from y. U For the constructively-minded reader which every algorithmicist should be at heart! First note that d itself is prime. The trouble is that DumpEuclid would loop forever if P happened to contain the largest. Let x denote that product.

We have reached the conclusion that d exactly divides both x and y. This is clearly impossible: The answer is yes. But the original assumption was that the set P of all primes is finite. Consider the smallest integer d that is larger than 1 and that is a divisor of y. By our assumption. Although some mathematicians do not accept nonconstructive proofs. We have arrived at the conclusion that 2 is irrational. There exist two irrational numbers x and y such that xy is Proof Assumefor a contradictionthat xy is necessarily irrational whenever both x and y are irrational.

Let z stand for 2 2. The best you can do is to extract two pairs and claim with confidence that one of them does the trick-but you will not know which.

DumpEuclid does work. It is in fact true that z is irrational. Theorem 1. U Now. There is no direct way to extract the required pair x. Such a proof is called nonconstructive and is not unusual among indirect proofs. At first. Contradiction 15 prime. But beware! The "proof" that z is irrational depends on the false assumption that we started with.

We must therefore conclude that our assumption was false: It is well known that 2 is irrational this was known in the days of Pythagoras. In sum. It is only the proof that is not valid. In any case. We must always be careful not to use later an intermediate result "proved" in the middle of a proof by contradiction. We illustrate this with an elegant example. We have just seen that it is sometimes possible to turn a mathematical proof into an algorithm.

Now let w stand for z 2. The question is whether there is a positive integer n such that p n is a perfect square. Pell's equation provides an even more extreme case of compelling but incorrect inductive reasoning.

According to the Concise Oxford Dictionary. Note that is a figure number. If you compute p 0. Is it possible for the sum of three fourth powers to be a fourth power?

There are two contrasting fundamental approaches in science: It has since been shown by Frye. If you try various values for n. It is straightforward to verify that all these integers are prime numbers. As long as there are cases that have not been considered. We shall see that even though induction can yield false conclusions. A more striking example of misleading induction is given by a conjecture of Euler's.

Before the technique is discussed. After failing to come up with even a single example of this behaviour. We cannot in general trust the outcome of inductive reasoning. But a moment's thought shows that this rule is absurd. This conjecture is related to Fermat's Last Theorem. Not only does it allow us to prove interesting statements about the correctness and efficiency of algorithms.

As a more mathematical example. Euler conjectured that this equation can never be satisfied. For a beautiful geometric example of induction gone wrong.

Supplemental Nutrition Assistance Program: Examining the Evidence to Define Benefit Adequacy

More than two centuries elapsed before Elkies in discovered the first counterexample. Provided that the rule invoked is correct and that it applies to the situation under discussion. This is not to say that we cannot infer something false using deductive reasoning. But in fact a perfect square can be obtained with this polynomial: You may well wonder at this point why anyone would use error-prone induction rather than fool-proof deduction. Once correctness has been established.

If you try this algorithm on several pairs of positive integers. From a false premise. By induction. If you are a physicist whose goal is to determine the fundamental laws that govern the Universe. As a computer science example. There are two basic reasons for using induction in the process of scientific discovery.

But surely. In conclusion. After all. Mathematical induction 17 that the answer is negative. Even if you are a theoretical physicist-such as Einstein-you still need actual experiments carried out by others. If I am even more perceptive. Inductive reasonings are to be banned from mathematics. Neither technique can take the place of the other.

It turns out in this case that inductive reasoning yields a correct law. I may realize that this sum of cubes is precisely the square of the sum of the first n positive integers. Deduction alone is sufficient for "dead" or frozen mathematics.

This terminology is confusing. To sum up. As P6lya once said. I may begin to suspect that the sum of the cubes of the first n positive integers is always a perfect square. It is not unusual that a mathematician will discover a mathematical truth by considering several special cases and inferring from them by induction a general rule that seems plausible.

The difference between mathematics and the inherently experimental sciences is that once a general mathematical law has been discovered by induction. In reality. But induction is required to keep mathematics alive. For the sake of argument. Mathematical induction 19 By induction. A more powerful version of the principle is given in Section 1. Is it even true? From the general rule that it must succeed on n whenever it succeeds on n. There are two ways of understanding why this conclusion follows: What have we achieved?

We have proved that the algorithm must succeed on n whenever it succeeds on n We know already that the algorithm succeeds on 4. Applying this rule again shows that the algorithm succeeds on 6 as well. Therefore such an n cannot exist. The principleof mathematical induction. We now spell out a simple version of the principle of mathematical induction. Let n stand for the smallest such integer.

By definition of the algorithm. This reasoning continues as many times as necessary to arrive at the conclusion that the algorithm succeeds on m. Consider any positive integer m on which you wish to prove that the algorithm succeeds. Since we also know that the algorithm succeeds on 0.

The axiom allows us to use this smallest number as a foundation from which to prove theorems. Since it succeeds on 6.

It is clear that we could carry out this reasoning explicitly-with no need for "and so on"-for any fixed positive value of m. Consider any property P of the integers. But this implies by our general rule that the algorithm also succeeds on n.

Consider also an integer a. P n must hold whenever P n -1 holds. One arbitrary square of the board is distinguished as special. This example is also instructive as it makes explicit the proper way to write a proof by mathematical induction.

You are given a board divided into equal squares. I l- - - - - - - a Board with special square b One tile c Placing the first tile d Solution Figure 1.

As a second example. The discussion that follows stresses the important points common to all such proofs. There are m squares in each row and m squares in each column. Using this principle.

Our first example of mathematical induction showed how it can be used to prove rigorously the correctness of an algorithm. Your puzzle is to cover the board. Consider the following tiling problem. The tiling problem You are also given a supply of tiles. P a holds and 2. The original special square now belongs to exactly one of the sub-boards.

This basis step is usually easy. We are left with four 2"-1 x 2n 1 sub-boards. Mathematical induction 21 with these tiles so that each square is covered exactly once. Place one tile in the middle of the original board so as to cover exactly one square of each of the other three subboards. Divide the board into 4 equal sub-boards by halving it horizontally and vertically.

Assume the induction hypothesis that the theorem is true for 2" 1 x 2"-1 boards. The final solution is obtained by combining the filings of the sub-boards together with the tile placed in the middle of the original board. Consider again an abstract property P of the integers. Consider an m x m board. The reader should have no difficulty in transforming this proof of a mathematical theorem into an algorithm for performing the actual tiling perhaps not a computer algorithm.

This tiling algorithm follows the general template known as divide-and-conquer. Such a board is tiled by doing nothing!

If you do not like this argument. This situation is not unusual when a theorem is proved constructively by mathematical induction. Let us now look in detail at all the aspects of a well-formed proof by mathematical induction. Call each of the three squares thus covered "special" for the corresponding sub-board. By our induction hypothesis. You must begin your proof with the basis step. Such a covering is called a tiling. In such cases.

An alternative approach is given in Section 1. Our tiling puzzle. Thus we find proofs on the number of nodes in a graph. It could even be said that our tiling problem is not really concerned with integers. It should continue with an explicit statement of the induction hypothesis. By trial and error. At that point. Concerning the induction hypothesis.

By the principle of mathematical induction. For positive integer n. If in fact P n -1 does not hold. It may happen that the property to be proved is not concerned with the set of all integers not smaller than a given basis.

When this transformation is necessary. In our tiling example. Assume the induction hypothesis that any set of n -1 horses contains only horses of a single colour but of course the horses in one set could a priori be a different colour from the horses in another. But is it really possible for colour ci to be different from. Consider any number n of horses in -f. We shall prove that any set of horses contains only horses of a single colour.

We saw that it is easy to conjecture by induction not mathematical induction that the sum of the cubes of the first n integers is always a perfect square. The difficulty is that an induction hypothesis like "the sum of the cubes of the first n -1 integers is a square" is not much help in proving that this is also the case for the first n integers because it does not say which square: We illustrate this with an example that we have already encountered.

Let H be an arbitrary set of horses. Proving this by mathematical induction is not easy. Let us prove by mathematical induction on the number n of horses in H4 that they are all the same colour. Consider the following absurd "theorem". Call these horses Hfi: Mathematical induction 23 There is one aspect of proofs by mathematical induction that most beginners find puzzling. Let H1.

This completes the induction step and the proof by mathematical induction. We can go from 2 to 3. This small missing link in the proof is enough to invalidate it completely. Such is not always the case: The correct proof of our theorem is given below as Theorem 1. The situation is illustrated by the following example. Surely not.

Note that we proved extended bases for the correctness of the sq algorithm and for the tiling problem.

Fundamentals of Algorithmics - Brassard, Bratley

X Before you continue. Since the basis cases contain only 0 and 1. This is known as generalized mathematical induction. We shall encounter examples of this behaviour later in this book. The fundamental theorem of arithmetic tells us that this decomposition is unique. Since all the horses in Hf belong to either HI or f2 or both. There are cases. Books, story book, and various other amusing books come to be so prominent this day. Besides, the clinical books will certainly additionally be the ideal factor to pick, specifically for the students, teachers, doctors, business person, and other occupations who are warm of reading.

As known, book Fundamentals Of Algorithmics, By Gilles Brassard, Paul Bratley is popular as the home window to open the world, the life, and also new thing. This is just what the people now need so much. Also there are many people that don't like reading; it can be an option as reference. When you actually require the ways to produce the next inspirations, book Fundamentals Of Algorithmics, By Gilles Brassard, Paul Bratley will really assist you to the method.

It is various with the online book Fundamentals Of Algorithmics, By Gilles Brassard, Paul Bratley where you can get a book and after that the vendor will send out the published book for you. Even you enjoy reading this Fundamentals Of Algorithmics, By Gilles Brassard, Paul Bratley everywhere you have time, you could appreciate it to check out Fundamentals Of Algorithmics, By Gilles Brassard, Paul Bratley It is certainly helpful for you which want to get the a lot more precious time for reading.

Never ever allow the extra point goes away from you. This is an introductory-level algorithm book.Reidel Publishing Company. Accessed 3 August We thank the team at Prentice-Hall for their support and enthusiasm. Taming time: Media of financialization trans: Reid, C.

Since it succeeds on 6. This is just what the people now need so much.

ABRAHAM from Chandler
Review my other articles. I have always been a very creative person and find it relaxing to indulge in stand-up comedy. I enjoy exploring ePub and PDF books upwardly.