2012-10-31 45 views
0

你好我目前得到的指數走出從下面的代碼誤差範圍:(我將首先發送代碼,然後錯誤)指數超出範圍錯誤的Python貪心法的

主文件:

import Knapsack_Test 

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

for i in range(1, 10): 

    knapsack.greedy_knapsack_test(size, W) 

    size = size + 10*i 
    W = 2*size 

類文件(僅貪婪功能):

def greedy_knap(self, v, w, W): 

    knap_array = [] 

    for i in range(1, len(v)): 
     #The index out of range error occurs here: 
     knap_array[i] = [v[i],w[i]] 

    sort_order = self.sort.merge_sort(knap_array) 

    weight = 0 
    value = 0 

    knap_sac= [] 

    n = len(knap_array) 
    j = 0 
    profit = 0 
    while weight < W and j < n: 

     if weight + knap_array[i][1] <= W: 

      knap_sac.append(knap_array[i]) 
      weight = weight + knap_array[i][1] 
      profit = profit + knap_array[i][0] 

     j = j + 1 

    return profit 

測試文件(貪婪功能):

def greedy_knapsack_test(self, size, W): 
    v = [] 
    w = [] 
    for i in range(1,size): 
     v.append(random.randint(1,1000)) 
    for i in range(1,size): 
     w.append(random.randint(1,1000)) 
    start = time.time() 
    self.knapsack.greedy_knap(v, w, W) 
    end = time.time() - start 
    return end 

的錯誤:

Traceback (most recent call last): 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\Knapsack_Main.py", line 10, in <module> 
    knapsack.greedy_knapsack_test(size, W) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\Knapsack_Test.py", line 31, in greedy_knapsack_test 
    self.knapsack.greedy_knap(v, w, W) 
    File "\\minerfiles.mst.edu\dfs\users\asadmb\Desktop\Programming 3\KnapsackClass.py", line 30, in greedy_knap 
    knap_array[i] = [v[i],w[i]] 
IndexError: list assignment index out of range 
+0

在我們再次探討這個問題之前,您到目前爲止嘗試過調試這個錯誤嗎?你瞭解錯誤信息嗎? –

+0

是的,我試圖改變for循環範圍從1到len(v)-1或從1到len(v)+ 1 ...兩個給我一個索引超出範圍錯誤...我不知道爲什麼..可能是因爲我試圖製作一個二維數組嗎? – user1661211

+0

用列表理解構造v和w將會更加Pythonic: v = [xrange(1,size)中的_counter的random.randint(1,1000)] – pcurry

回答

2
knap_array = [] 

for i in range(1, len(v)): #The index out of range error occurs here: 
    knap_array.append([v[i],w[i]]) 

您不能引用它們創建列表元素。

+0

感謝修復了......但lmao只是去了如果weight + knap_array [i] [1] <= 1,那麼文件「\\ minerfiles.mst.edu \ dfs \ users \ asadmb \ Desktop \ Programming 3 \ KnapsackClass.py」中第44行的另一個索引超出範圍,greedy_knap 。 W: IndexError:列表索引超出範圍 – user1661211

+0

這是因爲它假設爲j不是i -.- – user1661211