万本电子书0元读

万本电子书0元读

顶部广告

Learning Functional Data Structures and Algorithms电子书

售       价:¥

1人正在读 | 0人评论 9.8

作       者:Atul S. Khot

出  版  社:Packt Publishing

出版时间:2017-02-01

字       数:91.1万

所属分类: 进口书 > 外文原版书 > 电脑/网络

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
Learn functional data structures and algorithms for your applications and bring their benefits to your work now About This Book Moving from object-oriented programming to functional programmingThis book will help you get started with functional programming. Easy-to-understand explanations of practical topics will help you get started with functional data structures. Illustrative diagrams to explain the algorithms in detail. Get hands-on practice of Scala to get the most out of functional programming. Who This Book Is For This book is for those who have some experience in functional programming languages. The data structures in this book are primarily written in Scala, however implementing the algorithms in other functional languages should be straight forward. 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 In Detail 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 settingWon’t we end up copying too muchDo we trade performance for versioned data structuresThis 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. Style and approach Step-by-step topics will help you get started with functional programming. Learn by doing with hands-on code snippets that give you practical experience of the subject.
目录展开

Learning Functional Data Structures and Algorithms

Learning Functional Data Structures and Algorithms

Credits

About the Authors

About the Reviewer

www.PacktPub.com

Why subscribe?

Customer Feedback

Preface

What this book covers

What you need for this book

Who this book is for

Conventions

Reader feedback

Customer support

Downloading the example code

Downloading the color images of this book

Errata

Piracy

Questions

1. Why Functional Programming?

The imperative way

Higher level of abstraction

Functional programming is declarative

No boilerplate

Higher order functions

Eschewing null checks

Controlling state changes

Recursion aids immutability

Copy-on-write

Laziness and deferred execution

Composing functions

Summary

2. Building Blocks

The Big O notation

Space/time trade-off

A word frequency counter

Matching string subsets

Referential transparency

Vectors versus lists

Updating an element

Not enough nodes

Complexities and collections

The sliding window

Maps

Persistent stacks

Persistent FIFO queues

Sets

Sorted set

Summary

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

4. Binary Trees

Node definitions

Building the tree

Size and depth

Complete binary trees

Comparing trees

Flipping a binary tree

Binary tree traversal

The accumulator idiom

Binary Search Trees

Node insertion

Searching a key

Updating a value

Exercising it

Summary

5. More List Algorithms

Binary numbers

Addition

Multiplication

Greedy algorithms and backtracking

An example of a greedy algorithm

The backtracking jig

Summary

6. Graph Algorithms

Reversing a list

Graph algorithms

Graph traversal

Avoiding list appending

Topological sorting

Cycle detection

Printing the cycle

Summary

7. Random Access Lists

Incrementing a binary number

Adding two binary numbers

List of tree roots

Insertion

Lookup

Removal, head, and tail

Update

Summary

8. Queues

Understanding FIFO queues

Functional FIFO queues

Invariants

Implementing a priority queue

Understanding priority queues/heaps

Leftist trees

Functional heaps

Summary

9. Streams, Laziness, and Algorithms

Program evaluation

Eager evaluation

Argument evaluation

Lazy evaluation

Lazy evaluation in Scala

Lazy evaluation in Clojure

Memoization - remembering past results

Memoization in Scala

Memoization in Clojure

Memoizing simpleFactFun

Streams

Stream in Scala

Indexing the elements of a stream

Creation of an infinite length stream

Stream is immutable

Creating a stream from another

Stream to list

Appending one stream to another

Length of a stream

Some mathematical functions of the stream class

Some more methods of the stream class

Streams (lazy sequence) in Clojure

Creating a memoized function of lazy sequences in Clojure

Some algorithms on stream

Arithmetic progression

Arithmetic progression in Scala

Arithmetic progression in Clojure

Standard Brownian motion

Standard Brownian motion in Scala

Standard Brownian motion in Clojure

Fibonacci series

First form of Fibonacci series

Second form of Fibonacci series

Fibonacci series in Scala

Fibonacci series in Clojure

Summary

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

11. Red-Black Trees

Terminology

Almost balanced trees

The concept of rotation

Red-Black trees

Inserting a node

The Black-Red-Red path

Left, left - red child and grand child

Left child, right grand child

Right child, right grand child

Right, left

Verifying the transformation

Complexity

Summary

12. Binomial Heaps

Binomial trees

Left child, right sibling

A binomial heap

Linking up

Inserting a value

Binary number equivalence

Merging

Find the minimum

Deleting the minimum

Exercising the code

Complexity

Summary

13. Sorting

Stable and unstable sorting

Stable sorting

Unstable sorting

Bubble sort

Scala implementation of bubble sort

Complexity of bubble sort

Selection sort

Complexity of selection sort

Insertion sort

Complexity of insertion sort

Merge sort

Splitting the sequence

Merging two sorted subsequences

Complexity of merge sort

Quick sort

Partition

Complexity of quick sort

Summary

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部