How to optimally divide an array into two subarrays so that sum of elements in both subarrays is same, otherwise give an error?
Given the array
10, 20 , 30 , 5 , 40 , 50 , 40 , 15
It can be divided as
10, 20, 30, 5, 40
and
50, 40, 15
Each subarray sums up to 105.
10, 20, 30, 5, 40, 50, 40, 10
The array cannot be divided into 2 arrays of an equal sum.
A Simple solution is to run two loop to split array and check it is possible to split array into two parts such that sum of first_part equal to sum of second_part. Below is the implementation of above idea.
Splitting the Array Into Even Chunks Using slice() Method The easiest way to extract a chunk of an array, or rather, to slice it up, is the slice() method: slice(start, end) - Returns a part of the invoked array, between the start and end indices.
The total number of subarrays in an array of size N is N * (N + 1) / 2. The count of subarrays with an odd product is equal to the total number of continuous odd elements present in the array.
There exists a solution, which involves dynamic programming, that runs in O(n*TotalSum)
, where n
is the number of elements in the array and TotalSum
is their total sum.
The first part consists in calculating the set of all numbers that can be created by adding elements to the array.
For an array of size n
, we will call this T(n)
,
T(n) = T(n-1) UNION { Array[n]+k | k is in T(n-1) }
(The proof of correctness is by induction, as in most cases of recursive functions.)
Also, remember for each cell in the dynamic matrix, the elements that were added in order to create it.
Simple complexity analysis will show that this is done in O(n*TotalSum)
.
After calculating T(n)
, search the set for an element exactly the size of TotalSum / 2
.
If such an item exists, then the elements that created it, added together, equal TotalSum / 2
, and the elements that were not part of its creation also equal TotalSum / 2
(TotalSum - TotalSum / 2 = TotalSum / 2
).
This is a pseudo-polynomial solution. AFAIK, this problem is not known to be in P.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With