leetcode 1011에 대한 재귀 코드의 시간 복잡성에 대한 질문

카말

그래서 나는 다음 문제를하고 있었다 : https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/

더 최적의 이진 검색 솔루션이 있다는 것을 알고 있지만 처음에는 재귀 솔루션을 생각했고 시간 복잡성을 설명하는 가장 쉬운 방법에 대해 확신하지 못했습니다.

기본적으로 내 무차별 대입 접근 방식은 어레이에 대해 길이 D의 모든 접두사를 통과 한 다음 (각각은 1 일에 배송 할 수있는 잠재적 패키지를 나타냄), 각 접두사에 대해 나머지 접두사에 대해 반복하는 것입니다. D-1 일로 나머지 패키지를 배송 할 수있는 최소 용량을 파악하기 위해 감소 된 값 D를 가진 어레이. 그런 다음 hte 접두사와 재귀 결과의 합의 최대 값은 해당 접두사에 해당하는 최소 용량을 제공합니다.

그런 다음 기본적으로 모든 접두사에 대해이 작업을 수행하고 모든 접두사에서 최소 용량을 얻어야합니다. 코드는 다음과 같습니다. 인터뷰에서 시간 복잡성을 어떻게 쉽게 유도하는지 모르겠습니다. (여기에 버그가있을 수 있습니다. 개념을 설명하기 위해이 코드를 빠르게 적어 두었습니다.)

def shipWithinDays(weights, D):
    if D == 1:
        return sum(D)

    min_capacity = float('inf')
    capacity_till_i = 0
    for i in xrange(D):
        capacity_till_i += weights[i]
        capacity_for_remaining = shipWithinDays(weights[i+1:],D-1)

        min_capacity = min(min_capacity, max(capacity_till_i, capacity_for_remaining))

    return min_capacity

이제 대부분의 algo 클래스에서 배운 "Unrolling method"를 사용하여이를 분석 할 수 있다는 것을 알고 있습니다. 따라서 시간 복잡도가 T (n)이면 제 경우에는 첫 번째 재귀 호출 후 재귀가 길이 n의 배열을 처리합니다. 1, n-2 등을 배열 길이 n-D로 설정합니다. 이렇게하면 다음과 같은 반복 관계가 생성됩니다.

T (n) = T (n-1) + T (n-2) + T (n-3) + ... + T (nD)

이제 T (n-1) 항을 풀면 다음과 같은 T (n-1) = T (n-2) + T (n-3) + .... + T (n -1-D)

T (n) = 2T (n-1) + T (n-1-D) ^ 위의 내용이 2 ^ n 또는 다른 것으로 단순화되어야한다고 생각합니다. 특히 인터뷰 환경에서하기에는 수학이 너무 무거워요. 왜 2 ^ n인지 설명하는 더 직관적 인 방법이 있나요?

user58697

왜 2 ^ n인지 설명하는 더 직관적 인 방법이 있습니까?

우선 2^n. 그것은 실제로 지수 적이며 n 제곱의 어떤 것이지만 이것이 반드시 2는 아닙니다.

약간의 수학 : 모든 선형 반복 관계는 다음과 같은 형태의 해를 허용합니다 T(n) = a ** n. 여기서는 a특성 다항식의 근입니다.

a ** D = a ** {D-1} + a ** {D-2} + ... + 1

이제 증명해야 할 것은 1보다 큰 뿌리가 있다는 것입니다. 이것은 다소 사소한 것입니다. 실제로 a1과 같으면 왼쪽 (1)이 오른쪽 ()보다 작습니다 D. a무한대 성장함에 따라 LHS는 RHS보다 빠르게 성장하고 결국 더 커집니다. 그것은 a > 1그들이 동등한 존재가 있음을 의미합니다 .

이것은 거의 다입니다. 내면의 수학 선생님이 좀 더 듣고 싶어합니다. 면접관으로서 나는 매우 만족할 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

시간 복잡성 분석에 대한 질문

분류에서Dev

코드에 대한 최악의 시간 복잡성

분류에서Dev

난소가 아닌 하위 문제 재귀 솔루션에 대한 시간 복잡성 분석

분류에서Dev

비 재귀 함수에 대한 FIbonacci 시간 복잡도

분류에서Dev

이 코드에 대한 Big O 시간 복잡성

분류에서Dev

반복에 대한 C ++ 재귀 코드

분류에서Dev

IF-else 문에 대한 코드의 복잡성을 감소

분류에서Dev

재귀를 사용한 문자열 순열에 대한 질문

분류에서Dev

Count and Say에 대한 재귀 솔루션의 공간 복잡성은 무엇입니까?

분류에서Dev

Python 키보드 입력 코딩에 대한 간단한 질문

분류에서Dev

임의 호출에 대한 시간 복잡성

분류에서Dev

코드에 대한 재귀 지수

분류에서Dev

주어진 코드 조각에 대한 시간 복잡도 계산 문제

분류에서Dev

이진 트리의 최대 높이에 대한 재귀 코드

분류에서Dev

이 재귀 함수 질문에 대한 해결책?

분류에서Dev

질문에 대한 시간 복잡성 답변이 혼란 스럽습니다-n ^ (2/3)

분류에서Dev

Polymer에 대한 간단한 질문

분류에서Dev

Polymer에 대한 간단한 질문

분류에서Dev

sudo su에 대한 간단한 질문-

분류에서Dev

C #의 "this"문에 대한 간단한 질문

분류에서Dev

병합 두 정렬 목록에 대한 질문 (leetcode 질문 21)

분류에서Dev

주문 통계 트리 및 1D 포인트 문제에 대한 작업의 시간 복잡성

분류에서Dev

논쟁의 의미에 대한 간단한 질문

분류에서Dev

이 코드에 대한 최악의 경우 big-O 시간 복잡성은 무엇입니까?

분류에서Dev

간단한 C ++ 함수 (is_palindrome)의 논리에 대한 질문

분류에서Dev

Selenium Webdriver의 암시 적 대기에 대한 질문

분류에서Dev

INT 긴 내 코드의 차이에 대한 질문

분류에서Dev

라쿠의 소수 계산 코드에 대한 질문

분류에서Dev

주어진 입력과 시간에 대한 시간 복잡성

Related 관련 기사

  1. 1

    시간 복잡성 분석에 대한 질문

  2. 2

    코드에 대한 최악의 시간 복잡성

  3. 3

    난소가 아닌 하위 문제 재귀 솔루션에 대한 시간 복잡성 분석

  4. 4

    비 재귀 함수에 대한 FIbonacci 시간 복잡도

  5. 5

    이 코드에 대한 Big O 시간 복잡성

  6. 6

    반복에 대한 C ++ 재귀 코드

  7. 7

    IF-else 문에 대한 코드의 복잡성을 감소

  8. 8

    재귀를 사용한 문자열 순열에 대한 질문

  9. 9

    Count and Say에 대한 재귀 솔루션의 공간 복잡성은 무엇입니까?

  10. 10

    Python 키보드 입력 코딩에 대한 간단한 질문

  11. 11

    임의 호출에 대한 시간 복잡성

  12. 12

    코드에 대한 재귀 지수

  13. 13

    주어진 코드 조각에 대한 시간 복잡도 계산 문제

  14. 14

    이진 트리의 최대 높이에 대한 재귀 코드

  15. 15

    이 재귀 함수 질문에 대한 해결책?

  16. 16

    질문에 대한 시간 복잡성 답변이 혼란 스럽습니다-n ^ (2/3)

  17. 17

    Polymer에 대한 간단한 질문

  18. 18

    Polymer에 대한 간단한 질문

  19. 19

    sudo su에 대한 간단한 질문-

  20. 20

    C #의 "this"문에 대한 간단한 질문

  21. 21

    병합 두 정렬 목록에 대한 질문 (leetcode 질문 21)

  22. 22

    주문 통계 트리 및 1D 포인트 문제에 대한 작업의 시간 복잡성

  23. 23

    논쟁의 의미에 대한 간단한 질문

  24. 24

    이 코드에 대한 최악의 경우 big-O 시간 복잡성은 무엇입니까?

  25. 25

    간단한 C ++ 함수 (is_palindrome)의 논리에 대한 질문

  26. 26

    Selenium Webdriver의 암시 적 대기에 대한 질문

  27. 27

    INT 긴 내 코드의 차이에 대한 질문

  28. 28

    라쿠의 소수 계산 코드에 대한 질문

  29. 29

    주어진 입력과 시간에 대한 시간 복잡성

뜨겁다태그

보관