You want to learn advanced Algorithm programming to participate in interview rounds with big technology companies such as Google, Facebook, Amazon, Apple, etc. You want to find an internship or full-time job for companies that require Algorithmic knowledge. You want to build a team that works with advanced Algorithms to optimize your product.

Big-O Orange Course: Advanced Algorithms will be right for you, which helps you to improve your Algorithmic programming techniques with knowledge of Mathematics, Dynamic Programming, and Segment Trees and to solve problems on famous coding pages such as Leetcode, Interviewbit, Topcoder. Illustrated programming language in this course: C++, Python, Java.

Tuition Fee: Special offer for the first 5 early registrants. For details of tuition fees, please see the attached link below.

Priority to discount more for students who have studied at Big-O Green and Blue courses. We also have a program to support paying tuition fees many times for students. Please contact us via Email: for more support.

You can view the opening time, class timetable and register via this link.


  • Prerequisites: Students have learned the Big-O Blue course. If you have not learned it before, you need to take an entrance test to determine whether you are suitable for this class or not.

  • Optional:Those who have learned and mastered 3 courses: Data Structures & Basic Algorithms, Data Structures & Advanced Algorithms, Graph Theory.

  • If you have not yet determined that you are suitable for this Big-O Orange class, please call us at: 0937.401.483 for advice on taking classes suitable for your level. Or chat with us via Messenger on Facebook at


  • The exercises are 100% written in English (also have detailed instructions in Vietnamese).
  • The exercises are extracted from Intern or Full-time job interview questions of Google, Facebook, Amazon, Microsoft, etc.
  • The exercises are extracted from practical projects of companies.
  • The exercises are extracted from famous exams such as ACM-ICPCInformatics Olympiad (simple sentence format).


  • 2 months (8 weeks)
  • Location: Jabes Building 1, No. 244 Cong Quynh, Pham Ngu Lao Ward, District 1, Ho Chi Minh City.
  • Number of students per class: 25 to 30 students maximum.
  • Each class has 1 main teacher and 5 teaching assistants.
  • Especially, there are weekly Office Hours for students to review the lesson if they can’t keep up with the lesson progress.



  • The programs are taught by Algorithm experts with many years of experience (see also “Teaching Staff”).
  • The courses work on world-famous grading systems such as Codeforces, Hackerrank, HackerEarth, SPOJ, etc.
  • Students have chances to meet and receive sharing from successful people who have gone before about their Algorithmic learning experiences and working experiences.
  • Each class in addition to the main lecturer has 5 teaching assistants: the teaching assistants are in charge of the class and the class’s own forum to ensure that all students’ questions will be answered quickly anytime, anywhere.


  • Be able to build Algorithms to solve problems.
  • If you are a Software Engineer, you can participate in algorithmic contests from technology companies such as Samsung Challenge, Facebook Hacker Cup (Round 2), Google Codejan (Round 2).
  • If you are a student, you can participate in the Olympiad in Informatics, IOI (International Olympiad in Informatics), ACM-ICPC, Codeforces (Div 1).
  • You can apply what you have learned to your practical projects.
  • You are prepared to achieve your bigger goal which is having an internship, or full-time job at top tech companies.


Learn advanced graph algorithms - Topological sort is applied in arranging jobs/courses to ensure sequence, in the field of Blockchain, etc. Introduce two algorithms to find Topological order: algorithm based on DFS and Kahn’s algorithm based on BFS.

Practical exercises:

  • Find the minimum number of courses to register for and the order in which to study them.
  • Find the right alphabetical order to ensure that the sequence of given names is in “alphabetical order”.
  • Introduction from basic to advanced bit operations. These operations help to optimize the program's running time, so it is mostly applied in embedded systems, computer networks, and image processing.

    Solve problems:

  • Finds the XOR of all elements in a segment of the array.
  • Help Samu plan the party menu making sure each attendee finds at least one favorite dish.
  • Learn the backtracking algorithm through two classic problems: N-queen and find all permutations of a string.

    Solve practical problems:

  • Find your chance to win in a German Lotto game.
  • Solve word search problems in the game Boggle.
  • Learn the “divide and conquer” method with the idea of recursion, which is widely applied in classical algorithms such as binary search, quicksort, merge sort, etc. Illustrated through two problems: finding the closest pair of points in the plane (closest Pair of Points), find the subarray with the largest sum (maximum subarray sum).

    Solve some real problems:

  • Find the distance between the two nearest points in the plane.
  • The problem of painting the fence in such a way that it saves the most paint.
  • Find pairs of vertices with a given distance in the tree (using Centroid Decomposition technique).
  • Introduction to Greedy algorithm - a popular method in designing algorithms such as Dijkstra, Kruskal, Huffman Coding, etc. This algorithm is efficient in terms of time but does not guarantee accuracy. Solve graph coloring problems and taxi distribution problems.

    Solve some problems:

  • Build transport-optimized wine purchases.
  • Calculate the minimum number of steps to construct a new permutation sequence by increasing and decreasing the numbers in the original sequence.
  • Get familiar with number theory. Learn the properties and theorems related to division and remainder (modulo operation): Fermat's little theorem, Euclid's algorithm, etc.

    Practical exercises:

  • Euler candy division problem (combination).
  • Calculate the number of candies left after dividing equally among friends.
  • Learn two algorithms related to primes: Sieve of Eratosthenes (applied to find all primes less than N) and Euler's totient function (the algorithm to find the non-Eulerian function of a number).

    Practical exercises:

  • Find the largest prime divisor of a number.
  • Find the prime numbers in the range [1, N].
  • Find the anagrammatic prime.
  • Midterm Contest of the course.

    Learn important and wide-application data structures: hash tables. Building basic to advanced hash functions: Robert Sedgewick hash, polynomial, cyclic shift, etc. Analyzing collision resolution methods: separate chaining, open addressing, etc. Introduction to the Least Recently Used Cache (LRU Cache problem).

    Application exercises:

  • Find the rules of the king's path on the chessboard.
  • Find the suffix of the string in the village of Noapara.
  • Get acquainted with the concept of dynamic programming, compare the two Top-Down and Bottom-Up methods. Learn two classic dynamic programming problems: the stair-climbing problem and the coin change problem.

    Solve problems:

  • Find the number of ways to pay bills using cash with a given denomination.
  • Calculate the number of ways to decrypt a cipher string.
  • Learn dynamic programming formula for the problem of finding the longest common subsequence of 2 given subsequences (longest common subsequence). Introducing the Diff problem, a built-in tool to compare lines of code of two source codes.

    Problem solved:

  • Find common ground between the two texts.
  • Find the LCS of the three strings.
  • Get acquainted with another classic problem of dynamic programming – the problem of finding the longest increasing subsequence. Introducing the method to improve LIS by Binary search with O(NlogN) complexity. Learn about the application of LIS in the Diff algorithms used in version control systems like Git.

    Practical problem:

  • Build the tallest Babylon tower from rectangular blocks of stone.
  • Learn 3 common types of knapsack problems:

    Solve some problems:

  • 0/1 Knapsack problem
  • Multiple Knapsack problem
  • Fractional Knapsack problem
  • Introduction to Knutt-Morris-Pratt algorithm which is applied in the problem of finding the occurrence of pattern string P in a text string T (string matching problem) with linear running time. Understand how to construct prefix arrays in the preprocessing phase of the algorithm and apply it to related problems. Related applications: DNA sequencing, spam classification, etc.

    Solve problems:

  • Count the number of occurrences of a string in another string.
  • Find the “n square root” of a “string of characters”.
  • Learn the Segment Tree data structure. Solve the problem of calculating the sum of any segment on a sequence of numbers using a segment tree. Using Lazy Propagation technique to optimize updating values on a segment of the tree.

    Solve problems related to updating and querying on a series of numbers.

    The final contest.