문제

$n$ 품목과 함께 무게 $w_1,...,w_n$ 고 값 $v_1,...,v_n$, 고,무게 제한 $W$, 목적입니다 아직도 극대화 총 가치의 항목이 있을 수행(동안 초과하지 않는 무게 제한).지금은 새로운 제약 조건을,한 번 항목의 값으로 $v_i$ 은,모든 항목의 값보다 크 $v_i$ 수도 있어야 합니다.(괜찮다고 추정하는 모든 $v_i$'s 은 다른)

나의 목적을 달성하는 것이 이에서 $O(n)$ 시간,그리고 여기 나도(가정 입력을 배열 $달 의 튜플 $(w_i,v_i)$):

  1. 계산의 총 중량은 항목: $W_{\mathrm{총}}\얻\sum_{i=1}^n w_i$;

  2. $(W_{\mathrm{총}}>W)$ 마:

    2.1 $p\얻$ 평균 값에 $달;

    2.2 $R\얻$ 항목의 값보다 크 $p$;

    2.3 $L\얻\를 R$;(항목의 값보다 작 $p$)

    2.4 $W_R\얻$ $\sum_{A[i] }w_i$;

    2.5 $W_{\mathrm{총}}\얻 W_R$;

    2.6 $시 얻 R$;

  3. $W\얻 W-W_{\mathrm{총}}$;(용)

  4. 2 단계를 반복하여 배열의 $L$, 생성,배열 $L'$;

  5. Return $L'\컵$;

통지는 알고리즘을 찾기 위해 평균 비용은 선형 시간입니다.

나는 알고리즘 비용 $O(n)$ 시간 이후를 위해,모든 반복에서 각각 동안 반복 입력 크기를 절반을-하지만 나는 100%자부합니다.그래서 이 알고리즘 정말로 비용은 선형 시간입니까?하지 않을 경우,무엇 개정을 만들 수 있습니다,거기서 일반적인 아이디어를 디자인한 알고리즘 비용은 선형 시간입니까?어떤 도움이 될 것입니다.:)

도움이 되었습니까?

해결책

그렇다고 알고리즘에서 실행됩 $O(n)$ 시간 사용하는 경우에는 평균의 중위수 알고리즘이 있습니다.할 수 있음을 증명할 수 있습니다 자신에 의해서 알고리즘과 주목하는 모든 루프가 배열의 크기는 우리의 생각은 잘라에서 반으로.런타임 루프의 몸이 $O(n)$ (만약 우리가 사용 중의 중앙값과 배열로 복사/필터링 $O(n)$ 어쨌든).이제 우리는 다음과 같은 합:

$$\sum_{i=0}^{\로그(n)}\frac{n}{2^나}\배경\sum_{i=0}^{\infty}\frac{n}{2^나}=n\cdot\sum_{i=0}^{\infty}\frac{1}{2^나}=2n\O(n)$$

$\로그(n)$ 에서 제공할 수 있다는 사실만 나누어 배열의 크기 $로그(n)$ 시간 반에 도착할 때까지 $1$ (기 $2^{\로그(n)}=n$).모든 용어의 합계를 표현하의 실행을 반복의 몸입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top