zoukankan      html  css  js  c++  java
  • 【数据结构与算法之美】常见算法的模板

    1.递归

    1.1 代码实现

    	public void recur(int level,int param){
    		//terminator  --》终止条件
    		if(level > MAX_LEVEL){
    			//process result
    			return;
    		}
    
    		//process current logic  --》 当前逻辑处理
    		process(level,param);
    		
    		//drill down           --》 递归到下一个子问题。
    		recur(level:level+1,newParam);
    		
    		//restore current status  --》存储当前状态 -非必须。
     	}
    

    1.2 思维要点

    1.不要人肉递归(最大误区)
    2.找到最近最简方法,将其拆成可重复解决的问题(重复子问题)3.数学归纳法整理
    

    2.回溯法

    2.1 代码实现

    result = []
    def backtrack(路径, 选择列表):
        if 满足结束条件:
            result.add(路径)
            return
    
        for 选择 in 选择列表:
            做选择
            backtrack(路径, 选择列表)
            撤销选择
    

    2.2 思维要点

    回溯法主要是通过递归来实现的。
    1.找到一个可能存在的正确的答案。
    2.在尝试了所有可能的分步方法后宣告该问题没有答案。
    ps:在最坏的情况下,回溯法会导致一个复杂度为指数时间的计算。
    

    3.二分查找

    3.1 代码实现

    	left , right = 0,len = array.length-1;
    	while(left <= right){
    		mid = (left + right) / 2;
    		if(array[mid] == target)
    			return result;
    		else if(array[mid] < target)
    			left = mid + 1;
    		else 
    			right = mid-1;
    	}
    

    3.2 思维要点

    二分查找的前提
    1.目标函数单调性(单调递增或递减)
    2.存在上下界(bounded)
    3.能够通过索引进行访问(index accessible)
    

    4.分治

    4.1 代码实现

    在这里插入图片描述

    4.2 思维要点

    分而治之的思想。将一个大的问题分解成多个重复的子问题。先解决每个子问题,在将子问题求解。而递归只是实现分子的一种手段而已、
    
  • 相关阅读:
    &lt;Android&gt;greenrobot-EventBus,guava-Event Bus的异步实现
    MySQL Study之--MySQL用户及权限管理
    关于Apacheserver的訪问控制
    Jquery改动页面标题title其他JS失效
    P3742 umi的函数
    P3717 [AHOI2017初中组]cover
    P2261 [CQOI2007]余数求和
    P1423 小玉在游泳
    P1888 三角函数
    3295 落单的数 九章算法面试题
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860577.html
Copyright © 2011-2022 走看看