Advanced Functional Data Structures and Algorithms
0.0 (0 ratings)
Instead of using a simple lifetime average, Udemy calculates a course's star rating by considering a number of different factors such as the number of ratings, the age of ratings, and the likelihood of fraudulent ratings.
0 students enrolled
Wishlisted Wishlist

Please confirm that you want to add Advanced Functional Data Structures and Algorithms to your Wishlist.

Add to Wishlist

Advanced Functional Data Structures and Algorithms

Get acquainted with complex data structures and algorithms with simple functional implementations
New
0.0 (0 ratings)
Instead of using a simple lifetime average, Udemy calculates a course's star rating by considering a number of different factors such as the number of ratings, the age of ratings, and the likelihood of fraudulent ratings.
0 students enrolled
Created by Packt Publishing
Last updated 9/2017
English
Current price: $10 Original price: $125 Discount: 92% off
5 hours left at this price!
30-Day Money-Back Guarantee
Includes:
  • 3.5 hours on-demand video
  • 1 Supplemental Resource
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
What Will I Learn?
  • Understand how to think in the functional paradigm
  • Build cost-efficient applications
  • Explore important algorithms for ordering dependencies
  • See common data structures and the associated algorithms, and the context they are commonly used in
  • See how ADTs are implemented in a functional setting
  • Explore the basic theme of immutability and persistent data structures
  • Find out how the internal algorithms are redesigned to exploit structural sharing, so that the persistent data structures perform well, avoiding needless copying
  • Understand functional features such as lazy evaluation and recursion used to implement efficient algorithms
  • Get to know Scala’s best practices and idioms
View Curriculum
Requirements
  • This course is for those who have some experience in functional programming languages.
Description

Algorithms and datastructures are fundamentals in computer programming. Functional data structures have the power to improve the codebase of an application and improve its efficiency. With the advent of functional programming and powerful functional languages such as Scala, Clojure, and Elixir becoming part of important enterprise applications, functional data structures have gained an important place in the developer toolkit.

Immutability is a cornerstone of functional programming. Immutable and persistent data structures are thread-safe by definition and therefore are very appealing to write robust concurrent programs. But how do we express traditional algorithms in a functional setting? Won’t we end up copying too much? Do we trade performance for versioned data structures? This course attempts to answer these questions by looking at functional implementations of traditional algorithms.

The course begins by showing you the functioning of lists, the workhorse data type for most functional languages. We’ll show you what structural sharing means and how it helps to make immutable data structures efficient and practical.

While writing code, we use ADTs (abstract data types) such as Stacks, Queues, Trees, and Graphs. You’ll see how these ADTs are implemented in a functional setting. We look at implementation techniques such as amortization and lazy evaluation to ensure efficiency. By the end of the course, you’ll be able to write efficient functional data structures and algorithms for your applications.

About the authors

Atul S. Khot grew up in Marathwada, a region of the state of Maharashtra, India. A self-taught programmer, he started writing software in C and C++. A Linux aficionado and a command-line guy at heart, Atul has always been a polyglot programmer. Having extensively programmed in Java and dabbled in multiple languages, these days he is getting increasingly hooked on Scala, Clojure, and Erlang. Atul is a frequent speaker at software conferences, and a past Dr. Dobb's product award judge. In his spare time, he loves to read classic British detective fiction. He is a foodie at heart and a pretty good cook. Atul someday dreams of working as a master chef, serving people with lip-smacking dishes.

He was the author of Scala Functional Programming Patterns published by Packt Publishing in December 2015. The book looks at traditional object-oriented design patterns and shows people how they can use Scala's functional features instead.

Raju Kumar Mishra is a consultant and corporate trainer for big data and programming. After completing his B. Tech from the Indian Institute of Technology (ISM) Dhanbad, he worked for Tata Steel. His deep passion for mathematics, data science, and programming took him to the Institute of Science (IISc). After graduating from IISc in computational science, he worked for Oracle as a performance engineer and software developer.

He is an Oracle-certified associate for Java 7. He is a Hortonworks-certified Apache Hadoop Java developer, and holds a Developer Certification for Apache Spark (O'Reilly School of Technology and Databriks), and Revolution R Enterprise-certified Specialist Certifications. As well as this, he has also passed the Financial Risk Manager (FRM I) exam. His interest in mathematics helped him in clearing the CT3 (Actuarial Science) exam.

Who is the target audience?
  • The data structures in this course are primarily written in Scala, however implementing the algorithms in other functional languages should be straightforward.
Compare to Other Data Structures Courses
Curriculum For This Course
32 Lectures
03:28:28
+
Graph Algorithms
4 Lectures 24:48

This video gives overview of the entire course.

Preview 04:24

In this video, we are going to reverse a list.

Reversing a List
03:29

In this video, we will be looking at directed graphs, also known as digraphs.

Exploring More About Graph Algorithms
12:38

In this video, we will check whether a cycle has been introduced and then print the cycle.

Cycle Detection
04:17
+
Random Access Lists
2 Lectures 22:04

In this video, we will look at the binary operations related to list implementation and then add two binary numbers.

Incrementing a Binary Number
05:41

The binary trees' lookup and update operations are fast. So in this video, we will look at all the roots linked up in a list.

List of Tree Roots
16:23
+
Queues
5 Lectures 24:00

In this video, you will first understand about FIFO queues and then learn about functional FIFO queues.

Preview 04:15

This video deals with the concept of an invariant.

Invariants
01:50

This video deals with the implementation of the priority queues and then we will look at the min-heap data structure first and then the functional version.

Priority Queue
07:43

A leftist tree is a data structure that we can use to implement the priority queue ADT.

Leftist Trees
02:06

This video deals with development of the functional heaps using leftist tree.

Functional Heaps
08:06
+
Streams, Laziness, and Algorithms
5 Lectures 48:31

An expression is executed whenever it comes on the way of program execution. This evaluation strategy is known as eager evaluation.

Preview 03:45

In this video, you will first learn about argument evaluation and then learn about lazy evaluation in Scala and Clojure.

Argument Evaluation
13:09

Memoization is the art of computer program optimization to speed up functions.

Memoization – Remembering Past Results
09:59

A stream is generally a lazy and linear sequence collection. Stream elements are evaluated only when needed. In this video, we will look at streams in Scala and Clojure.

Streams
12:31

In this video, we will look at some mathematical series based algorithms.

Some Algorithms on Stream
09:07
+
Being Lazy – Queues and Deques
4 Lectures 17:56

In this video, we will take a quick look at how deques are implemented imperatively. Next, we will look at the amortization algorithm technique that underlies this implementation.

Preview 04:38

The aim of this video is to highlight the difference between strict versus lazy lists.

Strict Versus Lazy
01:34

In this video, we will play a bit with Stream, that is, Scala's lazy lists.

Streams
07:08

In this video, we will implement dequeues.

Amortized Deques
04:36
+
Red-Black Trees
3 Lectures 17:46

In this video, we will get familiarized with some commonly used terms and learn about the almost balanced trees.

Concept of Red-Black Trees
03:44

In this video, we will look at the core black tree.

Working with Red-Black Trees
11:04

In this video, we will verify the transformation and find the complexity of the nodes.

Verifying the Transformation
02:58
+
Binomial Heaps
3 Lectures 14:50

In this video, you will learn what binomial tree is.

Binomial Trees
03:08

A heap-ordered binomial tree is one in which every parent value is less than or equal to its children.

A Binomial Heap
03:50

There is a surprising equivalent in the processes of binomial heap insertion and incrementing a binary number.

Binary Number Equivalence
07:52
+
Sorting
6 Lectures 38:33

In this video, you will understand the stable and unstable sorting.

Preview 02:34

Bubble sort is one of the simplest and oldest algorithms. Each element is compared with the next element.

Bubble Sort
07:39

Selection sort is another simple sorting algorithm. It is a stable sorting algorithm.

Selection Sort
05:36

Insertion sort is simple to implement and a stable sorting algorithm. During the process of sorting, it creates a sorted subsequence.

Insertion Sort
06:30

Merge sort uses the divide and conquer philosophy 

Merge Sort
08:20

Quick sort is about dividing a problem into approximately similar sub problems, solving each sub problem separately, and combining the results of the sub problems to deliver the final result. 

Quick Sort
07:54
About the Instructor
Packt Publishing
3.9 Average rating
8,229 Reviews
58,970 Students
687 Courses
Tech Knowledge in Motion

Packt has been committed to developer learning since 2004. A lot has changed in software since then - but Packt has remained responsive to these changes, continuing to look forward at the trends and tools defining the way we work and live. And how to put them to work.

With an extensive library of content - more than 4000 books and video courses -Packt's mission is to help developers stay relevant in a rapidly changing world. From new web frameworks and programming languages, to cutting edge data analytics, and DevOps, Packt takes software professionals in every field to what's important to them now.

From skills that will help you to develop and future proof your career to immediate solutions to every day tech challenges, Packt is a go-to resource to make you a better, smarter developer.

Packt Udemy courses continue this tradition, bringing you comprehensive yet concise video courses straight from the experts.