We may earn an affiliate commission when you visit our partners.
Holczer Balazs

This course is for those who are interested in computer science and want to implement the algorithms and given data structures in Python. In every chapter you will learn about the theory of a given data structure or algorithm and then you will implement them from scratch.

Chapter 1: Binary Indexed Trees (Fenwick Trees)

  • theory behind the binary indexed tree or Fenwick tree data structure

  • how to use this data structure in computer vision and artificial intelligence

  • implementation in Python

Chapter 2: LRU Caches

Read more

This course is for those who are interested in computer science and want to implement the algorithms and given data structures in Python. In every chapter you will learn about the theory of a given data structure or algorithm and then you will implement them from scratch.

Chapter 1: Binary Indexed Trees (Fenwick Trees)

  • theory behind the binary indexed tree or Fenwick tree data structure

  • how to use this data structure in computer vision and artificial intelligence

  • implementation in Python

Chapter 2: LRU Caches

  • what are caches and why are they so important

  • how to use doubly linked lists to implement caches

  • theory behind LRU caches

  • implementation in Python

Chapter 3: Splay Trees

  • what are splay trees

  • how to achieve caches with splay trees

Chapter 4: B-Trees

  • external memory and internal memory (RAM)

  • data structures for the external memory

  • trees with multiple children and multiple keys

  • what are B-tree data structures?

Chapter 5: Prefix Trees (Tries)

  • what are tries or prefix trees

  • real world applications of tries

  • autocomplete feature of tries

  • sorting with tries

  • IP routing

Chapter 6: Ternary Search Trees

  • what are ternary search trees

  • boggle game with tries

Chapter 7: Substring Search Algorithms

  • what are substring search algorithms and why are they important in real world softwares

  • brute-force substring search algorithm

  • hashing and Rabin-Karp method

  • Knuth-Morris-Pratt substring search algorithm

  • Z substring search algorithm (Z algorithm)

  • implementations in Python

Chapter 8: Topological Ordering

  • what is topological ordering (topological sort)?

  • topological ordering implementation with depth-first search

Chapter 9: Cycle Detection

  • how to detect cycles in graphs?

Chapter 10: Strongly Connected Components (Tarjan's Algorithm)

  • what are strongly connected components?

  • Tarjan's algorithm with depth-first search

Chapter 11: Hamiltonian cycles (Travelling Salesman Problem)

  • Hamiltonian cycles in graphs

  • what is the travelling salesman problem?

  • how to use backtracking to solve the problem

  • meta-heuristic approaches to boost algorithms

Chapter 12: Eulerian Cycles (Chinese Postman Problem)

  • Eulerian cycles in graphs

  • what is the chinese postman problem?

Thanks for joining my course, let's get started.

Enroll now

Here's a deal for you

We found an offer that may be relevant to this course.
Save money when you learn. All coupon codes, vouchers, and discounts are applied automatically unless otherwise noted.

What's inside

Learning objectives

  • Have a good grasp of algorithmic thinking
  • Be able to develop your own algorithms
  • Be able to detect and correct inefficient code snippets
  • Understand fenwick trees
  • Understand caches (lru caches and splay trees)
  • Understand tries and ternary search trees
  • Understand substring search algorithms (rabin-karp method, kmp algorithm and z algorithm)
  • Understand the hamiltonian cycle problem (and travelling salesman problem)
  • Understand eulerian cycle problem

Syllabus

Introduction
Fenwick Trees (Binary Indexed Trees)
What are Fenwick trees?
Fenwick trees theory - tree structure
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Covers advanced data structures like Fenwick trees, splay trees, and B-trees, which are essential for efficient data management and retrieval in various applications
Explores graph algorithms such as topological ordering, cycle detection, and strongly connected components, which are fundamental in network analysis and dependency resolution
Includes practical implementations of algorithms and data structures in Python, allowing learners to apply theoretical knowledge to real-world coding scenarios
Examines substring search algorithms like Rabin-Karp, Knuth-Morris-Pratt, and the Z algorithm, which are crucial for text processing and pattern matching tasks
Discusses the Hamiltonian cycle problem and the traveling salesman problem, introducing backtracking and meta-heuristic approaches for optimization, which are relevant to logistics and route planning
Focuses on implementing data structures and algorithms from scratch, which may require a solid foundation in Python programming and basic data structures

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Advanced algorithms and data structures in python

According to learners, this course offers a strong blend of theory and practical implementation, making it highly suitable for those looking to deepen their understanding of advanced algorithms and data structures in Python. Students particularly value the opportunity to code algorithms from scratch, covering a comprehensive range of topics like Tries, Fenwick Trees, and graph algorithms. Many found the explanations of complex concepts clear and the content directly relevant for technical interviews. However, some reviews indicate that the course assumes a solid background in Python and basic data structures, suggesting it might be challenging for beginners. Overall, it's seen as a valuable resource for advancing algorithmic skills.
Content is highly applicable to coding interviews.
"This course is excellent preparation for technical interviews, covering frequently asked topics."
"Helped me structure my approach to solving algorithmic problems often seen in interviews."
"Directly applicable skills for cracking coding interview questions."
Theoretical concepts are well explained.
"The theoretical explanations provided a solid foundation before diving into the code."
"Instructor does a good job breaking down complex algorithmic ideas clearly."
"Appreciated the diagrams and illustrations used to visualize the concepts."
Explores a wide array of advanced topics.
"The course covers a great range of advanced data structures and algorithms that are essential."
"Was introduced to topics like Fenwick Trees and Splay Trees which I hadn't encountered before."
"Good depth on algorithms like KMP, Z algorithm, and Tarjan's for graph analysis."
Focuses on coding algorithms in Python.
"I really appreciated the emphasis on actually coding the algorithms myself in Python."
"The hands-on implementation exercises were the most valuable part of the course."
"Building the data structures from scratch helped solidify my understanding significantly."
Requires prior knowledge in Python/basics.
"Definitely need a strong understanding of Python and fundamental data structures before tackling this."
"The pace can be fast if you're not already comfortable with the basics."
"Assumes a level of comfort with recursion and object-oriented programming in Python."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Advanced Algorithms and Data Structures in Python with these activities:
Review Python Fundamentals
Strengthen your understanding of Python fundamentals to better grasp the implementation details of advanced algorithms and data structures.
Browse courses on Python Basics
Show steps
  • Review basic Python syntax and data structures.
  • Practice writing simple Python functions.
  • Complete online Python tutorials or exercises.
Review 'Grokking Algorithms'
Solidify your understanding of fundamental algorithms before diving into advanced topics.
Show steps
  • Read chapters related to searching and sorting algorithms.
  • Work through the examples and exercises in the book.
  • Implement the algorithms in Python.
Implement Basic Data Structures in Python
Reinforce your understanding of core data structures by implementing them from scratch in Python.
Show steps
  • Implement linked lists, stacks, and queues.
  • Implement binary search trees and hash tables.
  • Test your implementations thoroughly.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Collaborative Algorithm Implementation
Enhance your understanding and problem-solving skills by working with peers to implement and debug algorithms.
Show steps
  • Form a study group with classmates.
  • Choose a specific algorithm from the course.
  • Collaboratively implement the algorithm in Python.
  • Debug and test the implementation together.
Create a Video Tutorial on Splay Trees
Solidify your understanding of splay trees by explaining the concept in a video tutorial, teaching others and reinforcing your own knowledge.
Show steps
  • Research and understand splay trees thoroughly.
  • Create a script and storyboard for the video.
  • Record and edit the video tutorial.
  • Publish the video on a platform like YouTube.
Implement a Trie-Based Autocomplete System
Apply your knowledge of tries to build a practical application that demonstrates their efficiency and usefulness.
Show steps
  • Design the architecture of the autocomplete system.
  • Implement the trie data structure in Python.
  • Implement the autocomplete functionality.
  • Test and optimize the system for performance.
Contribute to a Data Structures Library
Deepen your understanding of data structures by contributing to an open-source project, gaining experience with real-world codebases and collaboration.
Show steps
  • Find an open-source data structures library on GitHub.
  • Identify a bug or missing feature.
  • Implement the fix or feature in Python.
  • Submit a pull request with your changes.

Career center

Learners who complete Advanced Algorithms and Data Structures in Python will develop knowledge and skills that may be useful to these careers:
Algorithm Developer
An algorithm developer designs and implements new algorithms or improves existing ones to solve specific problems. This course helps an algorithm developer by providing a solid understanding of advanced data structures and algorithmic techniques. The extensive coverage of various algorithms from substring searching to graph algorithms, is helpful in designing efficient solutions. The Python implementations enable the algorithm developer to quickly prototype and test new ideas. Furthermore, the course's focus on algorithmic thinking and code optimization helps to develop robust and performant algorithms. This course is helpful for an algorithm developer.
Software Engineer
A software engineer designs, develops, tests, and maintains software applications. This course on Advanced Algorithms and Data Structures in Python helps a software engineer build a foundation to write efficient and optimized code, a critical skill in software development. The course's exploration of data structures such as binary indexed trees, LRU caches, splay trees, B-trees, and tries enhance the ability to select the most appropriate data structure for a given task. Furthermore, studying substring search algorithms and graph algorithms equips engineers to solve complex problems encountered in real-world software development. This is particularly useful for a Software Engineer.
Research Scientist
A research scientist conducts research to advance knowledge in a particular field. Advanced algorithms and data structures are essential tools for research scientists across many disciplines. The course helps the research scientist to analyze large datasets, develop new algorithms, and optimize existing ones. The course's coverage of topics such as graph algorithms, substring search, and data structures helps the research scientist to tackle complex problems in a variety of research areas. A research scientist also benefits from the course objective to detect and correct inefficient code snippets.
Technical Lead
A technical lead manages a team of engineers and provides technical guidance on software development projects. This course helps the technical lead to make informed decisions about the selection and implementation of data structures and algorithms. The deep understanding of algorithmic thinking and code optimization gained from this course enables the technical lead to guide their team in developing robust and efficient software solutions. A technical lead will be able to review team code and make suggestions on performance.
Bioinformatician
A bioinformatician analyzes biological data using computational tools and techniques. Analyzing genomic data, protein structures, and biological networks requires expertise in algorithms and data structures. This course is particularly helpful because it covers substring search algorithms, which are essential for sequence alignment and pattern matching in DNA and protein sequences. The course's coverage of graph algorithms can be applied to analyzing biological networks. This course helps a bioinformatician to develop efficient tools for analyzing complex biological data.
Game Developer
A game developer designs and implements game mechanics, artificial intelligence, and graphics. The course provides knowledge to game developers in several ways. The exploration of data structures enables the game developer to efficiently manage game objects, implement collision detection, and optimize game performance. The course's coverage of graph algorithms, such as cycle detection and shortest path finding, can be applied to pathfinding and AI in games. The sections on tries and ternary search trees enable the game developer to implement features such as autocomplete in games. Overall, this course is particularly helpful for a game developer.
Systems Architect
A systems architect designs and oversees the implementation of complex computer systems. This course helps the systems architect to make informed decisions about the selection and implementation of data structures and algorithms. The course's coverage of topics such as caching, B-trees, and graph algorithms helps the systems architect to design efficient and scalable systems. This course offers a systems architect valuable skills and knowledge.
Data Engineer
A data engineer builds and maintains the infrastructure for data storage, processing, and analysis. This course helps data engineers to write efficient data processing pipelines. An understanding of data structures and algorithms is essential for optimizing data storage and retrieval. The course's coverage of topics such as B-trees and tries helps the data engineer to design efficient indexing strategies. Furthermore, the knowledge of graph algorithms can be applied to data lineage and dependency analysis. This course provides a solid foundation for building scalable and reliable data infrastructure, making it helpful to the data engineer.
Robotics Engineer
A robotics engineer designs, builds, and programs robots. This course helps robotics engineers in several ways. The coverage of graph algorithms, helps the robotics engineer in robot path planning and navigation. The knowledge of data structures such as tries and ternary search trees enables the robotics engineer to implement efficient search and decision-making algorithms. The skills learned in this course will enable the robotics engineer to develop more intelligent and autonomous robots. A robotics engineer needs to have a master's degree.
Machine Learning Engineer
A machine learning engineer develops and deploys machine learning models. This course may be useful because efficient data handling is crucial in machine learning. The course helps the machine learning engineer to select and implement appropriate data structures for model training and inference. The knowledge of advanced algorithms such as substring search and graph algorithms, can be applied to feature engineering and model optimization. The Python implementations in the course provide a practical foundation for implementing machine learning algorithms. The machine learning engineer will also find the segments on caches particularly relevant.
Quantitative Analyst
A quantitative analyst develops and implements mathematical models for financial analysis and risk management. The course may be useful to quantitative analysts because efficient algorithms are critical for pricing derivatives, managing portfolios, and detecting fraud. The course's coverage of data structures helps quantitative analysts to manage and process large financial datasets. The knowledge of graph algorithms can be applied to analyzing financial networks and detecting systemic risk. Therefore, a quantitative analyst may benefit from this course.
Cybersecurity Analyst
A cybersecurity analyst protects computer systems and networks from cyber threats. Advanced algorithms and data structures are valuable tools for cybersecurity analysts. The course may be useful because the coverage of substring search algorithms helps to detect malware and network intrusions. The knowledge of graph algorithms can be applied to analyzing network traffic and identifying malicious activity. The Python implementations in the course provide a practical foundation for developing security tools. Therefore, this course may be useful to a Cybersecurity Analyst.
Data Scientist
A data scientist analyzes and interprets complex data sets to discover insights and solve business problems. This course may be useful as it helps data scientists in several ways. By implementing data structures and algorithms from scratch, the course provides a deep understanding of their performance characteristics, which is essential for optimizing data analysis pipelines. The course's coverage of topics such as topological ordering, cycle detection, and strongly connected components can aid in analyzing relationships and dependencies within data sets. The Python implementations in the course equip aspiring data scientists for practical application.
Database Administrator
A database administrator is responsible for the performance, integrity, and security of databases. This course may be useful to database administrators, particularly the modules on B-trees and tries. B-trees are a fundamental data structure in database indexing, and understanding their implementation and optimization is crucial for efficient query processing. Tries can be used for indexing text data and implementing autocomplete features. The knowledge gained from this course helps the database administrator to optimize database performance and improve data retrieval speeds. Therefore, this course may be useful to a Database Administrator.
Web Developer
A web developer builds and maintains websites and web applications. This course may be useful to web developers, particularly the sections on caching and string algorithms. Understanding LRU caches and splay trees helps to optimize web application performance by caching frequently accessed data. The knowledge of substring search algorithms can be applied to tasks such as search engine implementation and data validation. The Python implementations in the course provide a practical foundation for implementing these techniques in web development projects.

Reading list

We've selected one books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Advanced Algorithms and Data Structures in Python.
Provides a visually engaging and intuitive introduction to algorithms. It uses illustrations and step-by-step explanations to make complex concepts easier to understand. While it doesn't delve into the same depth as other textbooks, it's excellent for beginners who want a gentle introduction to the subject. It can be helpful for grasping the fundamental ideas before diving into more technical details.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser