Sliding Window Protocol Java Program
This technique shows how a nested for loop in few problems can be converted to single for loop and hence reducing the time complexity.
Let’s start with a problem for illustration where we can apply this technique –
To get started finding sliding window protocol program in java, you are right to find our website which has a comprehensive collection of manuals listed. Our library is the biggest of these that have literally hundreds of thousands of different products represented. Sliding Window Protocol Using Java. Stop & wait protocol using sockets in java; 82. Chrono trigger ds rom patched. Java program for sliding window protocol. There are sometimes compatibility problems between Java and various browsers, operating systems or computers, and if not written correctly, it can be slow to load.
So, let’s analyze the problem with Brute Force Approach. We start with first index and sum till k-th element. We do it for all possible consecutive blocks or groups of k elements. This method requires nested for loop, the outer for loop starts with the starting element of the block of k elements and the inner or the nested loop will add up till the k-th element.
Consider the below implementation :
C++
// a subarray of size k using namespace std; // Returns maximum sum in a subarray of size k. { int max_sum = INT_MIN; // Consider all blocks starting with i. int current_sum = 0; current_sum = current_sum + arr[i + j]; // Update result if required. } return max_sum; int main() int arr[] = { 1, 4, 2, 10, 2, 3, 1, 0, 20 }; int n = sizeof (arr) / sizeof (arr[0]); return 0; |
Java
// O(n*k) solution for finding // of size k // Returns maximum sum in static int maxSum( int arr[], int n, int k) // Initialize result for ( int i = 0 ; i < n - k + 1 ; i++) { for ( int j = 0 ; j < k; j++) max_sum = Math.max(current_sum, max_sum); } // Driver code { int k = 4 ; System.out.println(maxSum(arr, n, k)); } // This code is contributed |
Python3
# maximum sum of a subarray of size k INT_MIN = - sys.maxsize - 1 # Returns maximum sum in a def maxSum(arr, n, k): # Initialize result # starting with i. current_sum = 0 ; current_sum = current_sum + arr[i + j]; # Update result if required. arr = [ 1 , 4 , 2 , 10 , 2 , k = 4 ; print (maxSum(arr, n, k)); # This code is contributed by mits |
C#
Characteristics Of Sliding Window Protocol
// finding maximum sum of a subarray using System; class GFG { // Returns maximum sum in a static int maxSum( int [] arr, int n, { int max_sum = int .MinValue; // Consider all blocks starting for ( int i = 0; i < n - k + 1; i++) { for ( int j = 0; j < k; j++) + arr[i + j]; // Update result if required. max_sum); } // Driver code { 0, 20 }; int n = arr.Length; } |
PHP
// O(n*k) solution for finding maximum sum of function maxSum( $arr , $n , $k ) $max_sum = PHP_INT_MIN ; // Consider all blocks for ( $i = 0; $i < $n - $k + 1; $i ++) $current_sum = 0; $current_sum = $current_sum + $max_sum = max( $current_sum , $max_sum ); } // Driver code $k = 4; echo maxSum( $arr , $n , $k ); // This code is contributed by anuj_67. |
Output :
It can be observed from the above code that the time complexity is O(k*n) as it contains two nested loops.
Window Sliding Technique
The technique can be best understood with the window pane in bus, consider a window of length n and the pane which is fixed in it of length k. Consider, initially the pane is at extreme left i.e., at 0 units from the left. Now, co-relate the window with array arr[] of size n and plane with current_sum of size k elements. Now, if we apply force on the window such that it moves a unit distance ahead. The pane will cover next k consecutive elements.
Consider an array arr[] = {5, 2, -1, 0, 3} and value of k = 3 and n = 5
Applying sliding window technique :
- We compute the sum of first k elements out of n terms using a linear loop and store the sum in variable window_sum.
- Then we will graze linearly over the array till it reaches the end and simultaneously keep track of maximum sum.
- To get the current sum of block of k elements just subtract the first element from the previous block and add the last element of the current block .
The below representation will make it clear how the window slides over the array.
This is the initial phase where we have calculated the initial window sum starting from index 0 . At this stage the window sum is 6. Now, we set the maximum_sum as current_window i.e 6.
Now, we slide our window by a unit index. Therefore, now it discards 5 from the window and adds 0 to the window. Hence, we will get our new window sum by subtracting 5 and then adding 0 to it. So, our window sum now becomes 1. Now, we will compare this window sum with the maximum_sum. As it is smaller we wont the change the maximum_sum.
Similarly, now once again we slide our window by a unit index and obtain the new window sum to be 2. Again we check if this current window sum is greater than the maximum_sum till now. Once, again it is smaller so we don’t change the maximum_sum.
Therefore, for the above array our maximum_sum is 6.
code for the above description :
C++
// a subarray of size k using namespace std; // Returns maximum sum in a subarray of size k. { if (n < k) { return -1; int max_sum = 0; max_sum += arr[i]; // Compute sums of remaining windows by // window and adding last element of int window_sum = max_sum; window_sum += arr[i] - arr[i - k]; } return max_sum; int main() int arr[] = { 1, 4, 2, 10, 2, 3, 1, 0, 20 }; int n = sizeof (arr) / sizeof (arr[0]); return 0; |
Java
// O(n) solution for finding // of size k // a subarray of size k. { if (n < k) { return - 1 ; int max_sum = 0 ; max_sum += arr[i]; // Compute sums of remaining windows by // window and adding last element of int window_sum = max_sum; window_sum += arr[i] - arr[i - k]; } return max_sum; public static void main(String[] args) int arr[] = { 1 , 4 , 2 , 10 , 2 , 3 , 1 , 0 , 20 }; int n = arr.length; } // by prerna saini. |
Python3
# maximum sum of a subarray of size k INT_MIN = - sys.maxsize - 1 def maxSum(arr, n, k): # n must be greater than k print ( 'Invalid' ) max_sum = INT_MIN # removing first element of previous # current window. window_sum = window_sum - arr[i] + arr[i + k] arr = [ 1 , 4 , 2 , 10 , 2 , 3 , 1 , 0 , 20 ] n = len (arr) |
C#
// maximum sum of a subarray of size k // a subarray of size k. { // k must be greater Console.WriteLine( 'Invalid' ); } // Compute sum of first window of size k for ( int i = 0; i < k; i++) // removing first element of previous // current window. for ( int i = k; i < n; i++) { max_sum = Math.Max(max_sum, window_sum); } // Driver code { int k = 4; Console.WriteLine(maxSum(arr, n, k)); } // This code is contributed by anuj_67. |
PHP
// O(n) solution for finding maximum sum of // subarray of size k. { if ( $n < $k ) echo 'Invalid' ; } // Compute sum of first $max_sum = 0; $max_sum += $arr [ $i ]; // Compute sums of remaining windows by // window and adding last element of $window_sum = $max_sum ; { $max_sum = max( $max_sum , $window_sum ); } // Driver code $k = 4; echo maxSum( $arr , $n , $k ); // This code is contributed by anuj_67 |
Output :
Now, it is quite obvious that the Time Complexity is linear as we can see that only one loop runs in our code. Hence, our Time Complexity is O(n).
We can use this technique to find max/min k-subarray, XOR, product, sum, etc. Refer sliding window problems for such problems.
This article is contributed by Kanika Thakral. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Recommended Posts:
Improved By : vt_m, AnnieAlford, Mithun Kumar, KyleMcClay