Как бы я рассчитал эту функцию - PullRequest
2 голосов
/ 25 апреля 2020

Я хочу определить время выполнения Dynami c У меня есть алгоритм программирования для решения задач о ранце в Python. Я знаю о времени и времени импорта, но не уверен, как их реализовать здесь. Я не очень хороший программист!

def DPKP(v, s, C):
    # Applies the dynamic programming method to the knapsack problem where v are the
    # values of the n items, s are the sizes of the n items, and C is the capacity.
    n = len(v)
    V = [ [0 for cp in range(C+1)] for j in range (n)  ]
    X = [ [0 for cp in range(C+1)] for j in range (n)  ]

    for cp in range(C+1):
        if s[n-1] <= cp:
            V[n-1][cp] = v[n-1]
            X[n-1][cp] = 1

    for i in reversed(range(n-1)):
        for cp in range(C+1):
            if s[i] <= cp:
                if v[i] + V[i+1][cp-s[i]] > V[i+1][cp]:
                    V[i][cp] = v[i] + V[i+1][cp-s[i]]
                    X[i][cp] = 1
                else:
                    V[i][cp] = V[i+1][cp]
            else:
                V[i][cp] = V[i+1][cp]

    return V, X

Ответы [ 3 ]

3 голосов
/ 25 апреля 2020

Вы можете взять время перед запуском вашей функции и после запуска вашей функции и рассчитать разницу, например,

import time

# get current time
old = time.time()
# run function
DPKP(...)
# print difference
print("Time elapsed in seconds:", time.time() - old)
1 голос
/ 25 апреля 2020

Модуль timeit требует оператора вызова, но это немного сложно понять, когда вы новичок в Python и пытаетесь передать аргументы.

Самый простой я знаю, что нужно просто обернуть вашу функцию, требующую аргументов, другой функцией, как показано ниже.

def function_test():
    DPKP([1,2,3], [1,2,3], 0)

print(timeit.timeit(function_test, limit=100))
1 голос
/ 25 апреля 2020

Вы можете добавить следующую строку кода:

import time

#at the start of the code
time1 = time.time()

#at the end of the code
time2 = time.time()

print(time2- time1)

Это даст вам время работы в секундах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...