Learning Functional Data Structures and Algorithms

Learn functional data structures and algorithms for your applications and bring their benefits to your work now
Preview in Mapt

Learning Functional Data Structures and Algorithms

Atul Khot, Raju Kumar Mishra

Learn functional data structures and algorithms for your applications and bring their benefits to your work now
Mapt Subscription
FREE
$29.99/m after trial
eBook
$18.00
RRP $35.99
Save 49%
Print + eBook
$44.99
RRP $44.99
What do I get with a Mapt Pro subscription?
  • Unlimited access to all Packt’s 5,000+ eBooks and Videos
  • Early Access content, Progress Tracking, and Assessments
  • 1 Free eBook or Video to download and keep every month after trial
What do I get with an eBook?
  • Download this book in EPUB, PDF, MOBI formats
  • DRM FREE - read and interact with your content when you want, where you want, and how you want
  • Access this title in the Mapt reader
What do I get with Print & eBook?
  • Get a paperback copy of the book delivered to you
  • Download this book in EPUB, PDF, MOBI formats
  • DRM FREE - read and interact with your content when you want, where you want, and how you want
  • Access this title in the Mapt reader
What do I get with a Video?
  • Download this Video course in MP4 format
  • DRM FREE - read and interact with your content when you want, where you want, and how you want
  • Access this title in the Mapt reader
$0.00
$18.00
$44.99
$29.99 p/m after trial
RRP $35.99
RRP $44.99
Subscription
eBook
Print + eBook
Start 14 Day Trial

Frequently bought together


Learning Functional Data Structures and Algorithms Book Cover
Learning Functional Data Structures and Algorithms
$ 35.99
$ 18.00
Everyday Data Structures Book Cover
Everyday Data Structures
$ 35.99
$ 18.00
Buy 2 for $35.00
Save $36.98
Add to Cart

Book Details

ISBN 139781785888731
Paperback318 pages

Book Description

Functional data structures have the power to improve the codebase of an application and improve efficiency. With the advent of functional programming and with 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 hence very appealing for writing robust concurrent programs.

How do we express traditional algorithms in functional setting? Won’t we end up copying too much? Do we trade performance for versioned data structures?

This book attempts to answer these questions by looking at functional implementations of traditional algorithms.

It begins with a refresher and consolidation of what functional programming is all about. Next, you’ll get to know about Lists, the work horse data type for most functional languages. We show what structural sharing means and how it helps to make immutable data structures efficient and practical.

Scala is the primary implementation languages for most of the examples. At times, we also present Clojure snippets to illustrate the underlying fundamental theme. While writing code, we use ADTs (abstract data types). Stacks, Queues, Trees and Graphs are all familiar ADTs. You will see how these ADTs are implemented in a functional setting. We look at implementation techniques like amortization and lazy evaluation to ensure efficiency.

By the end of the book, you will be able to write efficient functional data structures and algorithms for your applications.

Table of Contents

Chapter 1: Why Functional Programming?
The imperative way
Higher level of abstraction
Functional programming is declarative
No boilerplate
Higher order functions
Controlling state changes
Recursion aids immutability
Copy-on-write
Laziness and deferred execution
Composing functions
Summary
Chapter 2: Building Blocks
The Big O notation
Space/time trade-off
Referential transparency
Vectors versus lists
Complexities and collections
Summary
Chapter 3: Lists
First steps
List head and tail
Drop elements
Concatenating lists
Persistent data structures
Tail call optimization
List append
List prepend
Getting value at index
Modifying a list value
Summary
Chapter 4: Binary Trees
Node definitions
Building the tree
Comparing trees
The accumulator idiom
Binary Search Trees
Exercising it
Summary
Chapter 5: More List Algorithms
Binary numbers
Greedy algorithms and backtracking
Summary
Chapter 6: Graph Algorithms
Reversing a list
Graph algorithms
Cycle detection
Summary
Chapter 7: Random Access Lists
Incrementing a binary number
List of tree roots
Summary
Chapter 8: Queues
Understanding FIFO queues
Functional FIFO queues
Invariants
Implementing a priority queue
Understanding priority queues/heaps
Leftist trees
Functional heaps
Summary
Chapter 9: Streams, Laziness, and Algorithms
Program evaluation
Argument evaluation
Memoization - remembering past results
Streams
Some algorithms on stream
Summary
Chapter 10: Being Lazy - Queues and Deques
Imperative implementations
Amortization
Problem with queues
Strict versus lazy
Streams
Streams meet queues
A sense of balance
Amortized deques
Summary
Chapter 11: Red-Black Trees
Terminology
Almost balanced trees
The concept of rotation
Red-Black trees
Inserting a node
Verifying the transformation
Complexity
Summary
Chapter 12: Binomial Heaps
Binomial trees
A binomial heap
Binary number equivalence
Summary
Chapter 13: Sorting
Stable and unstable sorting
Bubble sort
Selection sort
Insertion sort
Merge sort
Quick sort
Summary

What You Will Learn

  • Learn to think in the functional paradigm
  • Understand common data structures and the associated algorithms, as well as the context in which they are commonly used
  • Take a look at the runtime and space complexities with the O notation
  • 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.
  • Get to know functional features like lazy evaluation and recursion used to implement efficient algorithms
  • Gain Scala best practices and idioms

Authors

Table of Contents

Chapter 1: Why Functional Programming?
The imperative way
Higher level of abstraction
Functional programming is declarative
No boilerplate
Higher order functions
Controlling state changes
Recursion aids immutability
Copy-on-write
Laziness and deferred execution
Composing functions
Summary
Chapter 2: Building Blocks
The Big O notation
Space/time trade-off
Referential transparency
Vectors versus lists
Complexities and collections
Summary
Chapter 3: Lists
First steps
List head and tail
Drop elements
Concatenating lists
Persistent data structures
Tail call optimization
List append
List prepend
Getting value at index
Modifying a list value
Summary
Chapter 4: Binary Trees
Node definitions
Building the tree
Comparing trees
The accumulator idiom
Binary Search Trees
Exercising it
Summary
Chapter 5: More List Algorithms
Binary numbers
Greedy algorithms and backtracking
Summary
Chapter 6: Graph Algorithms
Reversing a list
Graph algorithms
Cycle detection
Summary
Chapter 7: Random Access Lists
Incrementing a binary number
List of tree roots
Summary
Chapter 8: Queues
Understanding FIFO queues
Functional FIFO queues
Invariants
Implementing a priority queue
Understanding priority queues/heaps
Leftist trees
Functional heaps
Summary
Chapter 9: Streams, Laziness, and Algorithms
Program evaluation
Argument evaluation
Memoization - remembering past results
Streams
Some algorithms on stream
Summary
Chapter 10: Being Lazy - Queues and Deques
Imperative implementations
Amortization
Problem with queues
Strict versus lazy
Streams
Streams meet queues
A sense of balance
Amortized deques
Summary
Chapter 11: Red-Black Trees
Terminology
Almost balanced trees
The concept of rotation
Red-Black trees
Inserting a node
Verifying the transformation
Complexity
Summary
Chapter 12: Binomial Heaps
Binomial trees
A binomial heap
Binary number equivalence
Summary
Chapter 13: Sorting
Stable and unstable sorting
Bubble sort
Selection sort
Insertion sort
Merge sort
Quick sort
Summary

Book Details

ISBN 139781785888731
Paperback318 pages
Read More

Read More Reviews

Recommended for You

Everyday Data Structures Book Cover
Everyday Data Structures
$ 35.99
$ 18.00
Mastering Blockchain Book Cover
Mastering Blockchain
$ 39.99
$ 20.00
Machine Learning Algorithms Book Cover
Machine Learning Algorithms
$ 39.99
$ 20.00
Java 9 Data Structures and Algorithms Book Cover
Java 9 Data Structures and Algorithms
$ 31.99
$ 16.00
Artificial Intelligence with Python Book Cover
Artificial Intelligence with Python
$ 39.99
$ 20.00
Python Data Structures and Algorithms Book Cover
Python Data Structures and Algorithms
$ 35.99
$ 18.00