Java数据结构和算法-动态规划

动态规划算法:

动态规划算法通常基于一个递推公式及一个或多个初始状态。当前子问题的解将由上一次子问题的解推出。使用动态规划来解题只需要多项式时间复杂度,因此它比回溯法、暴力法等要快许多。

例子:最长公共子序列问题

String str1="androdid"; String str2="random";

最长公共子序列:ando,只考虑顺序不考虑中间是否间隔,不同于公共字符串and。

该问题的递归式子可以写成:

              

注意以下代码求最长公共子序列问题,矩阵第一行和第一列初始化,其他由递归公式生成。

最长公共子序列问题Java实现:

package com.algorithm.lcs;

/**
 * 动态规划--最长公共子序列
 */
public class LCS {
    public static void main(String[] args) {
        String str1="androdid";
        String str2="random";

        findLCS(str1,str2);
    }

    private static void findLCS(String str1, String str2) {
        int m=str1.length();
        int n=str2.length();
        char[] chars1=str1.toCharArray();
        char[] chars2=str2.toCharArray();
        int[][] dp=new int[m][n];


        for(int i=0;i

 

你可能感兴趣的:(Java数据结构和算法-动态规划)