TheAlgorithms-Python

Форк
0
63 строки · 1.9 Кб
1
class Things:
2
    def __init__(self, name, value, weight):
3
        self.name = name
4
        self.value = value
5
        self.weight = weight
6

7
    def __repr__(self):
8
        return f"{self.__class__.__name__}({self.name}, {self.value}, {self.weight})"
9

10
    def get_value(self):
11
        return self.value
12

13
    def get_name(self):
14
        return self.name
15

16
    def get_weight(self):
17
        return self.weight
18

19
    def value_weight(self):
20
        return self.value / self.weight
21

22

23
def build_menu(name, value, weight):
24
    menu = []
25
    for i in range(len(value)):
26
        menu.append(Things(name[i], value[i], weight[i]))
27
    return menu
28

29

30
def greedy(item, max_cost, key_func):
31
    items_copy = sorted(item, key=key_func, reverse=True)
32
    result = []
33
    total_value, total_cost = 0.0, 0.0
34
    for i in range(len(items_copy)):
35
        if (total_cost + items_copy[i].get_weight()) <= max_cost:
36
            result.append(items_copy[i])
37
            total_cost += items_copy[i].get_weight()
38
            total_value += items_copy[i].get_value()
39
    return (result, total_value)
40

41

42
def test_greedy():
43
    """
44
    >>> food = ["Burger", "Pizza", "Coca Cola", "Rice",
45
    ...         "Sambhar", "Chicken", "Fries", "Milk"]
46
    >>> value = [80, 100, 60, 70, 50, 110, 90, 60]
47
    >>> weight = [40, 60, 40, 70, 100, 85, 55, 70]
48
    >>> foods = build_menu(food, value, weight)
49
    >>> foods  # doctest: +NORMALIZE_WHITESPACE
50
    [Things(Burger, 80, 40), Things(Pizza, 100, 60), Things(Coca Cola, 60, 40),
51
     Things(Rice, 70, 70), Things(Sambhar, 50, 100), Things(Chicken, 110, 85),
52
     Things(Fries, 90, 55), Things(Milk, 60, 70)]
53
    >>> greedy(foods, 500, Things.get_value)  # doctest: +NORMALIZE_WHITESPACE
54
    ([Things(Chicken, 110, 85), Things(Pizza, 100, 60), Things(Fries, 90, 55),
55
      Things(Burger, 80, 40), Things(Rice, 70, 70), Things(Coca Cola, 60, 40),
56
      Things(Milk, 60, 70)], 570.0)
57
    """
58

59

60
if __name__ == "__main__":
61
    import doctest
62

63
    doctest.testmod()
64

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.