Наихудший случай Runtime - PullRequest
0 голосов
/ 08 ноября 2018

Вопрос

Строка 6 запускается T (n / 2) раз в худшем случае.

Строка 8 выполняется в худшем случае T (n / 2) раз.

Итак, T (n / 2) + T (n / 2) + d (+ d: для второстепенных операций с постоянным временем)

Используя основную теорему: 0 <1, поэтому T (n) = O (n) (Ответ: A) </p>

Как в мире ответ D?

1 Ответ

0 голосов
/ 08 ноября 2018

Во-первых, воздержитесь от использования ссылок, так как они могут прекратиться. Вы могли бы легко ввести код на картинке, как я сделал ниже

def select_number(A, low, high):
    if low == high:
        return A[low]
    mid = (low+high) // 2
    if A[mid] < A[mid+1]:
        return select_number(A, mid+1, high)  #line 6
    else:
        return select_number(A, low, mid)     #line 8

Пользователь звонит select_number(A, 0, len(A)-1). Без использования основной теоремы мы можем видеть, что любой вызов select_number будет вызывать не более одного рекурсивного вызова, каждый раз уменьшая пространство ввода вдвое. Это похоже на бинарный поиск, поэтому ожидаемое время выполнения должно быть в log n.

Вы рассчитываете время выполнения строк 6 и 8 отдельно, тогда как они взаимоисключающие: если одна запускается, другая нет. Так что это не 2T (n / 2), а просто T (n / 2), что является решением в D.

...