.
각 하위 집합에 대해 솔루션 인 경우 O(n log n)
에서 테스트합니다. (어떻게 이런 일을하는지)
이 솔루션을 모두 찾은 후에는 가장 정확한 금액이 정확히 S
인 요소를 찾고 있습니다.
작성 방법에 따라 복잡도는 O(2^n * n log n) * O(log (2^n)) = O(2^n * n^2 log n)
이됩니다. O(log (2^n)) = O(n)
은 최소 솔루션을 검색하기위한 것이며 최악의 경우 i=n/2
인 for 루프의 매 라운드마다이 작업을 수행하며 모든 하위 집합은 솔루션입니다.
이제는 O()
과 o()
을 섞으면 확실하지 않습니다.
2^n O(nlogn*n)=o(2^n n²)
은 2^n O(nlog(n*n))
인 경우에만 적합합니다.
f=O(g)
은 f
의 복잡도가 g
의 복잡도보다 크지 않음을 의미합니다.
f=o(g)
은 f
의 복잡도가 g
의 복잡성보다 작음을 나타냅니다.
그래서 2^n O(nlogn*n) = O(2^n n logn^2) = O(2^n n * 2 logn) = O(2^n n logn) < O(2^n n^2)
공지 사항 : O(g) = o(h)
좋은 표기 적이 없다. (대개의 경우 항상) 인 f
이지만 인 경우 f != O(g)
인 함수를 찾을 것입니다. 개선
:
가 내가 알고리즘의 권리를 이해한다면, 당신은 그것을 조금 속도를 높일 수 있습니다. 원하는 하위 집합의 크기를 알고 있으므로 크기가 S
인 모든 하위 집합 만 봅니다. 최악의 경우는 S=n/2
이므로 C(n,n/2) ~ 2^(n-1)
은 복잡성을 줄이지 만 요소 2를 절약합니다.
또한 솔루션을 저장하고 다음 솔루션이 더 작은 지 확인할 수 있습니다. 이렇게하면 다시 검색 할 때 가장 작은 솔루션을 얻을 수 있습니다. 복잡성은 O(2^n * n log n)
입니다.
게시 한 "코드"에 어떤 의미가 들지 않습니다. 질문을 개선하십시오. – AbcAeffchen
주어진 숫자 집합 (take o (nlogn))에서 크기 i의 모든 하위 집합을 열거합니다. 크기 i의 모든 하위 집합은 해결하기 위해 o (nlogn)를 사용합니다. 이러한 모든 크기의 하위 집합에서 최소 비용을 찾고 싶습니다. 희망이 지금은 분명합니다 – kays86
무엇을 해결 하시겠습니까? 크기 S의 최소 부분 집합은 무엇입니까? 만약 당신이 contais 요소를 찾고있는 부분 집합이라면, 최소값은 포함 된 값들의 합이 되는가? 처음에는 o (nlogn)가 필요합니까? 당신이 먼저 그들을 분류합니까? – AbcAeffchen