2013-06-21 7 views
3

{1,3,5} 명칭 동전; 합계 = 11 특히 동적 프로그래밍을 사용 합이 나는이 동전 변화 문제의 실행 시간 복잡도를 검색코인 변경 분석

(우리는 각 교단의 동전의 번호를 사용할 수 있습니다) 확인하는 데 사용할 수있는 동전의 최소 수를 찾을 수 방법. 그러나 어디에서나 설명을 찾을 수 없었습니다.

비 동적 솔루션의 복잡성을 계산 한 다음 동적 솔루션의 복잡성을 어떻게 계산합니까? (안 욕심 일)

편집 : 여기

는 분석 질문을 받았다되는 구현입니다.

public int findCoinChange(int[] coins, int sum,int count) { 

    int ret = 0, maxRet = -1; 
    if(sum ==0)maxRet = count; 
    else if(sum < 0)maxRet = -1; 
    else{ 
     for(int i:coins){ 
      ret = findCoinChange(coins, sum - i,count+1); 
      if(maxRet< 0)maxRet = ret; 
      else if(ret >=0 && ret < maxRet){ 
        maxRet = ret; 
       } 
      } 
    } 
    if(maxRet < 0)return -1; 
    else return maxRet; 
} 

나에게도 조합 폭발이 발생합니다. 그러나 나는 이것을 위해 런타임 복잡성을 어떻게 추론 할 지 확신하지 못한다.

+0

관련 : http://stackoverflow.com/questions/1986828/coin-changing-algorithm – jason

+0

나는이 문제에 대해 욕심을 먹지 않을 것이라고 생각합니다. – thefourtheye

+0

thefourtheye - 욕심쟁이가 항상 최상의 솔루션을 제공하지는 않습니다. 합계 = 9; {1,4,5} 욕심쟁이는 ~ {5,1,1,1,1} 최적이 {4,4} –

답변

1

이 문제에 대한 dynamic programming solution이다 명확하게O(k * n) (중첩 루프, ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ) k 동전의 수이고 n는 그 변화가 이루어지고 금액이다.

비 동적 프로그래밍 솔루션의 의미를 모르겠습니다. 죄송합니다. 어떤 알고리즘을 사용할지 지정해야합니다. 어떤 경우에는 greedy algorithm fails이므로 이 아닙니다. 선형 프로그래밍 솔루션을 의미합니까? 복잡성이 무엇인지 알지 못하기 때문에이 문제에 대한 끔찍한 접근 방식이며, 임의로 천천히 실행하는 것이 가능합니다.

또한 "동적 인 것으로 변경하십시오."라는 것이 무엇인지 알지 못합니다.

+0

당신은 정확하고, 탐욕스럽고 선형입니다. 나는 재귀를 사용하는 것에 대해 언급하고있다. 우리는 합계에서 명칭을 뺀 다음 하위 문제를 해결함으로써 문제를 하위 문제로 줄이기 위해 노력합니다. 마지막에 0이 있으면 추적 가능한 경로가 있으며 모든 솔루션을 수행 한 후에 가장 작은 경로를 찾습니다. –

+0

질문은 동전 변경 문제에 대한 재귀 솔루션의 복잡성 분석에 관한 것이 었습니다. 그것은 욕심 많은/dp 솔루션에 관한 것이 아닙니다. 나는 그것을 한 번 쏜 - 재귀 나무는'n * k' 깊이까지입니다. 그러나 그것은 중복 된 가지가 많이 있습니다. 나는 거기에서 계속하는 방법을 모른다. – Raghu

+0

@Raghu : 질문 : "동적 프로그래밍 방법을 사용하여 특히 동전 변경 문제의 런타임 복잡성을 찾았으나 어디에서든 설명을 찾을 수 없었습니다." – jason