To save content items to your account,
please confirm that you agree to abide by our usage policies.
If this is the first time you use this feature, you will be asked to authorise Cambridge Core to connect with your account.
Find out more about saving content to .
To save content items to your Kindle, first ensure no-reply@cambridge.org
is added to your Approved Personal Document E-mail List under your Personal Document Settings
on the Manage Your Content and Devices page of your Amazon account. Then enter the ‘name’ part
of your Kindle email address below.
Find out more about saving to your Kindle.
Note you can select to save to either the @free.kindle.com or @kindle.com variations.
‘@free.kindle.com’ emails are free but can only be saved to your device when it is connected to wi-fi.
‘@kindle.com’ emails can be delivered even when you are not connected to wi-fi, but note that service fees apply.
This chapter introduces to the concepts of algorithm, model of computation, and computational resources, starting from the classic ones (time and space) and then moving to I/O complexity by introducing the two-level memory model, which constitutes a simple, yet very effective, approximation of modern hierarchical memories. Examples are given in order to motivate the importance of counting I/Os for estimating the real performance of algorithms in modern computers.
This chapter describes another family of compressors that do not derive statistics about the text to be compressed; rather, they derive a dictionary of strings and substitute their occurrences in the input text via proper references to that dictionary. The choice of the dictionary is of course crucial in determining how well the file is compressed, and it is sometimes ineffective to transmit the full dictionary along with each compressed file. Starting in 1977, Abraham Lempel and Jacob Ziv introduced a family of compressors that successfully addressed these problems by designing two algorithms, named LZ77 and LZ78, that process the input text to incrementally construct a proper dictionary that is, thus, not transmitted. The Lempel–Ziv compressors are very popular because of their gzip instantiation, and constitute the base of more sophisticated compressors in use today, such as 7zip, LZMA, Brotli, and LZ4. The chapter discusses LZ77, LZ78, and an interesting variant, known as LZW, and at the end presents some theoretical considerations about the effectiveness of those compressors in terms of the empirical entropy of the compressed text.
This is one of the most studied problems in computer science, which is just touched in basic algorithm and data structure courses offered at the undergraduate level.This chapter makes a step forward by first introducing universal hashing, which solves some negative issues that basic hash functions experience, and then moves on to describe several advanced approaches to hashing, such as perfect hashing, Cuckoo hashing, minimal ordered perfect hashing, and finally Bloom filters. The theoretical analysis and algorithm description is enriched by figures and pseudocodes, plus several running examples that drive the reader to a better understanding of these important and advanced algorithmic concepts and tools.
This chapter attacks an easy-to-state problem, which is to select a subsequence of items uniformly at random from a given input sequence. This problem is the backbone of many randomized algorithms, and admits solutions that are algorithmically challenging to design and analyze. In particular, this chapter deals with the two cases where the size of the input sequence is either known or unknown to the algorithm, and also addresses the cases where the sequence length is smaller or larger than the internal memory of the computer. This will allowus to introduce another model of computation, the streaming model.
Linear Algebra is a branch of mathematics that deals with linear equation, systems of linear equations, and their representation as functions between algebraic structures called vector spaces. Linear Algebra is an essential tool in many disciplines such as engineering, statistics, and computer science and is also central within mathematics, in areas such as analysis and geometry. Much like the definition of a field, a vector space is defined through a list of axioms, motivated by concrete observations in familiar spaces, such as the standard two-dimensional plane and the three-dimensional space. We begin this chapter by taking a closer look at real n-dimensional spaces and vectors and then move on to discussing abstract vector spaces and linear maps. Our experience with sets and functions, developed in previous chapters, as well as certain proof techniques, will prove to be useful in our discussion.