40 algorithms every programmer should know : hone your problem-solving skills by learning different algorithms and their implementation in Python /
Algorithms have always played an important role both in the science and practice of computing. Beyond traditional computing, ability to utilize these algorithms to solve real-world problems is an important skill and is the focus of this book. In order to optimally use these algorithms, a deeper unde...
Clasificación: | Libro Electrónico |
---|---|
Autor principal: | |
Formato: | Electrónico eBook |
Idioma: | Inglés |
Publicado: |
Birmingham :
Packt Publishing,
[2020]
|
Temas: | |
Acceso en línea: | Texto completo (Requiere registro previo con correo institucional) |
Tabla de Contenidos:
- Cover
- Title Page
- Copyright and Credits
- Dedication
- About Packt
- Contributors
- Table of Contents
- Preface
- Section 1: Fundamentals and Core Algorithms
- Chapter 1: Overview of Algorithms
- What is an algorithm?
- The phases of an algorithm
- Specifying the logic of an algorithm
- Understanding pseudocode
- A practical example of pseudocode
- Using snippets
- Creating an execution plan
- Introducing Python packages
- Python packages
- The SciPy ecosystem
- Implementing Python via the Jupyter Notebook
- Algorithm design techniques
- The data dimension
- Compute dimension
- A practical example
- Performance analysis
- Space complexity analysis
- Time complexity analysis
- Estimating the performance
- The best case
- The worst case
- The average case
- Selecting an algorithm
- Big O notation
- Constant time (O(1)) complexity
- Linear time (O(n)) complexity
- Quadratic time (O(n2)) complexity
- Logarithmic time (O(logn)) complexity
- Validating an algorithm
- Exact, approximate, and randomized algorithms
- Explainability
- Summary
- Chapter 2: Data Structures Used in Algorithms
- Exploring data structures in Python
- List
- Using lists
- Lambda functions
- The range function
- The time complexity of lists
- Tuples
- The time complexity of tuples
- Dictionary
- The time complexity of a dictionary
- Sets
- Time complexity analysis for sets
- DataFrames
- Terminologies of DataFrames
- Creating a subset of a DataFrame
- Column selection
- Row selection
- Matrix
- Matrix operations
- Exploring abstract data types
- Vector
- Stacks
- The time complexity of stacks
- Practical example
- Queues
- The basic idea behind the use of stacks and queues
- Tree
- Terminology
- Types of trees
- Practical examples
- Summary
- Chapter 3: Sorting and Searching Algorithms
- Introducing Sorting Algorithms
- Swapping Variables in Python
- Bubble Sort
- Understanding the Logic Behind Bubble Sort
- A Performance Analysis of Bubble Sort
- Insertion Sort
- Merge Sort
- Shell Sort
- A Performance Analysis of Shell Sort
- Selection Sort
- The performance of the selection sort algorithm
- Choosing a sorting algorithm
- Introduction to Searching Algorithms
- Linear Search
- The Performance of Linear Search
- Binary Search
- The Performance of Binary Search
- Interpolation Search
- The Performance of Interpolation Search
- Practical Applications
- Summary
- Chapter 4: Designing Algorithms
- Introducing the basic concepts of designing an algorithm
- Concern 1
- Will the designed algorithm produce the result we expect?
- Concern 2
- Is this the optimal way to get these results?
- Characterizing the complexity of the problem
- Concern 3
- How is the algorithm going to perform on larger datasets?
- Understanding algorithmic strategies
- Understanding the divide-and-conquer strategy
- Practical example
- divide-and-conquer applied to Apache Spark