Data structures and algorithms are the fundamentals of computer programming. Functional data structures have the power to improve the code base of an application and improve 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.
So if you've got some prior knowledge on functional languages and wish to get acquainted with data structures and algorithms with simple functional implementation, then go for this Learning Path.
Packt’s Video Learning Path is a series of individual video products put together in a logical and stepwise manner such that each video builds on the skills learned in the video before it.
Let's take a quick look at your learning journey. This Learning Path begins with an introduction to functional programming. You will learn about Lists, the work horse data type for most functional languages. You will then understand structural sharing and how it helps to make immutable data structures efficient and practical. Next, you will learn about binary trees wherein you will build complete trees, greedy algorithms, and backtracking. Moving ahead, you will seehow to use abstract data types (ADTs) such as stacks, queues, trees, and graphs and will learn to implement them in functional programming. Finally, you will learn implementation techniques such as amortization and lazy evaluation to ensure code efficiency.
By the end of this Learning Path, you will be able to write efficient functional data structures and algorithms for your applications.
About the Author:
For this course, we have combined the best works of this esteemed author:
In this video, we will print all the elements of an array and then apply higher level programming abstractions. Finally, you will learn about ABT.
In this video, we will first count even elements from the input list to show that functional programming is declarative and then show that there is no boiler plate in functional programming.
Higher order functions help us succinctly express logic. In this video, you will learn about higher order functions.
Instead of writing a loop using a mutable loop variable, functional languages advocate recursion as an alternative. In this video, we will see how recursion aids immutability.
In this video, you will first learn about copy-on-write, then to deal with excessive copying, we can resort to a feature called deferred processing.
In this video, you will learn to compose functions.
The big O notation is used to describe how fast an algorithm will run. In this video, we will describe the growth of the algorithm's running time versus the size of input data in Scala.
In this video, we will see how trading off some space by caching known results saves time and avoids needless computations.
In this video, we will show you that mathematical functions are not referentially transparent.
In this video, you will learn about the advantage of vectors over list. Also, you will learn to update elements in an array of elements.
In this video, we will look at collections and see how complexity helps us to see how they will perform in different situations. Also, we will look at commonly used collections and idioms with examples.
This video introduces you to the basics of list.
In this video, you will learn about the head and tail method.
This video shows us how to drop elements from the list.
This video deals with joining of two lists into a single list.
The main objective of this video is to teach you about persistent data structures and tail call optimization.
This video deals with appending and prepending of lists.
We cannot do random indexing on a linked list. So here in this video, we will get the value at index.
In this video, we will take a look at how to modify a list value.
This video deals with the basics of node.
This video shows us how to build a binary tree.
This video deals with comparing trees. Here we will also flip trees.
This video deals with eliminating list concatenating with the help of an accumulator argument and then trace the growth of the accumulator.
This video deals with implementation of dictionaries using binary search trees.
This video deals with various operations which can be performed using binary numbers.
This video teaches us about the algorithm that matches the longest possible part and also teaches us to find alternate possibilities in case of failure.
In this video, we are going to reverse a list.
In this video, we will be looking at directed graphs, also known as digraphs.
In this video, we will check whether a cycle has been introduced and then print the cycle.
In this video, we will look at the binary operations related to list implementation and then add two binary numbers.
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.
In this video, you will first understand about FIFO queues and then learn about functional FIFO queues.
This video deals with the concept of an invariant.
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.
A leftist tree is a data structure that we can use to implement the priority queue ADT.
This video deals with development of the functional heaps using leftist tree.
An expression is executed whenever it comes on the way of program execution. This evaluation strategy is known as eager evaluation.
In this video, you will first learn about argument evaluation and then learn about lazy evaluation in Scala and Clojure.
Memoization is the art of computer program optimization to speed up functions.
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.
In this video, we will look at some mathematical series based algorithms.
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.
The aim of this video is to highlight the difference between strict versus lazy lists.
In this video, we will play a bit with Stream, that is, Scala's lazy lists.
In this video, we will implement dequeues.
In this video, we will get familiarized with some commonly used terms and learn about the almost balanced trees.
In this video, we will look at the core black tree.
In this video, we will verify the transformation and find the complexity of the nodes.
In this video, you will learn what binomial tree is.
A heap-ordered binomial tree is one in which every parent value is less than or equal to its children.
There is a surprising equivalent in the processes of binomial heap insertion and incrementing a binary number.
In this video, you will understand the stable and unstable sorting.
Bubble sort is one of the simplest and oldest algorithms. Each element is compared with the next element.
Selection sort is another simple sorting algorithm. It is a stable sorting algorithm.
Insertion sort is simple to implement and a stable sorting algorithm. During the process of sorting, it creates a sorted subsequence.
Merge sort uses the divide and conquer philosophy
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.
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.