2
$\begingroup$

I have to fill in values at 8 places in a sequence such that the resulting sequences have high variance among them. The values are from the sets $A=${$255, 250, 220, 160$} and $P =${$0, 45, 90, 135, 180$}. First four values have to be filled in from $A$ and the remaining from $P$.

I am trying to find a programmable solution in order to generate data from these values with maximum variance.

An extension to this question is that the last 4 values taken from $P$ result in the same subsequence when difference between subsequent places is the same. For example __ __ __ __ 0 45 0 45 is the same as __ __ __ __ 45 90 45 90. If this can be accounted for, it would help a lot.

$\endgroup$
  • $\begingroup$ Why not $(255,255,255,255,0,0,0,0)$? $\endgroup$ – lulu Sep 30 '19 at 12:57
  • $\begingroup$ Yes, it is a valid sequence. I want to generate sequences in the sense that the total variance among them is high, e.g. the sequence above and 255 250 255 255 0 0 0 0 is also a valid sequence but it is not much different from before. $\endgroup$ – hash_ir Sep 30 '19 at 13:00
  • $\begingroup$ Can you define “variance” precisely in this context? Otherwise, the question is too vague. $\endgroup$ – Mike Earnest Sep 30 '19 at 14:13
1
$\begingroup$

Here is the programmable (or, better to say, already programmed) solution to your problem. This Python program accepts the sizes of samples, that need to be taken from $A$ and $P$ and $A$ and $P$ themselves. It returns an example of the sequence with maximum variance and its variance:

import copy

def choice_with_replacement(n, A):
    if n == 0:
        yield []
    if n > 0:
        for l in choice_with_replacement(n-1, A):
            for a in A:
                ll = copy.deepcopy(l)
                ll.append(a)
                yield ll

def variance(A):
    return sum(list(map(lambda x:(x - sum(A)/len(A))**2, A)))/len(A)

n = int(input())
m = int(input())
A = list(map(int, input().split()))
P = list(map(int, input().split()))
varmax = -1
for a in choice_with_replacement(n, A):
    for b in choice_with_replacement(m, P):
        l = copy.deepcopy(a)
        l.extend(copy.deepcopy(b))
        var = variance(l)
        if var > varmax:
            varmax = var
            lmax = l
print(lmax, varmax)
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.