你好我目前得到的指數走出從下面的代碼誤差範圍:(我將首先發送代碼,然後錯誤)指數超出範圍錯誤的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
在我們再次探討這個問題之前,您到目前爲止嘗試過調試這個錯誤嗎?你瞭解錯誤信息嗎? –
是的,我試圖改變for循環範圍從1到len(v)-1或從1到len(v)+ 1 ...兩個給我一個索引超出範圍錯誤...我不知道爲什麼..可能是因爲我試圖製作一個二維數組嗎? – user1661211
用列表理解構造v和w將會更加Pythonic: v = [xrange(1,size)中的_counter的random.randint(1,1000)] – pcurry