programming-examples/java/Graph_Problems_Algorithms/Java Program to Implement Fenwick Tree.java

190 lines
4.0 KiB
Java
Raw Normal View History

2019-11-15 12:59:38 +01:00
/*This is a Java Program to Implement Fenwick Tree. A Fenwick tree or binary indexed tree is a data structure providing efficient methods for calculation and manipulation of the prefix sums of a table of values.*/
/**
* Java Program to Implement Fenwick Tree
**/
import java.util.Scanner;
/** Class Fenwick Tree **/
public class FenwickTree
{
/** Function to update tree **/
private void update(int[] arr, int pos, int val)
{
int len = arr.length;
for (; pos < len; pos |= (pos + 1))
arr[pos] += val;
}
/** Function to query **/
private int query(int[] arr, int pos)
{
int sum = 0;
for (; pos >= 0; pos = (pos & (pos + 1)) - 1)
sum += arr[pos];
return sum;
}
/** Main method **/
public static void main(String[] args)
{
Scanner scan = new Scanner( System.in );
System.out.println("Fenwick Tree Test\n");
/** Accept number of elements **/
System.out.println("Enter number of integer elements");
int n = scan.nextInt();
/** Create integer array on n elements **/
int arr[] = new int[ n ];
FenwickTree ft = new FenwickTree();
/** update or find sum **/
char ch;
do
{
System.out.println("\nFenwick Tree Operations\n");
System.out.println("1. update ");
System.out.println("2. query");
int choice = scan.nextInt();
switch (choice)
{
case 1 :
System.out.println("Enter position and value to update");
ft.update(arr, scan.nextInt(), scan.nextInt() );
break;
case 2 :
System.out.println("Enter position to find sum till nth element");
try
{
System.out.println("Sum = "+ ft.query(arr, scan.nextInt()) );
}
catch (Exception e)
{
System.out.println("\nError! Out of bounds\n");
}
break;
default :
System.out.println("Wrong Entry \n ");
break;
}
System.out.println("\nDo you want to continue (Type y or n) \n");
ch = scan.next().charAt(0);
}
while (ch == 'Y'|| ch == 'y');
}
}
/*
Fenwick Tree Test
Enter number of integer elements
5
Fenwick Tree Operations
1. update
2. query
1
Enter position and value to update
0 5
Do you want to continue (Type y or n)
y
Fenwick Tree Operations
1. update
2. query
1
Enter position and value to update
1 4
Do you want to continue (Type y or n)
y
Fenwick Tree Operations
1. update
2. query
1
Enter position and value to update
2 3
Do you want to continue (Type y or n)
y
Fenwick Tree Operations
1. update
2. query
1
Enter position and value to update
3 2
Do you want to continue (Type y or n)
y
Fenwick Tree Operations
1. update
2. query
1
Enter position and value to update
4 0
Do you want to continue (Type y or n)
y
Fenwick Tree Operations
1. update
2. query
2
Enter position to find sum till nth element
1
Sum = 9
Do you want to continue (Type y or n)
y
Fenwick Tree Operations
1. update
2. query
2
Enter position to find sum till nth element
2
Sum = 12
Do you want to continue (Type y or n)
y
Fenwick Tree Operations
1. update
2. query
2
Enter position to find sum till nth element
3
Sum = 14
Do you want to continue (Type y or n)
y
Fenwick Tree Operations
1. update
2. query
2
Enter position to find sum till nth element
4
Sum = 14
Do you want to continue (Type y or n)
n