2012-10-31 5 views
1

Здравствуйте, я пишу и тестирую рекурсивный динамически запрограммированный рюкзак (0-1) (следующий код является основным файлом и функцией) Я продолжаю получать ошибку (который вывешен после кода) ... Я действительно смущен относительно того, что такое ошибка, поэтому любая помощь будет высоко оценена!Python Error TypeError: unorderable types: int()> list()

MAIN FILE

import Knapsack_Test 

size = 10 
W = 2**size 
knapsack = Knapsack_Test.Knapsack_Test() 

for i in range(1, 10): 
    knapsack.recursive_knapsack_test(size, W) 
size = size + 100*i 

W = 2**size 

вызывающую функцию (которая находится в КЛАССА Knapsack_Test.py

def recursive_dynamic_knap(self, v, w, i, W): 
    n = len(v) - 1 
    if i == n: 
     if W < w[n]: 
      return 0 
     else: 
      return v 
    elif W < w[i]: 
     return self.recursive_dynamic_knap(v, w, i+1, W) 

    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 

ERROR

Traceback (most recent call last): 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\Knapsack_Main.py", line 9, in <module> 
    knapsack.recursive_knapsack_test(size, W) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\Knapsack_Test.py", line 19, in recursive_knapsack_test 
    self.knapsack.recursive_dynamic_knap(v, w, j, W) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 22, in recursive_dynamic_knap 
    return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) 
TypeError: unorderable types: int() > list() 
+0

Можете ли вы также опубликовать функцию 'knapsack.recursive_knapsack_test'? – lvc

+0

ПОЖАЛУЙСТА, ОТКАЗЫВАЙТЕ МОЙ ВОПРОС, Я РЕШЕН ЭТО! – user1661211

+0

Похоже, что 'recursive_dynamic_knap' возвращает два типа значений:' v', который является 'list' и' 0'. Возможно, вы хотели вернуть 'v [x]'? Сравнение целых чисел и списков не определено. –

ответ

2

Я считаю, что проблема заключается в том, что в return max(self.recursive_dynamic_knap(v, w, i+1,W), self.recursive_dynamic_knap(v, w, i+1, W-w[i]) + v[i]) один из вызовов до recursive_dynamic_knap возвращается v, который является списком, и whi ch не имеет никакого смысла в качестве аргумента для max(), потому что он «неупорядочен» (не может быть разумно оценен как больше или меньше int)

+0

Да, это правильные ответы ... ха-ха, я уже понял это, но еще раз спасибо! – user1661211