蛮力法实现01背包问题 的求解问题的规模N取481632…计算到单次求解过程不超过5分钟为止要求随机生成物品的重量和价值物品重量的取值范围1~10物品价值的取值范围10~50背包的容量为所有物品总重量的一半。程序中记录求解过程所需要的时间做出图像横坐标为N纵坐标为时间单位为秒提供具体实现的代码要求能直接复制粘贴到pycharm上运行
以下是使用蛮力法实现0/1背包问题求解的代码:
import random
import time
import matplotlib.pyplot as plt
def generate_items(n):
items = []
total_weight = 0
for _ in range(n):
weight = random.randint(1, 10)
value = random.randint(10, 50)
items.append((weight, value))
total_weight += weight
return items, total_weight
def brute_force_knapsack(items, capacity):
n = len(items)
max_value = 0
best_subset = []
for i in range(2**n):
subset = []
total_weight = 0
total_value = 0
for j in range(n):
if (i >> j) & 1:
subset.append(items[j])
total_weight += items[j][0]
total_value += items[j][1]
if total_weight <= capacity and total_value > max_value:
max_value = total_value
best_subset = subset
return best_subset, max_value
def plot_results(n_list, time_list):
plt.plot(n_list, time_list, 'bo-')
plt.xlabel('N')
plt.ylabel('Time (seconds)')
plt.title('Time Complexity of Brute Force Knapsack')
plt.grid(True)
plt.show()
if __name__ == '__main__':
n_list = []
time_list = []
for n in [4, 8, 16, 32]:
items, total_weight = generate_items(n)
capacity = total_weight // 2
start_time = time.time()
best_subset, max_value = brute_force_knapsack(items, capacity)
end_time = time.time()
elapsed_time = end_time - start_time
n_list.append(n)
time_list.append(elapsed_time)
print(f'N = {n}')
print(f'Best Subset: {best_subset}')
print(f'Max Value: {max_value}')
print(f'Time: {elapsed_time} seconds\n')
plot_results(n_list, time_list)
这段代码会生成随机的物品列表,并计算出物品总重量。然后,根据总重量的一半作为背包的容量,使用蛮力法求解0/1背包问题。最后,记录求解过程所需要的时间,并绘制时间复杂度的图像。
你可以将以上代码复制粘贴到PyCharm中运行。
原文地址: https://www.cveoy.top/t/topic/hHUl 著作权归作者所有。请勿转载和采集!