def print_stats(func: Callable[[int], int], input_args: List[int]):

Нельзя вычитать time.perf_counter() из time.time(): это разные часы. Начальные минимумы и максимумы тоже неверны — ноль искажает результат для положительных или отрицательных значений.

Короткий ответ

Что ответить на собеседовании

Нельзя вычитать time.perf_counter() из time.time(): это разные часы. Начальные минимумы и максимумы тоже неверны — ноль искажает результат для положительных или отрицательных значений.

Подробный разбор

Ответ с пояснениями

Условие

def print_stats(func: Callable[[int], int], input_args: List[int]): if not input_args: return

min_value_elapsed, min_value_result = 0, 0
max_value_elapsed, max_value_result = 0, 0
elapsed_sum = 0
result_sum = 0
counter = len(input_args)

for input_arg in input_args:
    start = time.perf_counter()
    result = func(input_arg)
    elapsed = time.time() - start

    min_value_elapsed = min(elapsed, min_value_elapsed)
    max_value_elapsed = max(elapsed, max_value_elapsed)
    elapsed_sum += elapsed

    min_value_result = min(result, min_value_result)
    max_value_result = max(result, max_value_result)
    result_sum += result

print(
    "Evaluation time min/avg/max: {}/{}/{}".format(
        min_value_elapsed,
        elapsed_sum / counter,
        max_value_elapsed,
    )
)
print(
    "Result min/avg/max: {}/{}/{}".format(
        min_value_result,
        result_sum / counter,
        max_value_result,
    )
)

Ответ

Нельзя вычитать time.perf_counter() из time.time(): это разные часы. Начальные минимумы и максимумы тоже неверны — ноль искажает результат для положительных или отрицательных значений.

Используем один монотонный таймер и инициализируем экстремумы первым измерением. Каждый вызов функции учитывается один раз; исключение здесь прерывает сбор статистики.

import time
from typing import Callable, List

def print_stats(func: Callable[[int], int], input_args: List[int]):
    if not input_args:
        return
    elapsed_sum = result_sum = 0
    for index, arg in enumerate(input_args):
        start = time.perf_counter()
        result = func(arg)
        elapsed = time.perf_counter() - start
        if index == 0:
            min_t = max_t = elapsed
            min_r = max_r = result
        else:
            min_t, max_t = min(min_t, elapsed), max(max_t, elapsed)
            min_r, max_r = min(min_r, result), max(max_r, result)
        elapsed_sum += elapsed
        result_sum += result
    count = len(input_args)
    print(f"Evaluation time min/avg/max: {min_t}/{elapsed_sum/count}/{max_t}")
    print(f"Result min/avg/max: {min_r}/{result_sum/count}/{max_r}")

Дополнительная память O(1). Это измерение одного прогона, а не полноценный статистический benchmark.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее