Open In App

Learn Algorithms with Javascript | DSA using JavaScript Tutorial

Last Updated : 08 Dec, 2023
Comments
Improve
Suggest changes
3 Likes
Like
Report

This Algorithms with Javascript tutorial is designed to help you understand and implement fundamental algorithms using the versatile JavaScript programming language. Whether you are a beginner in programming or looking to enhance your algorithmic skills, this guide will walk you through essential concepts, algorithms, and their implementations.

What is an Algorithm?

The algorithm is defined as a process or set of well-defined instructions that are typically used to solve a particular set of problems or perform a specific type of calculation. To explain it in simpler terms, it is a set of operations performed step-by-step to execute a task.

How to Start learning Algorithms in JavaScript?

Follow the below mentioned points for how to learn Algorithms in JavaScript:

  • Know the fundamentals of Algorithms inside and out.
  • Know exactly what happens in an algorithm.
  • Understand the examples and grasp the algorithm's steps.
  • Clearly know complexity analysis of algorithms in best, average and worst case.
  • Solve problems based on the algorithms on your own.

Must know Algorithms in DSA using JavaScript Tutorial

The algorithms are divided into several categories, as shown below:

1. Searching Algorithms in Javascript:

Searching algorithms are used to find a specific element in an array, string, linked list, or some other data structure. 

The most common search algorithms are:

1.1 Linear Search Algorithm in JavaScript 

In the Linear searching algorithm, we check for the element iteratively one by one from start to end to the other.

Linear search

How Linear Search Works?

  • Step 1: First, read the array's search element (Target element).
  • Step 2: Set an integer i = 0 and repeat steps 3 to 4 until i reaches the array's end.
  • Step 3: Match the key with arr[i].
  • Step 4: If the key matches, return the index. Otherwise, increment i by 1.

Below is the implementation of Linear Search in javascript:


Output
Element is present at index 2
Element is not present in array

Complexity Analysis of Linear Search Algorithm

  • Time Complexity of Linear Search: O(N), where N is the number of elements in the Array
  • Auxiliary Space Complexity of Linear Search: O(1)

1.2) Binary Search Algorithm in JavaScript 

  • In this type of searching algorithm, we break the data structure into two equal parts and try to decide in which half we need to find the element target element. 
Binary Search

How does Binary Search work?

To understand the working of binary search, consider the following illustration:

  • First Step: 
    • Initially, the search space is from 0 to 9. 
    • Let’s denote the boundary by L and H where L = 0 and H = 9 initially. 
    • Now mid of this search space is M = 4. 
    • So compare the target with arr[M].
  • Second Step: 
    • As arr[4] is less than the target, switch the search space to the right of 16, i.e., [5, 9]. 
    • Now L = 5, H = 9, and M becomes 7. 
    • Compare target with arr[M].
  • Third Step: 
    • arr[7] is greater than the target. 
    • Shift the search space to the left of M, i.e., [5, 6]. 
    • So, now L = 5, H = 6 and M = 6. 
    • Compare arr[M] with the target. 
    • Here arr[M] and target are the same. 
  • So, we have found the target.

Here is the implementation of the above approach:


Output
Element found!
Element not found!

Time Complexity: O(logN)
Auxiliary Space: O(1) 

2. Sorting Algorithm in javascript:

A Sorting Algorithm is used to arrange a given array or list of elements according to a comparison operator on the elements. The comparison operator is used to decide the new order of elements in the respective data structure.

The most common sorting algorithms are:

2.1)Bubble sort  in Javascript:

Bubble sort

Below is the implementation of bubble sort in javascript:


Output
UnSorted array:
5 
1 
4 
2 
8 
Sorted array: 
1 
2 
4 
5 
8 

2.2)Insertion Sort  in Javascript:

Insertion sort

Below is the implementation of Insertion sort in javascript:


Output
Elements before sorting:
12 
11 
13 
5 
6 
Elements after sorting:
5 
6 
11 
12 
13 

2.3)Selection sort in Javascript:

Selection sort

Below is the implementation of selection sort in javascript:


Output
UnSorted array: 
64 
25 
12 
22 
11 
Sorted array:
11 
12 
22 
25 
64 

3. Recursive Algorithm in javascript:

The process in which a function calls itself directly or indirectly is called recursion and the corresponding function is called a recursive function. Using a recursive algorithm, certain problems can be solved quite easily. Examples of such problems are Towers of Hanoi (TOH), Inorder/Preorder/Postorder Tree Traversals, DFS of Graph, etc

3.1) Tower of Hanoi in javascript:

Tower of Hanoi

Below is the implementation of Tower of Hanoi in javascript:


Output
Move disk 1 from rod A to rod C
Move disk 2 from rod A to rod B
Move disk 1 from rod C to rod B
Move disk 3 from rod A to rod C
Move disk 1 from rod B to rod A
Move disk 2 from rod B to rod C
Move disk 1 from rod A to rod C

3.2)DFS of a Graph in javascript:

DFS of a Graph

Below is the implementation of DFS in javascript:


Output
Following is Depth First Traversal<br>
0 
1 
2 
3 

3.3)Fibonacci algorithm in javascript:

Fibonacci number

Below is the implementation of the Fibonacci number in javascript:


Output
34

4. Backtracking Algorithm in javascript:

Backtracking can be defined as a general algorithmic technique that considers searching every possible combination in order to solve a computational problem

4.1) Sudoku algorithm in javascript:

Sudoku Algorithm

Below is the implementation of the sudoku algorithm in javascript:


Output
[
  [
    3, 1, 6, 5, 7,
    8, 4, 9, 2
  ],
  [
    5, 2, 9, 1, 3,
    4, 7, 6, 8
  ],
  [
    4, 8, 7, 6, 2,
    9, 5, 3, 1
  ],
  [
    2, 6, 3, 4, 1,
    5, 9, 8, 7
  ],
  [
    9, 7, 4, 8, 6,
    3, 1, 2, 5
  ],
  [
    8, 5, 1, 7, 9,
    2, 6, 4, 3
  ],
  [
    1, 3, 8, 9, 4,
    7, 2, 5, 6
  ],
  [
    6, 9, 2, 3, 5,
    1, 8, 7, 4
  ],
  [
    7, 4, 5, 2, 8,
    6, 3, 1, 9
  ]
]

4.2) m Coloring Problem in javascript:

M Coloring Problem

Below is the implementation of the M-coloring Problem in javascript:


Output
Solution Exists: Following are the assigned colors 
  1
  2
  3
  2
 

4.3) N Queen Problem in  javascript:

N Queen Problem

Below is the implementation of the N-Queen Problem in javascript:


Output
. 
. 
Q 
. 
Q 
. 
. 
. 
. 
. 
. 
Q 
. 
Q 
. 
. 

5. Dynamic Programming in javascript:

Dynamic Programming is mainly an optimization over plain recursion. Wherever we see a recursive solution that has repeated calls for same inputs, we can optimize it using Dynamic Programming. The idea is to simply store the results of subproblems, so that we do not have to re-compute them when needed later. This simple optimization reduces time complexities from exponential to polynomial.

Dynamic Programming

Standard problems on Dynamic Programming:

  1. Fibonacci numbers
  2. nth Catalan Number
  3. Bell Numbers (Number of Ways to Partition a Set)
  4. Binomial Coefficient
  5. Coin change problem
  6. Subset Sum Problem

5.1) nth Catalan Number in javascript:

Catalan numbers are defined as a mathematical sequence that consists of positive integers, which can be used to find the number of possibilities of various combinations. 

The nth term in the sequence denoted Cn, is found in the following formula: \frac{(2n)!}{(n + 1)! n!)}               

The first few Catalan numbers for n = 0, 1, 2, 3, … are : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, …  

Below is the implementation of the Nth Catalan number in javascript:


Output
1 
1 
2 
5 
14 
42 
132 
429 
1430 
4862 

5.2) Binomial Coefficient in javascript:

A binomial coefficient C(n, k) can be defined as the coefficient of x^k in the expansion of (1 + x)^n.

A binomial coefficient C(n, k) also gives the number of ways, disregarding order, that k objects can be chosen from among n objects more formally, the number of k-element subsets (or k-combinations) of a n-element set.

Below is the implementation of the Binomial coefficient in javascript:


Output
Value of C(5,2) is 10

5.3) Subset Sum Problem in javascript :

Given a set of non-negative integers and a value sum, the task is to check if there is a subset of the given set whose sum is equal to the given sum. 

Below is the implementation of the Subset Sum Problem in javascript:


Output
Found a subset with given sum

6. Mathematical Algorithms in javascript:

Standard problems on Mathematical algorithms:

  1. Prime Numbers
  2. Sieve of Eratosthenes
  3. LCM of array
  4. GCD of array
  5. Program to add two polynomials
  6. Check divisibility by 7
  7. Euclidean algorithms
  8. Generate Pythagorean Triplets

6.1) Prime numbers in javascript:

Prime numbers

Below is the implementation of the Prime number in javascript:


Output
true

6.2) LCM of given array elements:

Given an array of n numbers, find the LCM of it. 

Below is the implementation of the LCM of array elements in javascript:


Output
252

6.3) Euclidean algorithm:

The Euclidean algorithm is a way to find the greatest common divisor of two positive integers. GCD of two numbers is the largest number that divides both of them. A simple way to find GCD is to factorize both numbers and multiply common prime factors.

Below is the implementation of the Euclidean algorithm in javascript:


Output
gcd(35
, 15)
 = 5

7. Bitwise Algorithms in javascript: 

Standard Problems on Bit Algorithms:

  1. Count set bits in an integer
  2. Add two-bit strings
  3. Turn off the rightmost set bit
  4. Rotate bits of a number
  5. Program to find parity
  6. Check if a number is Bleak

7.1) Count set bits in an integer:

count set bit

Below is the implementation of the Count set bits in an integer in javascript:


Output
2

7.2) Add two bit strings:

Given two bit sequences as strings, write a function to return the addition of the two sequences. Bit strings can be of different lengths also. For example, if string 1 is “1100011” and second string 2 is “10”, then the function should return “1100101”. 

Below is the implementation of the Add two-bit strings in javascript:


Output
Sum is 11000101

7.3) Program to find parity  in javascript:

Parity: Parity of a number refers to whether it contains an odd or even number of 1-bits. The number has “odd parity” if it contains an odd number of 1-bits and is “even parity” if it contains an even number of 1-bits. 

Below is the implementation of the find parity in javascript:


Output
Parity of no 7 = odd
  • Basic understanding of JavaScript syntax, variables, loops, and functions is recommended. Familiarity with fundamental programming concepts is beneficial.

2. Do I need any specific software or tools to follow along?

  • A code editor (e.g., Visual Studio Code, Sublime Text) and a JavaScript runtime environment (e.g., Node.js) are sufficient. No special tools are required.

3. Is this tutorial suitable for beginners?

  • Yes, this tutorial is designed to be beginner-friendly. It starts with fundamental concepts and gradually progresses to more advanced topics.

4. How can I practice the algorithms covered in the tutorial?

  • Practice by implementing the algorithms in a code editor, running them in a JavaScript environment, and experimenting with variations. Leverage coding platforms like LeetCode for additional challenges.

5. Are there any coding exercises or challenges included?

  • Yes, each section includes practice problems to reinforce your understanding. Additional challenges are encouraged for further practice.

6. Can I use this tutorial for interview preparation?

  • Absolutely! Understanding and practicing these algorithms will significantly contribute to your interview preparation for technical roles.

7. Are there any forums or communities to discuss the tutorial content?

  • Join online coding communities like Stack Overflow, Reddit (r/learnjavascript), or platforms like Discord where you can discuss concepts, seek help, and share your solutions.

8. How do I handle difficulties or challenges in understanding certain topics?

  • If you encounter challenges, revisit the explanations, experiment with the code, and seek help from online communities. Sometimes, discussing problems with others can provide valuable insights.

9. Is it necessary to complete the tutorial in order, or can I skip sections?

  • While it's recommended to follow the tutorial in order to build a solid foundation, you can skip to specific sections based on your needs. However, ensure you have a good understanding of the skipped topics.

10. What's the best way to apply these algorithms in real-world projects?

  • Identify opportunities in your projects where these algorithms can be applied. For example, sorting and searching algorithms in data processing, or graph algorithms in network analysis. Practice integrating them into practical scenarios.

11. How often should I revisit the tutorial for reinforcement?

  • Regular reinforcement is beneficial. Consider revisiting the tutorial, solving additional problems, and exploring advanced topics as you gain more experience in programming and problem-solving.

12. Can I use this tutorial as a reference for technical interviews?

  • Yes, this tutorial can serve as a valuable reference for technical interviews. Practice implementing algorithms and explaining your thought process, which is often a crucial aspect of technical interviews.

Feel free to ask additional questions or seek clarification on any topic throughout your learning journey. Happy coding!


Next Article

Similar Reads