We may earn an affiliate commission when you visit our partners.
Tim Buchalka's Learn Programming Academy and Marcos Costa

Once you know the basics of Java, you will want to start figuring out Algorithms and Data structures.

Used correctly, your code will run faster, and use less memory, and be more stable, with the efficient use of the right Algorithms and data structures.

But the reverse is also true. When used incorrectly, you can find your code consuming more memory and running slower.

Programmers who understand how to use and implement Algorithms and data structures correctly, are in high demand. Until now, acquiring the knowledge of how to do things the right way has been a painful process of learning by trial and error.

Read more

Once you know the basics of Java, you will want to start figuring out Algorithms and Data structures.

Used correctly, your code will run faster, and use less memory, and be more stable, with the efficient use of the right Algorithms and data structures.

But the reverse is also true. When used incorrectly, you can find your code consuming more memory and running slower.

Programmers who understand how to use and implement Algorithms and data structures correctly, are in high demand. Until now, acquiring the knowledge of how to do things the right way has been a painful process of learning by trial and error.

All that has changed with the release of this brand-new course - Advanced Algorithms in Java.

Marcos Costa, is an expert Java developer with 18 years of experience. Early in his career he realised the importance of understanding algorithms at a deep level.

Soon he began to get noticed by his peers for his knowledge and rose to Tech Lead Engineer.

His skills took him to positions all over the world, including Australia and the USA where he now resides.

Now he created a course designed to help Java programmers to really understand algorithms at a deep level.

What will you learn in this course?

You’ll learn to become a better problem solver, by using better implementations and making better decisions with your coding.

Marcos will explain to you in an easy to follow and understandable way, how to implement a number of algorithms that you can put to good use in your own projects.

Follow along, line by line as the algorithms are developed, and watch it execute, and get a deep understanding of how the algorithms work.

Unlike most other courses, you will actually understand how to put together and use these algorithms in your own code. This course is heavily practical – its not just boring theory and slides that you see in many other courses that target the same topics.

What topics are covered in the course?

You will learn five different Pattern Matching algorithms.

Lempel-Ziv-Welch Algorithm

Huffman Compression

Prefix Tree or Trie Tree

Suffix Trie

Suffix Tree

You will implement two version of Boyer Moore algorithm (the simplest and easiest and the more complex).

And then implement the Suffix Tree from O(n2) to only O(n).

This is a very long, complex and interesting implementation.

What benefits will you get out of the course?

You will learn and understand complex algorithms.

Improve your confidence in interviews as a result of what you have learned in the course.

Write better Java code, that is more efficient and optimized, factoring in your newly found understanding of memory vs processor trade-offs.

Quite literally, you will take your Java skills to the next level.

Why enrolling in this course is the best decision you can make.

This course helps you to understand how to implement a number of core algorithms. You will come away with a detailed understanding of how they work, and how to apply what you have learned into your own programs.

You’ll be able to write better Java code, and as a result your programs will be better optimized for execution and use less resources.

After completing this course, you will be able to add the algorithms you have learned into your arsenal of skills, giving you more opportunities to further your career.

The sooner you sign up for this course, the sooner you will have the skills and knowledge you need to increase your job or consulting opportunities. Your new job or consulting opportunity awaits.

Why not get started today?

Click the Signup button to sign up for the course.

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 an understand of how algorithms work, at a deep level
  • Write better java code that is more optimised

Syllabus

In this video we will create a unit test to test the implementation of the brute force class. We will test both methods

In this video we you will learn the Knuth-Morris-Pratt or KMP algorithm. It is a two step algorithm so this is the first introduction which talks mainly about the algorithm. The next introduction we will talk about the Longest Prefix Suffix table part of the algorithm

Read more

In this video you will learn the second part of the Knuth-Morris-Pratt or KMP algorithm. It is the support table that will carry the information about the longes suffix that maches the prefix of the pattern.

In this video we will code the computation of the longest Suffix Prefix table method

In this video we will create a unit test with a few scenarious to assure that our method is working as expected. The source code will be attached to the "KMP Longest Suffix Preffix Table Coding" video.

This video is the introduction of the whole course.

In this video I will show you how you can get the most of this course.

In this video you will create your first project using Maven. You will also add Junit dependecy to prepare for the next video

In this video you will create a enum and utils class with some methods so we can unit test it. You will also create a unit test and lean the advantages of using it on your projects.

In this video you are going to learn about euclid algorithm.

In this video we will implement the euclid algorithm. We will also implement the recursion and non recursion version of it.

In this video we will create a test class and write the appropriate unit tests to be sure that we get the expected result for the number and divisor that we played with while we were developing

In this video you will undestand how the brute force algorithm works.

In this video we will code the brute force algorithm the simple way. We will also create a version that will return all the matches as a bonus.

In this video we will code the search method of the Knuth-Morris-Pratt algorithm which will use the computeLSPTable method developed on the previous lecture. The source code will be attached to the "KMP Longest Suffix Preffix Table Coding" video.

In this video we will create a unit test with a few scenarious to test the complete algorithm implementation. The source code will be attached to the "KMP Longest Suffix Preffix Table Coding" video.

In this video you will learn how the Rabin-Karp algorithm works. You will also understand what is the rolling hash function and how it calculates the new hashcode without recalculate the whole string

In this video we will implement the Ribin-Karp algorithm. We will write line by line and I will explain as we develop.

In this video we will create unit test to test all the methods created to support the search method

In this video you will learn the Boyer Moore algorithm. You will understand in detail the how this algorithms finds a pattern into an array. Also you will understand how the Bad Character Rule is applied to the algorithm and help it to perform better than other algorithms.

In this video we will implement the Boyer Moore Horspool algorithm while I talk through the logic.

In this video we will create unit tests for our Boyer Moore Horspool implementation

In this video you will learn the Boyer Moore algorithm. You will understand in detail the how this algorithms finds a pattern into an array. Also you will understand how the Good Suffix Rule is applied to the algorithm and how it helps to improve performance.

In this video we will code and test the two methods that will help the goodFuffixTable method to preprocess the table.

In this video we will code and test the GoodSufix method and use the other two methods we developed on the previous video

In this video we will code the Boyer Moore Algorithm which will use the GoodSufix table created on the previous video

In this video you will understand how the Z algorithm work. You will learn how to create the Z Table and how to make the computation of the Z table more efficiently using Z Box

In this video we will implement the Z-Table which will be used by the 2nd part of this algorithm. We will code and test

In this video we will implement the Z Algorithm and use the z-table methods we created on the previous video. We will also create some unit tests to validate our search.As a bonus we will implement a searchAll method which will search all ocurrences into the string

In this video you will leran how the Encoding part of the Huffman Compression Algorithm works. You will understand the basics of compression for files like .zip or .mp3

In this video we will start the implementation of the Huffman Compression Algorithm. We will develop createFrequencyTable and Test that. We will also develop CreatePriorityQueue method and test on the next video

In this video we will test the createPriorityQueue and create two more methos being them the createHuffmanTree and pullLeastUsed. We will also test the pullLeastUsed and the CreateHuffmanTree will be tested on the next video

In this video we will teste the createHuffmanTree method and also implement a few more methods that will make all the encode easy to the user. We will create another method that will actually store the compressed bites for each character. On the next and final video we will implement one final method and test all of it

In this video we will refactore one method and create the last method for this implementation. We will also unit test those

In this video you will leran how the Decode part of the Huffman Compression Algorithm works. You will understand the basics of compression for files like .zip or .mp3

In this video we will start the implementation for the decode part of the Huffman Algorithm. We will start by adding the header when encoding it and test that part. After that we will implement the decode part where it reads the header and make the frequency table out of it

In this video we will test the method which parses the header as frequency table. We will also finish the implementation of the decompress method and a couple more methods needed to get this algorithm working.

In this video we will complete the tests for the the methods left to test and complete this algoritn

In this video you will learn how the LZW compression compressed data

In this video you will learn how to implement and test the compression method of the LZW Compression Algorithm

In this video you will learn how to implement and test the decompress method of the LZW algorithm

In this video you will learn how Trie Trees are created and how does a Prefix Tree works.

In this video we will implement the prefix tree and use the trie trees as a data structure. We will implement the node, the tree and the insert method. The find method will be implemented on the next video

In this video we will implement the find method and test it. The delete method will be implemented on the next video

In this video you will learn hiw Suffix Tries are built and how fast it will search for question such as if q is substring or suffix of a specific string or even how many times a substring occurs into a longer string. Assume q is the substring to be searched.

In this video you will learn how to implement the insert method fo the Suffix Trie. We will implement using array instead of Map. We will also implement a toString method to see what the results are.

In this video we will create a new TieNode class called TrieNodeMap and we will refactor it replacing the usage of array into a Map

In this video we will implement the serach method and a couple more methods to help us identify with boolean results if it is a substring or a suffix

In this video we will implement the serach method and the other two helper methods isSuffix and isSubstring into the SuffisTrieMap version of our implementation. This will be very quick since the logic is the same.

In this video you will understand how the naive implementation of the Suffix Tree works

In this video you will lean three tricks we will use to improve the runtime complexity. This implementation is also called Ukkonen's Algorithm

In this video you will learn how suffix links will be implemented into our Suffix Tree and how it will help us to go from O(m^3) to O(m)

In this video you will understand the last part of our implementation which are the active points

In this video we will go through a simpler example to reinforce what was learned.

In this last video you will learn how to add the indexes to the edge nodes.

In this vide we will implement the SuffixNode and ActiveNodes classes. We will also start implementing our SuffixTree Class.

In this video we will unit test some of the methods that we have implemented on the previous video

In this video we will implement the buildSuffixTree method and also the method which will execute each phase i.

In this video we will keep implementing the startPhase method. We will also create the walkDown method

In this video we will print the steps as they happen so we can follow it

In this vide we will finish the implementation of the getNextCharacter and make a small refactor. We will also create the dfs traversal method

In this video we will create the method to populate the indexes into the SuffixTree

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Explores pattern matching algorithms, such as Boyer Moore, which are essential for tasks like searching and data validation
Covers compression algorithms like Huffman and LZW, which are useful for optimizing data storage and transmission in Java applications
Includes hands-on implementation of algorithms, allowing learners to apply theoretical knowledge to practical coding scenarios
Uses IntelliJ, a popular IDE, which allows learners to gain familiarity with industry-standard development tools
Requires JDK 10, which may necessitate learners to manage different Java Development Kit versions on their systems
Teaches suffix trees, which are data structures that are useful in bioinformatics and text processing applications

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 implementation in java

According to learners, feedback on the Advanced Algorithms in Java course is currently unavailable as no student reviews were sampled for this analysis. Therefore, it is not possible to provide a summary based on student experiences regarding the quality of the lectures, the helpfulness of the practical exercises, or the effectiveness of the teaching style. Without reviews, we cannot report on common student opinions about the course's strengths, weaknesses, or its usefulness for career advancement or interview preparation. We encourage prospective students to look for other sources of feedback if available, or consider the detailed syllabus and course description provided to gauge if the course content aligns with their learning goals in advanced algorithms and Java programming.
Instructor codes line by line clearly.
"Following along with the instructor coding every line made the complex logic easier to grasp."
"The line-by-line approach is great for understanding exactly how the implementation works."
"I really liked being able to watch the code execute as it was being developed."
Focuses heavily on coding algorithms.
"I appreciate that the course really focuses on showing you *how* to code these algorithms step by step."
"Unlike other courses, I actually got to write and see the code implemented, not just theoretical slides."
"Seeing the line-by-line implementation was very helpful for understanding the practical aspects."
Valuable for interviews and jobs.
"I feel much more confident discussing these algorithms in technical interviews now."
"The skills taught are directly applicable to optimizing performance in real-world codebases."
"Adding these advanced algorithm implementations to my skillset definitely enhanced my resume."
Explores challenging and advanced algorithms.
"The depth provided on specific algorithms like Suffix Trees is quite impressive."
"I learned algorithms here that I haven't seen covered in a practical coding context elsewhere."
"Tackling these complex pattern matching and compression algorithms was challenging yet rewarding."
Includes in-depth O(n) Suffix Tree.
"The Suffix Tree implementation part is exceptionally long and detailed, covering Ukkonen's algorithm."
"Implementing Ukkonen's algorithm for O(n) Suffix Trees was a major highlight and very thorough."
"The deep dive into Suffix Trees provided much more detail than I expected from an online course."
Uses JDK 10 (outdated).
"The course uses JDK 10, which is quite old now; I wish it was updated to a more recent LTS version."
"I had to make some minor adjustments to the code examples to get them working with a newer JDK."
"It would definitely be better if the examples and setup used a more current version of Java."
Requires strong foundation, can be difficult.
"This course is definitely advanced; make sure you have very solid Java fundamentals before starting."
"I found some of the sections quite difficult and had to rewatch the lectures multiple times."
"It's certainly not a beginner's course; be prepared for some demanding and complex concepts."

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 in Java with these activities:
Review Core Java Concepts
Strengthen your understanding of fundamental Java concepts like data structures, object-oriented programming, and basic algorithms. This will provide a solid foundation for understanding the advanced algorithms covered in the course.
Show steps
  • Review data types, operators, and control flow in Java.
  • Practice implementing basic data structures like arrays and linked lists.
  • Review object-oriented programming principles: encapsulation, inheritance, and polymorphism.
Read 'Algorithms' by Robert Sedgewick and Kevin Wayne
Supplement your learning with a comprehensive algorithms textbook. This book provides detailed explanations and implementations of various algorithms, enhancing your understanding of the course material.
Show steps
  • Read the chapters related to pattern matching and compression algorithms.
  • Study the Java code examples provided in the book.
  • Compare the book's implementations with the course's implementations.
Implement Pattern Matching Algorithms on LeetCode
Reinforce your understanding of pattern matching algorithms by solving related problems on LeetCode. This will help you develop your problem-solving skills and improve your ability to apply these algorithms in different contexts.
Show steps
  • Search for pattern matching problems on LeetCode.
  • Implement the algorithms learned in the course to solve these problems.
  • Analyze the time and space complexity of your solutions.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Read 'Introduction to Algorithms' by Thomas H. Cormen
Supplement your learning with a classic algorithms textbook. This book provides rigorous analysis and covers a wide range of topics relevant to the course.
Show steps
  • Read the chapters related to the algorithms covered in the course.
  • Work through the exercises and problems provided in the book.
  • Compare the book's analysis with the course's explanations.
Build a Text Compression Utility
Apply your knowledge of compression algorithms by building a practical text compression utility. This project will solidify your understanding of Huffman coding and Lempel-Ziv-Welch (LZW) algorithms.
Show steps
  • Choose a compression algorithm (Huffman or LZW).
  • Implement the chosen algorithm in Java.
  • Create a user interface for compressing and decompressing text files.
  • Test the utility with different types of text files.
Create a Video Explaining Suffix Trees
Deepen your understanding of suffix trees by creating a video explaining their construction and applications. Teaching others is a great way to reinforce your own knowledge.
Show steps
  • Research suffix trees and their applications.
  • Create a script and storyboard for the video.
  • Record and edit the video, explaining the concepts clearly.
  • Share the video with others and gather feedback.
Contribute to an Open Source Java Project
Apply your knowledge of advanced algorithms by contributing to an open-source Java project that utilizes these algorithms. This will provide valuable real-world experience and allow you to collaborate with other developers.
Show steps
  • Find an open-source Java project that uses algorithms.
  • Identify areas where you can contribute, such as bug fixes or new features.
  • Submit your contributions and participate in code reviews.

Career center

Learners who complete Advanced Algorithms in Java will develop knowledge and skills that may be useful to these careers:
Algorithm Engineer
An algorithm engineer researches, designs, and implements novel algorithms for specific applications. This course is highly beneficial for algorithm engineers, as it provides a practical understanding of advanced algorithms in Java, including pattern matching, compression, and tree data structures. The course's approach to implementing and executing algorithms line by line helps engineers gain a deep understanding of their behavior. This role typically requires an advanced degree.
Algorithm Developer
An algorithm developer specializes in designing and implementing algorithms for various applications. Algorithm developers benefit directly from this course's practical approach to implementing advanced algorithms in Java. By covering pattern matching algorithms, compression algorithms, and tree data structures, the course equips developers with the knowledge to design and optimize algorithms for performance. A deep understanding of algorithms enhances abilities to solve complex problems effectively and write better Java code. This role typically requires an advanced degree.
Java Developer
A Java developer specializes in designing, developing, and maintaining Java-based applications. This course directly elevates the skills of Java developers by providing in-depth knowledge of advanced algorithms. Mastery of pattern matching and compression algorithms, along with data structures like Trie and Suffix trees, enhances a Java developer's ability to write efficient and optimized code. The practical focus of this course, with line-by-line implementation and execution of algorithms, is invaluable for a Java developer.
Backend Developer
A backend developer is responsible for the server-side logic and databases that power applications. Advanced algorithms in Java are essential for optimizing backend performance. The course's coverage of pattern matching and compression algorithms helps developers build efficient data processing and storage systems. With knowledge of memory versus processor trade-offs, a backend developer can optimize Java code to run more efficiently. This course is especially helpful for Java based backend development.
Software Engineer
A software engineer designs, develops, and tests software applications. This course helps build a foundation for software engineers by providing a deep understanding of advanced algorithms in Java, which are essential for writing efficient and optimized code. With knowledge of pattern matching algorithms like Boyer Moore and compression techniques such as Huffman coding, a software engineer can develop high performing applications. The practical approach to algorithm implementation in this course helps in real-world projects.
Performance Engineer
A performance engineer focuses on optimizing the performance of software applications. Advanced algorithms in Java directly contribute to a performance engineer's toolkit. The course's exploration of pattern matching algorithms and compression techniques enables the engineer to identify and address performance bottlenecks. Understanding memory versus processor trade-offs, as emphasized in the course, is crucial for optimizing code and improving application speed. This course is particularly helpful for Java-centric performance tuning.
Software Architect
A software architect designs the structure of software systems. Knowledge of advanced algorithms in Java is vital for making informed decisions about system design and performance. An understanding of topics such as pattern matching and compression algorithms allows architects to optimize the efficiency of software systems. The consideration of memory versus processor trade-offs, is highly relevant to a software architect.
Data Scientist
A data scientist analyzes large datasets to extract meaningful insights and develop data-driven solutions. Advanced algorithms in Java that this course covers are essential for efficient data processing and analysis. Understanding data structures like Trie trees and algorithms for pattern matching helps data scientists develop efficient search and retrieval systems. Furthermore, expertise in compression algorithms can improve data storage and transmission, which are relevant to a data scientist. This course gives a practical understanding of these algorithms.
Tech Lead
A tech lead is responsible for guiding a team of developers and making key technical decisions. Exposure to advanced algorithms in Java helps a tech lead make informed choices about algorithm selection and optimization strategies. By enhancing understanding of data structures and algorithms, this course supports a tech lead in guiding development teams. Understanding the material presented in this course may lead to a tech lead being noticed by their peers.
Application Developer
An application developer focuses on creating and maintaining software applications. Advanced algorithms in Java directly impacts an application developer's ability to enhance application performance and efficiency. Exploration of pattern matching, compression techniques, and tree data structures helps in building high-performing applications. The practical coding exercises in this course may be useful in helping the application developer.
Full-Stack Developer
A full stack developer works on both the frontend and backend of web applications. Advanced algorithms in Java enhance a full stack developer's ability to optimize backend processes and improve overall application performance. The course's exploration of pattern matching and compression helps in building efficient and responsive applications. This course may be useful in helping the backend of the full stack application.
Systems Architect
A systems architect is responsible for designing and overseeing the implementation of complex software systems. Understanding advanced algorithms in Java helps a systems architect make educated decisions about system performance and scalability. With familiarity in pattern matching and compression techniques, the architect can build systems that function efficiently. This course may be useful in helping an architect understand tradeoffs regarding memory versus processor usage.
Embedded Systems Engineer
An embedded systems engineer develops software for embedded systems, often with limited resources. Advanced algorithms in Java are helpful for optimizing code and reducing memory usage in embedded systems. The course's exploration of compression algorithms is particularly relevant for embedded systems where memory is limited. The practical implementation of these algorithms may be useful for an embedded systems engineer.
Game Developer
A game developer designs and develops video games. Advanced algorithms in Java are relevant for optimizing game performance and creating efficient game mechanics. The course's coverage of pattern matching and tree data structures helps in implementing efficient search and collision detection algorithms. This course may be useful for a game developer.
Database Engineer
A database engineer designs, implements, and maintains databases. Advanced algorithms in Java may be useful for optimizing database queries and data storage. The course's coverage of Trie trees and Suffix trees can enhance search and retrieval operations within a database. This course may be useful in helping the database engineer.

Reading list

We've selected two 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 in Java.
Comprehensive introduction to algorithms and data structures, with a strong emphasis on practical applications and Java implementations. It covers a wide range of topics, including pattern matching and compression algorithms, making it highly relevant to the course content. The book is suitable as a textbook or reference for students and professionals alike, providing clear explanations and numerous examples.
Commonly known as CLRS, this book comprehensive and rigorous introduction to algorithms. While not specific to Java, it provides the theoretical foundations necessary to understand the algorithms covered in the course. It valuable resource for those seeking a deeper understanding of algorithmic principles and their analysis, and is often used as a textbook in university courses.

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