"자바 알고리즘"자바 동적 프로그래밍

1. 알고리즘 아이디어 :

동적 프로그래밍 (동적 프로그래밍) 작업의 한 분과 연구, 의사 결정 과정 (결정 과정)를 해결하기위한 수학적 최적화 방법이다.
동적 프로그래밍이 실제로 피사체의 클래스에 대한 일반적인 용어입니다, 그것은 고정 된 알고리즘을 의미하지 않는다. 동적 프로그래밍의 중요성은 전체적인 접근을 해결하기 위해 큰 문제를 해결하는 하위 문제를 통해 재귀 (또는 분할 통치) 정책을 사용하는 것입니다. 동적 프로그래밍의 핵심 아이디어는 세라 분리를 여러 서브 문제가 문제이며, 서브 문제점을 계산하여 모든 문제의 용액을 얻었다. 문제 유사한 재귀 반복 방법을 필요 해결하도록, 서브 문제는 더 하위 문제들로 분할 될 수있다.

2. 시나리오 :
문제가 만족해야 동적 프로그래밍 적용 최적, 아니 후유증과 중첩의 원리를 .
이러한 특성의 최적화 전략에 관계없이 과거의 상태와 의사 결정이 어떻게 만들어 지는지, 형태면에서 이전 결정의 상태, 남아있는 모든 결정 : 1. 최적화 (최적의 하부 속성) 최적화 원칙의 원칙은이 방법을 설명 할 수있다 최적의 전략을 구성해야합니다. 즉, 하위 전략 최적화 전략은 항상 최적입니다. 문제는 서브 - 최적의 구조적 특성을 갖는 것으로 알려진 최적화 원리를 충족.
2. 없음 후 효과 상태의 특정 단계를 들면, 특정 순서에 따라 줄을 여러 단계 이후에, 국가의 이전 단계를 직접 만이 현재 상태를 통해, 미래의 의사 결정에 영향을 미칠 수 없습니다. 즉, 각각의 상태는 과거 역사의 전체 요약 한 것입니다. 이는 이후에는 방향성도없이 후 효과라고도 없다.
지수 적 복잡성 시간 일본어 3 서브 문제 겹치는 동적 프로그래밍 알고리즘을 검색하는 다항식 시간 복잡도 알고리즘 개선되었다. 키는 동적 프로그래밍 알고리즘의 기본적인 목적은 중복을 해결하기위한 것이다. 동적 프로그래밍은 공간적 복잡도가 다른 알고리즘보다 크다 그래서, 본질적으로 시간 기술은 생성 된 다양한 상태 동안 저장 한 처리를 실현하기위한 공간이다.

3. 사례 연구

제목 : 번호 타워

필요한 수의 최대 후, 다음에서 서

문제 해결 아이디어 :

바닥에서 시작, 첫 번째 작은 삼각형으로 해결 :

모든 작은 삼각형, 숫자 및 경과 최대 값을 계산합니다. 그리고 그들은 계속 사용하려면 다시 기록

一直下去,直到计算到顶部。

 ....

代码如下:

public class dp {
    public static void main(String[] args) {
        int[][] arr = {
                    {7, 0, 0, 0, 0},
                  {3, 8, 0, 0, 0},
                {8, 1, 0, 0, 0},
              {2, 7, 4, 4, 0},
            {4, 5, 2, 6, 5}
        };
        System.out.println(new dp().maxSumNew(arr));
    }

    /**
     * 动态规划
     * @param arr
     * @param
     * @return
     */
    public int maxSumNew(int[][] arr) {
        if (arr == null) {
            return 0;
        }
        int n = arr.length;
        int[][] max = new int[n][n];
        for (int i = n - 1; i >= 0; i--) {
            for (int j = 0; j <= i; j++) {
                if (i == n - 1) {
                    max[n - 1][j] = arr[n - 1][j];
                } else {
                    max[i][j] = Math.max(max[i + 1][j], max[i + 1][j + 1]) + arr[i][j];
                }
            }
        }
        return max[0][0];
    }
}

运行结果:

总结:最优化原理、无后效性和重叠性,有该特性的题目就可以考虑动态规划。

추천

출처www.cnblogs.com/jssj/p/12125631.html