【java算法】中缀转后缀/递归/时间复杂度

递归

简单递归分析

输出为2 3 4
在这里插入图片描述

输出为2
在这里插入图片描述

递归解决问题应用
在这里插入图片描述

递归遵守的重要原则
在这里插入图片描述

迷宫问题

在这里插入图片描述
代码实现

package digui;

public class MiGong {
    public static void main(String[] args) {
        //先创建一个二维数组模拟迷宫
        //地图声明
        int[][] map = new int[8][7];
        //使用1表示
        //上下全部置为1
        for (int i = 0; i < 7; i++) {
            map[0][i] = 1;
            map[7][i] = 1;
        }

        //左右全部置为1
        for (int i = 0; i < 8; i++) {
            map[i][0] = 1;
            map[i][6] = 1;
        }
        //设置挡板 1表示
        map[3][1] = 1;
        map[3][2] = 1;
        //输出地图
        System.out.println("地图的情况:");
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 7; j++) {
                System.out.printf(map[i][j]+" ");
            }
            System.out.println();
        }

        //使用递归回溯给小球找路
        setWay(map,1,1);

        //输出新地图 小球走过 并标识过的递归
        System.out.println("小球走过 并标识过的地图情况:");
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 7; j++) {
                System.out.printf(map[i][j]+" ");
            }
            System.out.println();
        }
    }

    //使用递归回溯来给小球找路
    //1.map 表示地图
    //2.i j表示从地图哪个为止开始出发
    //3.如果小球能到map[6][5]为止 则说明通路找到
    //4.约定 当map[i][j]为0表示该点没有走过;2表示路可以走;3表示该点已经走过 但是走不通
    //5.在走迷宫时 需要确定一个策略:下 右 上 左,如果该点走不通 再回溯
    /**
     *
     * @param map 表示地图
     * @param i 从哪个位置开始找
     * @param j
     * @return 如果找到通路 则返回true
     */
    public static boolean setWay(int[][] map,int i,int j){
        if (map[6][5] == 2){//通路已经找到ok
            return true;
        }else {
            if (map[i][j] == 0){//如果当前这个点还没走过
                //按照策略 下 有 上 左 走
                map[i][j] = 2;//假定该点是可以走通
                if (setWay(map,i+1,j)){
                    //向下走
                    return true;
                }else if (setWay(map,i,j+1)){
                    //向右走
                    return  true;
                }else if (setWay(map,i-1,j)){
                    //向上走
                    return true;
                }else if (setWay(map,i,j-1)){
                    //向左走
                    return true;
                }else {
                    //说明该点是走不通 死路
                    map[i][j] = 3;
                    return false;
                }
            }else {
                //如果map[i][j] != 0 可能是1 2 3
                return false;
            }
        }
    }
}

在这里插入图片描述

若新增挡板map[2][2]则输出
在这里插入图片描述

迷宫问题最短路径的引入

改策略为上右下左
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八皇后问题

思路分析
在这里插入图片描述

时间复杂度

度量程序执行时间的两种方法
在这里插入图片描述

时间频度
在这里插入图片描述

简化时间复杂度式

忽略常数项
在这里插入图片描述

忽略低次项
在这里插入图片描述

忽略系数(限定条件
在这里插入图片描述

时间复杂度的计算

在这里插入图片描述

常见的时间复杂度

在这里插入图片描述

常数阶O(1)
在这里插入图片描述

对数阶O(log2n)
在这里插入图片描述

线性阶O(n)
在这里插入图片描述

线性对数阶O(nlogN)
在这里插入图片描述

平方阶O(n2 )
在这里插入图片描述

立方阶O(n3) K次方阶O(nk)
在这里插入图片描述

平均时间复杂度和最坏时间复杂度

在这里插入图片描述

空间复杂度

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值