Subset-AVG - поиск подмножества списка, который соответствует известному рациональному номеру - PullRequest
0 голосов
/ 26 апреля 2019

Я спросил это о математическом переполнении и использовал комментарии, чтобы уточнить / преувеличить мой вопрос.Я надеюсь, что он имеет ожидаемый эффект и не выглядит как неприятный звук.

Я пытаюсь найти, какое подмножество чисел достигает известного среднего.

У меня есть список известных значений, отрицательных и возможных десятичных знаков.Они выглядят примерно так {-.32, -. 64, -. 12, .08, -. 54, -. 43, ...}

В некоторых случаях это около 50 цифр, хотя эта проблемабудет проверяться и в других случаях.

Набор в основном содержит отрицательные десятичные числа, в то время как в редких случаях имеет несколько положительных десятичных знаков - он никогда не имеет целых чисел.

У меня также естьизвестное значение, которое, как я знаю, является средним для некоторого подмножества приведенного выше списка.

Известное значение аналогично -.03.

Я не уверен в используемом механизме группировки, но, похоже, достиг переполнения стека, пытаясь решить эту проблему, когда не группировался.

Я попробовал несколько способов решить эту проблему.Я использую Python 3.6 и импортировал numpy как np.

Мне интересно, есть ли здесь код "subset-avg", который я адаптировал из другого решения для суммы subset (я буду отдавать должное, когдая снова могу найти этот вопрос) это не самый эффективный способ / если есть какая-то огромная ошибка в моей попытке решить эту проблему, которую я не видел.

Заранее спасибо за любые мысли.

def subset_avg(numbers, target, partial=[],depth=1):
    # create AVG function

    # set average of partial
    a = np.mean(partial)

    # check if the partial sum is equals to target


    if a != target:
        print("Currently Testing the Following Subset's " " " + "Average(%s)  =  %s\n\n" % (partial, round(a,2)))
    print(depth)

    if a == target or round(a,2) == target:

            print('\n\n')
            print("************")
            print("************")
            print('\n\n')
            print("Found Subset AVG " + "Average(%s)  =  %s" % (partial, target))
            print('\n\n')
            print("************")
            print("************")
            print('\n\n')
    print(depth)        
    # for each number in range of list
    for i in range(len(numbers)):
        # set n = current iteration in list
        n = numbers[i]
        # remaining values is current iteration + 1 through end of list
        remaining = numbers[i+1:]
        # calculate mean of partial, set partial = partial plus n 
        subset_avg(remaining, target, partial + [n],depth+1)

# Example of use
x = [-.32,-.64,-.12,.08,-.54,-.43]

subset_avg(x,-.03)

...