Edit::
after all these discussions with juanpa & fusion here in the comments and Kevin on python chat , i have come to a conclusion that iterating
through a generator
takes the same time as it would take iterating
through any other object because generator itself generates those combinations
on the fly. Moreover the approach by fusion worked great for len(arr)
up to 1000
(maybe up to 5k
- but it terminates due to time out, of course on an online judge - Please Note it is not because of trying to get the min_variance_sub
, but I also have to get the sum of absolute differences
of all the pairs possible in the min_variance_sub
). I am going to accept fusion's approach as an answer for this question, because it answered the question.
But I will also create a new question for that problem statement (more like a QnA
, where I will also answer the question for future visitors
- i got the answer from submissions by other candidates, an editorial
by problem setter, and a code by problem setter himself - though I do not understand the approach they used). I will link to the other question as I create it :)
It's HERE
The original question starts below
I'm using itertools.combinations
on an array so first up I tried something like
aList = [list(x) for x in list(cmb(arr, k))]
where cmb = itertools.combinations
, arr is the list, and k is an int.
This works totally good for len(arr) < 20 or so but this Raised a MemoryError
when len(arr) became 50 or more.
On a suggestion by kevin on Python Chat, I used a generator
, and it worked amazingly fast in generating those combinations like this
aGen = (list(x) for x in cmb(arr, k))
But It's so slow to iterate through this generator object. I tried something like
for p in aGen:
continue
and even this code seems to take forever.
Kevin also suggested an answer talking about kth combination
which was nice but in my case I actually want to test all the possible combinations and select the one with minimum variance
.
So what would be the memory efficient way of checking all the possible combinations of an array (a list) to have minimum variance
(to be precise, I only need to consider sub arrays having exactly k number of elements)
Thank You For Any Help.