Through a strong focus on intuition, examples, and real-world scenarios, you'll learn the inner workings of some very powerful data structures, and see how they can help you to both achieve great performance and solve seemingly complex problems.
Many problems in modern applications can be solved in a simple and elegant way by utilizing a specific data structure. In this course, Using Advanced Data Structures in Modern Applications, you will learn a variety of such data structures that are incredibly useful but normally outside the scope of introductory courses in programming or algorithmics. The course is loaded with examples and focuses on practicality rather than formulas and proofs. First, you will dive into the exciting world of hashing and see how different hash functions and hash table implementations perform very differently. Next, you will learn how bloom and cuckoo filters work and how they can be used to reduce communication between infrastructure components and prevent a cache from being wasted on one-off items. Then, you will discover how to efficiently index and query geographical positions and numeric properties using spatial indexing mechanisms such as geohashing, B-trees, R-trees, and M-trees. After that, you will explore the inner workings of disjoint-set data structures and see how they can be used to efficiently form clusters of related users of an application. Finally, you learn how tries and suffix trees work and how to easily build an auto-completion back-end upon them. By the end of this course, you will have a large toolbox of data structures at hand that can help you solve a number of apparently complex problems with minimal effort.
Rasmus is a software developer and architect, an entrepreneur and an idealist, with a background as PhD in the field of computer science, databases, and algorithms and with a long standing passion for teaching.
Course Overview Hi everyone. My name is Rasmus, and welcome to my course Using Advanced Data Structures in Modern Applications. Data structures can be almost like magic. They can provide elegant, simple, and high-performing solutions to apparently complex problems that sometimes arise when building applications. In this course, we're going to look at a number of extremely powerful data structures that are normally outside the scope of introductory classes in computer science, and we are going to do that from a strictly practical perspective with our focus on examples, lots of examples. No mathematical proofs, all hard-core theory. Some of the major topics that we will cover include Bloom and Cuckoo filters; various hashing algorithms and hash table structures; disjoint-set data structures; tries and suffix trees; and various spatial indexes, such as B-trees, R-trees, and M-trees. By the end of this course, you will have seen how to put the data structures we cover into work, and you will have seen how they can really make a difference. Before beginning the course, you should be familiar with basic data structures, such as hash tables and tree structures, and feel comfortable with some basic complexity analysis. All of this is covered in my other Pluralsight course, An Introduction to Algorithmics. I hope you will join me on this journey to learn a bunch of interesting and useful data structures with the Using Advanced Data Structures in Modern Applications course, at Pluralsight.
Hashing 1: Hash Functions and Hash Tables Hi. I'm Rasmus, and this is the first module about hashing where we zoom in on hashing and take a look at a couple of alternative strategies for constructing hash tables. If you do not already know what a hash function is or if you are unfamiliar with the inner workings of the classical hash table structure using chaining, I strongly recommend that you watch the introductory video about hashing in my other course, An Introduction to Algorithmics before continuing. With that said, let's dive in. Recall our case the Match Finder app that I described in the introduction and which allows users to find other users within a given area that possess a desired set of competences or interests. The app uses hashing quite intensively. Its entire caching infrastructure is built on hash tables. And also, various data mining algorithms in the app, which analyzes the data and search for interesting patterns, use both hash functions and hash tables. There's also a part of the app backend that uses hashing-based probabilistic filters in order to shield the content cache from being filled with one-off items, but we will deal with these filters in the next two modules. So this module concerns hash functions and hash tables. We shall see that different hash functions have different characteristics in terms of throughput and distribution, and there's a small concept about independency that we need to establish as a preparation for our journey to hash tables, Bloom, and Cuckoo filters. We shall also see three alternative methods for building hash tables, namely linear probing, Robin Hood hashing, and Cuckoo hashing, but first, hash functions.