• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

재귀를 최소화 하는 방법이 있을까요?

21.05.06 16:46 작성 조회수 114

0

바둑이들을 오름차순으로 정렬하고 dfs를 돌리면 한 번만에 바로 구해지더라구요.

근데 재귀의 원리를 배우기 위함이라서 정렬을 하지 않는건가요?

답변 3

·

답변을 작성해보세요.

0

ehrbs2018님의 프로필

ehrbs2018

2022.10.14

if (sum > c || sum < answer) return;

이거 말씀하시는듯

0

미리 정렬한다는 말은 dfs를 돌리기전에 바둑이를 [81,61,58,42,33] 으로 정렬하고 하나씩 더해간다는 말입니다.

그럼 큰수부터 더해나가니깐 max에 더 빨리 도달하므로 정렬되지 않았을때보다 dfs를 덜 호출하므로 정렬하는게 낫지않을까 라는 질문이었습니다:) 

0

안녕하세요^^

미리 정렬하고 DFS를 돌리면 한 번만에 나온다는게 뭔지 모르겠네요. 어자피 DFS를 돌려야 하는데....

재귀를 시간복잡도 단축하는 방법은 컷에지 방식을 주로 씁니다. 답이 나오지 않을 가지를 미리 예측해서 뻗어나가지 않는 방식입니다. 영상에서는 설명하지 않았지만 제가 제공한 소스코드에 보시면 아래와 같은 코드가 추가되어 있습니다. 이 코드를 하면 컷에지가 되어 많이 단축됩니다.

if(sum+(total-tsum)<answer) return;