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 思维要点

    分而治之的思想。将一个大的问题分解成多个重复的子问题。先解决每个子问题,在将子问题求解。而递归只是实现分子的一种手段而已、
    
  • 相关阅读:
    【剑指offer】推断二叉树平衡
    14.怎样自学Struts2之Struts2类型转换[视频]
    【JS】怎样同一时候处理多个window.onload事件
    Template-Layui:Layui
    网站模板-AdminLTE:AdminLTE
    Template-网站模板:目录
    Template-网站模板:百科
    架构-层-层模型:七层模型
    建筑学-建筑结构类型:建筑结构类型
    架构-分层体系结构:分层体系结构
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860577.html
Copyright © 2011-2022 走看看