@qw1klyy

Является ли данный код решением задачи о рюкзаке?

weight = 4 # ВЕС ПРЕДМЕТА
r = [(4000,4), (2500,1), (2000,3), (8000, 2), (9000, 4)] # ВХОДНЫЕ ДАННЫЕ, ЦЕННОСТЬ - ВЕС ПРЕДМЕТА
for i in range(len(r)):
    m = r[i]
    t = r[:i]
    t1 = r[i + 1:]
    z = list(filter(lambda x: x[-1] + m[-1] <= weight, t + t1))
    if z != []:
        r.append((m[0] + z[0][0], m[-1] + z[0][-1]))
print(max(r)[0])
  • Вопрос задан
  • 238 просмотров
Пригласить эксперта
Ответы на вопрос 1
Maksim_64
@Maksim_64
Data Analyst
Смотря в чем задача конкретно, задача рюкзака это общее название.
У тебя код осуществляет попытку найти максимальную ценность предметов при условии, что в рюкзак можно положить 4 кг. На твое тестовом сете он работает правильно, если я изменю тестовый сет то нет. Например если я сделаю
=[(4000,4), (2500,1),(2000,3), (8000, 2), (9000, 4), (7000,2)]
То я ожидаю ценность 15000, а он дает все равно 10500.
Я бы рекомендовал тебе статью https://www.geeksforgeeks.org/0-1-knapsack-problem... там несколько имплементаций в том числе и рекурсивный, и оптимизированный динамический, и на нескольких языках.

Задача рюкзака это классика, она требует погружения в проблему, посидеть над ней как следует. Возьми код из ссылки и поработай несколькими способами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы