• Complain

Knight William - Practical Analysis of Algorithms

Here you can read online Knight William - Practical Analysis of Algorithms full text of the book (entire story) in english for free. Download pdf and epub, get meaning, cover and reviews about this ebook. City: Cham, year: 2014, publisher: Springer International Publishing : Imprint : Springer, genre: Children. Description of the work, (preface) as well as reviews are available. Best literature library LitArk.com created for fans of good reading and offers a wide selection of genres:

Romance novel Science fiction Adventure Detective Science History Home and family Prose Art Politics Computer Non-fiction Religion Business Children Humor

Choose a favorite category and find really read worthwhile books. Enjoy immersion in the world of imagination, feel the emotions of the characters or learn something new for yourself, make an fascinating discovery.

Knight William Practical Analysis of Algorithms
  • Book:
    Practical Analysis of Algorithms
  • Author:
  • Publisher:
    Springer International Publishing : Imprint : Springer
  • Genre:
  • Year:
    2014
  • City:
    Cham
  • Rating:
    4 / 5
  • Favourites:
    Add to favourites
  • Your mark:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Practical Analysis of Algorithms: summary, description and annotation

We offer to read an annotation, description, summary or preface (depends on what the author of the book "Practical Analysis of Algorithms" wrote himself). If you haven't found the necessary information about the book — write in the comments, we will try to find it.

Analysis of algorithms plays an essential role in the education and training of any serious programmer preparing to deal with real world applications. Practical Analysis of Algorithms introduces the essential concepts of algorithm analysis required by core undergraduate and graduate computer science courses, in addition to providing a review of the fundamental mathematical notions necessary to understand these concepts. Throughout the text, the explanations are aimed at the level of understanding of a typical upper-level student, and are accompanied by detailed examples and classroom-tested exercises. Topics and features: Includes numerous fully-worked examples and step-by-step proofs, assuming no strong mathematical background Describes the foundation of the analysis of algorithms theory in terms of the big-Oh, Omega, and Theta notations Examines recurrence relations, a very important tool used in the analysis of algorithms Discusses the concepts of basic operation, traditional loop counting, and best case and worst case complexities Reviews various algorithms of a probabilistic nature, and uses elements of probability theory to compute the average complexity of algorithms such as Quicksort Introduces a variety of classical finite graph algorithms, together with an analysis of their complexity Provides an appendix on probability theory, reviewing the major definitions and theorems used in the book This clearly-structured and easy-to-read textbook/reference applies a unique, practical approach suitable for professional short courses and tutorials, as well as for students of computer science. Dr. Dana Vrajitoru is an Associate Professor of Computer Science at Indiana University South Bend, IN, USA. Dr. William Knight is an Emeritus Associate Professor at the same institution.;Introduction -- Mathematical Preliminaries -- Fundamental Notations in Analysis of Algorithms -- Recurrence Relations -- Deterministic Analysis of Algorithms -- Algorithms and Probabilities -- Finite Graph Algorithms -- Appendix: Probability Theory.

Knight William: author's other books


Who wrote Practical Analysis of Algorithms? Find out the surname, the name of the author of the book and a list of all author's works by series.

Practical Analysis of Algorithms — read online for free the complete book (whole text) full work

Below is the text of the book, divided by pages. System saving the place of the last page read, allows you to conveniently read the book "Practical Analysis of Algorithms" online for free, without having to search again every time where you left off. Put a bookmark, and you can go to the page where you finished reading at any time.

Light

Font size:

Reset

Interval:

Bookmark:

Make
Springer International Publishing Switzerland 2014
Dana Vrajitoru and William Knight Practical Analysis of Algorithms Undergraduate Topics in Computer Science 10.1007/978-3-319-09888-3_1
1. Introduction
Dana Vrajitoru 1
(1)
Indiana University, South Bend, IN, USA
Dana Vrajitoru (Corresponding author)
Email:
William Knight
Email:
Analysis of algorithms is the science of determining the amounts of time and space required by computers to carry out various procedures. The aims of this theoretical part of computer science are twofold. First, to give programmers mathematical tools for choosing intelligently from among competing algorithms available for performing a task. Second, to provide an informed idea of how efficiently an algorithm is solving a problem and how well it will scale with the size of the problem.
Programmers who have assimilated the concepts and understood the analysis of the major types of algorithms will acquire an intuition for how efficient an algorithm is and find it easier to choose the appropriate algorithm for any given task, or even invent a new one. They will know how avoid simple programming traps that can transform a linear function into a quadratic one. Similarly, they will be able to distinguish between appropriate and inappropriate use of recursion. With the emergence of very large databases containing millions of records to be processed, it is more important than ever to be able to write efficient algorithms.
It is an unfortunate fact of life in computing that algorithms that use computer memory space quite efficiently are often among the slowest to execute, while algorithms that execute extremely rapidly often require exorbitant amounts of memory space. Thus choosing intelligently requires us to understand the well-known space-time trade-off dilemma in algorithm design. Program designers must frequently make choices that balance the need for speed of execution against the limitations of computer memory in the systems on which their programs will run.
In the early days of computing, when main memory in a computer system was pitifully small and hideously expensive, a great deal of attention was given to inventing algorithms that ran in as little main memory space as possible. Todays gigantic computer memories have rendered many of those algorithms obsolete. Nowadays, algorithm designers tend to focus on creating algorithms that run faster than previously known algorithms, ignoring space costs. After all, the amount of main memory available in a typical computer system has gone up by a factor of 10 every few years throughout the computer age.
With the increase of available memory came the increase in amount of data to process. We see a shift of interest from merely providing a correct answer in a reasonable amount of time to being able to provide an answer quickly for a large amount of data to process. The question we often have to ask now is not can we solve this problem? but rather can we solve it fast enough for this huge collection of objects? Thus, it is important to know what we can expect to happen to the execution time and amount of memory needed when the problem size increases by a large factor.
1.1 Measuring Execution Time
When several computer algorithms are available for solving problems of a particular type, you will almost always find that the more efficient algorithms will be more difficult to understand and to code than the simpler, more intuitive algorithms. To take a familiar example, a very large number of algorithms are available for sorting the objects in an array. Algorithms such as Bubble Sort, Selection Sort, and Insertion Sort are very easy to understand and to code, but the average amount of time required by these algorithms to sort an array of Picture 1 objects in random order is proportional to Picture 2 , which makes them very slow on large arrays. By contrast, fast algorithms such as Quicksort, Heap Sort, and Merge Sort are significantly more difficult to understand and to code correctly, but the average amount of time that they require to sort an array of Picture 3 objects in random order is proportional to Picture 4 . It is tempting for a human programmer to believe that if an algorithm requires complicated code then it will be hard for the computer to perform the operations correctly and efficiently, and that simple code will be easier and (therefore) quicker for the computer. Not so. A computer is not confused and slowed down by intricate, non-intuitive algorithms in the way that human beings are when they attempt to carry out such algorithms on paper. A computer executes code tirelessly and flawlessly, and with blinding speed. If you give it a correct implementation of an efficient algorithm, it will perform the algorithm without mental fatigue. The moral here is that you should never judge the efficiency of an algorithm by how difficult and confusing it is for you to carry out the algorithm on paper. The way to judge an algorithms efficiency is to subject it to a careful mathematical analysis.
So how do we judge whether an algorithm is efficient? We start by attempting to describe the amounts of time and space that the algorithm requires as functions of the size of the problem. But what is the size of the problem? In many cases this is easy to determine. For example, if we are performing an operation on a collection of Picture 5 objects, then Picture 6 can be considered the size of the problem. What about a function determining whether a number is prime? In that case the number itself can be considered to be the size of the problem, or if we want to be more precise, the number of digits in its decimal or binary representation.
The next question is how do we proceed to measure the execution time? What kind of measurement is precise and reliable enough? We could simply run the algorithm with examples of various sizes on a given platform and measure the execution time with a stopwatch. However, the results will depend significantly on the speed of the processor, on the available memory and type of CPU, on the operating system and other applications running in the background. Thus, this is not a method that we can seriously consider.
A better idea is to look at the set of operations that are necessary to complete the algorithm. To give a practical example, let us suppose that an algorithm applied to a problem of size Picture 7 , requires Picture 8 comparisons and Picture 9 assignments, and that each of them involve expressions that do not require more than a limited number of assembly instructions to be completed. We must be able to assume that such operations are not affected by the size of the problem. We can call any operation that fits this description a basic operation . On any specific platform, a comparison will require approximately a constant amount of time that we can denote by Practical Analysis of Algorithms - image 10
Next page
Light

Font size:

Reset

Interval:

Bookmark:

Make

Similar books «Practical Analysis of Algorithms»

Look at similar books to Practical Analysis of Algorithms. We have selected literature similar in name and meaning in the hope of providing readers with more options to find new, interesting, not yet read works.


Reviews about «Practical Analysis of Algorithms»

Discussion, reviews of the book Practical Analysis of Algorithms and just readers' own opinions. Leave your comments, write what you think about the work, its meaning or the main characters. Specify what exactly you liked and what you didn't like, and why you think so.