精华内容
下载资源
问答
  • 以共射放大电路为例,分析步骤如下:1- 分析各个元件作用2- 理解放大电路放大原理3- 分析计算电路静态工作点4- 理解静态工作点设置目的和方法,先静态再动态C1 C2 为耦合电容,起交流信号传递作用,将直流...

    以共射放大电路为例,分析步骤如下:

    1- 分析各个元件的作用

    2- 理解放大电路的放大原理

    3- 分析计算电路的静态工作点

    4- 理解静态工作点的设置目的和方法,先静态再动态

    3c8d1a31c4972e03ce13c0a93ab141ef.png

    C1 C2 为耦合电容,起交流信号传递的作用,将直流分量隔离,交流信号从前级传递到后级;

    R1 R2 为直流偏置电阻,电路要工作,电源一定要是直流电源,所以叫直流偏置;三极管的三种工作状态“截止、放大、饱和”由直流偏置决定,上图由R1 R2电阻决定。

    Uce 电压接近电源电压VCC,截止状态,三极管基本不工作,Ic电流基本为0;

    Uce 电压接近0V,饱和状态,Ic达到最大值,Ib增大Ic也不能再增大了因为饱和了;

    除上述两种状态就是第三种放大状态,Ic大小受到Ib控制,一般Uce接近VCC的一半。

    设置一半解释

    这是为了使信号正负能有对称的变化空间,在没有信号输入时,Uce为电源的一半,作为一条水平线,作为参考点;

    当输入信号增大,则Ib增大,Ic电流增大,则电阻R2的电压U2=Ic&TImes;R2会随之增大,Uce=VCC-U2,会变小。U2最大理论上能达到等于VCC,则Uce最小会达到0V,这是说,在输入信增加时,Uce最大变化是从1/2的VCC变化到0V.

    当输入信号减小,则Ib减小,Ic电流减小,则电阻R2的电压U2=Ic&TImes;R2会随之减小,Uce=VCC-U2,会变大。在输入信减小时,Uce最大变化是从1/2的VCC变化到VCC。这样,在输入信号一定范围内发生正负变化时,Uce以1/2VCC为准的话就有一个对称的正负变化范围,所以一般图1静态工作点的设置为Uce接近于电源电压的一半。

    如何设置

    小功率管:Ic为零点几毫安到几个毫安;

    中功率管:Ic为几个毫安到几十毫安;

    大功率管:Ic为几十毫安到几安;

    假设Ic为2mA,R2=VCC/2/2mA=3K,Ib由β=100~400,则R1=(VCC-0.7)/Ib=56K;

    实际上管子的放大倍数可能远远大于100,同时温度会影响Ic的大小,按照上面计算可能处于饱和状态,故上述电路稳定性差,实际使用较少,改成如下小结描述的分压式偏置电路,分析计算与实际测量会更加吻合。

    -END-

    ﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    文章若有帮助,或点赞分享转载收藏,都是持续更新的动力!

    展开全文
  • 目录1动态规划思想2适用场景3例题分析3.1示例1:42.接雨水 1动态规划思想 2适用场景 3例题分析 3.1示例1:42.接雨水 题目描述 给定 n 个非负整数表示每个宽度为 1 柱子高度图,计算按此排列柱子,下雨之后能接...

    1动态规划思想

    动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题。
    动态规划的过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。

    2适用场景

    动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。

    • 最优化原理:假设问题的最优解所包括的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。
    • 无后效性:即某阶段状态一旦确定。就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响曾经的状态。仅仅与当前状态有关。
    • 有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到(该性质并非动态规划适用的必要条件,可是假设没有这条性质。动态规划算法同其它算法相比就不具备优势)。

    3动态规划的三大基本要素

    动态规划简单来说就是,利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。下面我们先来讲下做动态规划题很重要的三大基本要素:

    • 确定状态和保存状态变量
      将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。最简单的就是用数组来保存当前的每一个状态,这个状态就是每个子问题的决策。
    • 确定决策并写出状态转移方程
      因为决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来导出本阶段的状态。所以如果确定了决策,状态转移方程也就可写出。但事实上常常是反过来做,根据相邻两个阶段的状态之间的关系来确定决策方法和状态转移方程。
    • 确定边界条件
      确定边界条件其实就是跟递归的终止条件是类似的。给出的状态转移方程是一个递推式,需要一个递推的终止条件或边界条件。

    4解题步骤

    一般,只要解决问题的阶段、状态和状态转移决策确定了,就可以写出状态转移方程(包括边界条件)。
    根据动态规划的三大基本要素可以设计解题步骤如下:

    • 状态定义: 每个状态的决策,存放每个状态的变量,
    • 状态转移方程: 当前状态与上一个状态之间的关系
    • 初始状态: 初始的状态或者边界条件

    5例题分析

    5.1斐波拉契数列

    斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
    斐波那契数列以如下被以递推的方法定义:
    F(1)=1F(2)=1,F(n)=F(n1)+F(n2)n3nNF(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N^*)

    5.1.1递归法求解

    由上篇文章递归算法递归算法详解——递归算法的三要素以及例题分析
    .
    可以写出递归形式的求解为

    class Solution {
        private final int model = 1000000007;
        public int fib(int n) {
            if (n < 2){
                return n;
            }
            return ((fib(n - 1) % model + fib(n - 2) % model )) % model;
        }
    }
    

    答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。防止溢出。

    若用递归法提交答案后可以看出会超出时间限制。
    在这里插入图片描述
    分析可以看出,在递归时会重复计算,如下所示,以F(6)为例:
    在这里插入图片描述
    复杂度分析

    • 时间复杂度分析: O(n)O(n).。最大递归次数是nn
    • 空间复杂度分析: O(1)O(1)。使用常数大小的额外空间。

    5.1.2动态规划求解

    • 状态定义:dpdp 为一维数组,其中 dp[i]dp[i] 的值代表 斐波那契数列第 ii 个数字 。
    • 转移方程: dp[i+1]=dp[i]+dp[i1]dp[i + 1] = dp[i] + dp[i - 1],即对应数列定义 f(n+1)=f(n)+f(n1)f(n + 1) = f(n) + f(n - 1)
    • 初始状态: dp[0]=0,dp[1]=1dp[0]=0, dp[1] = 1 ,即初始化前两个数字; 返回值: dp[n]dp[n] ,即斐波那契数列的第 nn 个数字。

    空间复杂度优化
    若新建长度为 nndpdp 列表,则空间复杂度为 O(N)O(N)

    由于 dpdp 列表第 ii 项只与第 i1i−1 和第 i2i-2 项有关,因此只需要初始化三个整形变量 sum,a,bsum, a, b ,利用辅助变量 sumsum 使 a,ba, b 两数字交替前进即可 (具体实现见代码) 。
    节省了 dpdp 列表空间,因此空间复杂度降至 O(1)O(1)

    class Solution {
        public int fib(int n) {
            int a = 0, b = 1, sum;
            for(int i = 0; i < n; i++){
                sum = (a + b) % 1000000007;
                a = b;
                b = sum;
            }
            return a;
        }
    }
    

    复杂度分析

    • 时间复杂度分析: O(n)O(n).。最大循环次数是nn
    • 空间复杂度分析: O(1)O(1)。使用常数大小的额外空间。

    5.2剑指offer 42 连续子数组的最大和

    题目描述
    输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。

    要求时间复杂度为O(n)O(n)
    示例1:

    输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
    输出: 6
    解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

    动态规划解析:

    • 状态定义: 设动态规划列表 dpdpdp[i]dp[i] 代表以元素 nums[i]nums[i]为结尾的连续子数组最大和。
      \qquad为何定义最大和 dp[i]dp[i] 中必须包含元素 nums[i]nums[i] :保证 dp[i]dp[i] 递推到 dp[i+1]dp[i+1] 的正确性;如果不包含nums[i]nums[i] ,递推时则不满足题目的 连续子数组 要求。

    • 转移方程:dp[i1]0dp[i-1] \leq 0,说明 dp[i1]dp[i - 1]dp[i]dp[i] 产生负贡献,即 dp[i1]+nums[i]dp[i-1] + nums[i] 还不如 nums[i]nums[i] 本身大。
      \qquaddp[i1]>0dp[i - 1] > 0 时:执行$ dp[i] = dp[i-1] + nums[i]$ ;
      \qquaddp[i1]0dp[i - 1] \leq 0 时:执行 dp[i]=nums[i]dp[i] = nums[i]

    • 初始状态: dp[0]=nums[0]dp[0] = nums[0],即以nums[0]nums[0] 结尾的连续子数组最大和为 nums[0]nums[0]

    • 返回值: 返回 dpdp 列表中的最大值,代表全局最大值。

    class Solution {
        public int maxSubArray(int[] nums) {
            int res = nums[0];
            for(int i = 1; i < nums.length; i++) {
                nums[i] += Math.max(nums[i - 1], 0);
                res = Math.max(res, nums[i]);
            }
            return res;
        }
    }
    

    复杂度分析

    • 时间复杂度 O(N)O(N) : 线性遍历数组 numsnums 即可获得结果,使用 O(N)O(N) 时间。
    • 空间复杂度 O(1)O(1) : 使用常数大小的额外空间。

    3.1示例1:42.接雨水

    题目描述
    给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
    在这里插入图片描述
    上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
    输入输出描述
    输入: [0,1,0,2,1,0,1,3,2,1,2,1]
    输出: 6
    图解模型
    在这里插入图片描述
    直观思想

    暴力方法中,我们仅仅为了找到最大值每次都要向左和向右扫描一次。但是我们可以提前存储这个值。因此,可以通过动态编程解决。
    算法流程

    • 找到数组从下标ii到最左端最高的条形块高度left_max
    • 找到数组从下表ii到最右端最高的条形块高度right_max
    • 扫描数组height并更新答案:
      \quad累加min(max_left[i], max_right[i]) - height[i]到ans上

    代码实现

        public int trap(int[] height) {
            int len = height.length;
            if (len < 2) return 0;
            int ans = 0;
            int[] max_left = new int[len];
            int[] max_right = new int[len];
            max_left[0] = height[0];
            for (int i = 1; i < len; i++) {
                max_left[i] = Math.max(height[i], max_left[i - 1]);
            }
            max_right[len - 1] = height[len - 1];
            for (int i = len - 2; i >= 0; i--) {
                max_right[i] = Math.max(height[i], max_right[i + 1]);
            }
            for (int i = 1; i < len - 1; i++) {
                ans += Math.min(max_right[i], max_left[i]) - height[i];
            }
            return ans;
        }
    

    复杂度分析:

    • 时间复杂度:O(n)O(n)。储存最大高度数组需要两次遍历,计算出ans结果遍历一次。
    • 空间复杂度:O(n)O(n)。使用2个n数组存放left_max和right_max数组。
    展开全文
  • 二、分析动态规划解题步骤包含四个部分 (1)部分一:确定状态 (1.1)最后一步 (1.2)子问题 (1.3)递归解法 (2)部分二:转移方程 (3)部分:初始条件和边界情况 (4)第四...

    一、题目:

    输入:

        第一行:硬币面值数组a

        第二行:需组成的金额数m

    输出:

        组成金额m所需的最少硬币数

    例如:

    输入:

    [1,2,5]

    11

    输出:
    3

    二、分析:动态规划解题步骤包含四个部分

    (1)部分一:确定状态

    (1.1)最后一步

    (1.2)子问题

    (1.3)递归解法

    (2)部分二:转移方程

    (3)部分三:初始条件和边界情况

    (4)第四部分:计算顺序(先计算每次计算都会用到的部分)

    (5)小结

    三、代码

    import java.util.Scanner;
    
    public class Main {
    	/*  
    测试数据
    
    	 * */
    	static int[] a = new int[3];//存放硬币面值(假设有三种面值)
    	static int[] dp; //dp[i]组成金额i所需的硬币数(如果无法组成金额i,则设置为无穷)
    	static int m;//组成的金额
    	public static void main(String[] args){
    		//1.输入相关数据
    		Scanner sc = new Scanner(System.in);
    		for(int i=0;i<3;i++) {
    			a[i] = sc.nextInt();
    		}
    		m = sc.nextInt();
    		dp = new int[m+1]; //金额0~m
    		
    		//2.获取dp数组的值
    		dp[0]=0;//设置初值
    		getDp();
    		
    		//3.输出组成金额m所需的硬币数
    		System.out.println(dp[m]);
    	}
    	private static void getDp() {
    		for(int i=1;i<=m;i++) {//dp[i],组成金额i所需的硬币数
    			dp[i] = Integer.MAX_VALUE;//初始化该位置的值
    			for(int j=0;j<a.length;j++) {//可选的硬币面值
    				if(i>=a[j] && dp[i-a[j]]!=Integer.MAX_VALUE) {//关键!Integer.MAX_VALUE+1会越界,故排除这种情况;当前的金额数i应>=当前的硬币面值
    					dp[i] = Math.min(dp[i-a[j]]+1,dp[i]);//最后dp[i]中存放了所需的最少硬币数。dp[i-a[j]]+1:因为用了硬币a[j],所以用的硬币数+1
    				}
    			}
    		}
    		
    	}
    	
    }
    	
    
    

     

     

     

    展开全文
  • 如下一组月度采购数据:现在想对这组数据进行可视化分析,于是建立了一个折线图,效果如下:我们发现,因为这个项目数据大小不在同一个量级,所以下方两个线图看上去似乎没有任何波动。要怎么解决这个问题?最...
    e0c06df5efba2f07afd358d662514969.png

    如下一组月度采购数据:

    be9dc3366ef44008abf053ddbc2b53cd.png

    现在想对这组数据进行可视化分析,于是建立了一个折线图,效果如下:

    d17f8d013b7d63ffc22c581f7f37c22c.png

    我们发现,因为这三个项目的数据大小不在同一个量级,所以下方的两个线图看上去似乎没有任何波动。

    要怎么解决这个问题?

    最简单的,就是对这3个项目分别建立一个折线图。但如果不想那么复杂,希望在一张图上展示呢?

    此时,不妨试试动态图表,效果如下:

    e23fffa0ffb9084a6df3a109eeaf6a48.gif

    下拉选择某一项目,便展示此项目的趋势图,这样便实现了同一张表展示三个项目的目的。

    制作这种动态图表并不难,如下演示下具体制作步骤。

    1、设置下拉菜单

    数据有效性-序列来设置简单的下拉菜单:

    adb860f70b407e51923ab19d730a2446.gif

    2、添加辅助数据

    取一行用于添加辅助数据:

    da00210c502a04244d03c9a2418d5cd5.gif

    在C7单元格输入公式:

    =OFFSET($B$2,MATCH($B$10,$B$3:$B$5,0),MATCH(C2,$C$2:$N$2,0))

    将公式拖拉复制到N7单元格即可。

    要理解这个公式,需要掌握OFFSETMATCH函数的基本用法,可以自行学习。

    3、添加图表

    选中辅助行数据,插入折线图:

    32b2bee20a26d593d25cc010b1570e61.gif

    接下来可以对图表进行一些格式设置、美化等操作,这里不做展开。

    图表添加后,通过下拉图表选择下的选项,即可展示不同项目的趋势图。

    e23fffa0ffb9084a6df3a109eeaf6a48.gif

    这个方法的难点在于辅助数据的公式设置,这个需要根据实际情况变通使用。实际上,OFFSET和MATCH函数的配合使用具有非常多的实际用途,值得重点掌握学习。

    关注Excel数据科学,每天学一点Excel,让升职加薪更近一步!

    5a66fb28f149baa4283d737a2f77c773.gif
    展开全文
  • 动态规划4个步骤 举个列子:面值为2,5,7硬币,组装27块钱,最少需要多少枚? 第一步:确定状态:什么是状态,简单讲就是要确定一个数组,数组每个元素f[i]就是代表一个状态,而且这个状态定义来源于整个...
  • JDK动态代理基于拦截器和反射来实现,...1、使用JDK动态代理大步骤: 通过实现InvocationHandler接口来自定义自己InvocationHandler; 通过Proxy.getProxyClass获得动态代理类; 通过反射机制获得代理类构造
  • 二、设计动态规划法的步骤 动态规划问题特征 矩阵连乘积问题 分析最优解结构 分析最优解结构 动态规划算法基本要素 最长公共子序列 最大子段和 ¢给定由n个整数...
  • 掌握动态规划算法基本思想及适用条件,掌握动态规划算法设计步骤和具体实现。 二、实验所用仪器及环境 Windows 7 以上操作系统,PC机,codeblocks环境 、实验原理: 算法总体思想:动态规划算法与分治法类似,...
  • 算法设计与分析章复习 一、学习要点 理解动态规划算法概念。 掌握动态规划算法基本要素 (1)最优子结构性质 (2)重叠子问题性质 掌握设计动态规划算法的步骤。 (1)找出最优解性质,并刻划其结构特征。 ...
  • Linux下移植GPS应用程序之常见问题的分析与解决方法之一 问题一:GPS应用程序启动不起来 原因: 1.GPS数据路径不对; 2.动态链接库是否正确,包括大小与版本; 解决办法(步骤和方法): 1.手机中GPS...
  • 当程序使用一个还未被加载到内存类时,JVM会通过加载、连接、初始化步骤将该类进行初始化。类加载指是将类class文件读入内存,并为之创建一个java.lang.Class对象。 (1).CLASS类 Class类也是类一...
  • 二、总体思路:根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找问题与小问题递推关系式、填表、寻找解组成)找出01背包问题最优解以及解组成,然后编写代码实现;...
  • 五分治法复杂性分析 六可使用分治法求解一些经典问题 七依据分治法设计程序时思维过程 五常用算法之二动态规划算法 一基本概念 二基本思想与策略 适用情况 四求解基本步骤 五算法...
  • 在文章[LeetCode]动态规划及LeetCode题解分析中,Jungle介绍到求解动态规划类问题,一般分为三个步骤,这里做个简单回顾: 动态规划是利用子问题解推导出...动态规划解题包括三大步骤: (1)明确数组元素代表...
  • 先建立一个大的容器 写出头部 背景 本体分成部分 分别写柱形图 地图 折线图 html中代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title...
  • 算法设计与分析(第版)知识点总结 算法思想:分治法,贪心算法,动态规划算法,棋盘覆盖 基础编程:递归,合并排序,线性时间选择(第k小元素),活动安排问题 (包括算法设计步骤) 证明题型:最长公共子序列,矩阵...
  • 分治算法介绍 分治法是一种很重要算法。字面上解释是“分而治之”,就是把一个复杂问题分成两个或更多相同或相似子问题,再把子问题分成更小子问题……直到最后子问题...分治法在每层递归上都有个.
  • 选择结构信息等级 --> 根据文件大小选择是否“高速模式” --> 点击“浏览”选择要分析的文件 --> 分析完毕后选中结构树中某项 --> 查看数据区对应该项的字节数据(或通过滚动条查看某位置字节数据) 注意事项: 1、...
  • 关于python爬虫的分析

    2020-12-10 22:08:59
    大的提升了系统开发效率,有兴趣朋友可以尝试一下。  一个成功爬虫需要对应一个标准化网站,爬虫主要是为了方便我们获取数据,如果目标系统开发不规范,无规则,很难用...
  • 动态规划

    2019-05-03 20:45:32
    目录 一.思想 二.框架 .基本步骤 四.例题分析 1.数塔 2.超级楼梯 3.找零钱 4.n个矩阵连乘 5.资源分配问题 ...6.切木棍(这个是老师布置作业!...一....动态规划思想实质是分治思想和解决冗余。 与...
  • 二、分析 打印机功能实现依赖于墨盒和纸张 步骤: 定义墨盒和纸张接口标准 使用接口标准开发打印机 组装打印机 运行打印机 、代码 cn.printer.Ink package cn.printer; /** * 墨盒接口 * @author ...
  • 动态规划算法解题思路

    千次阅读 2020-09-14 09:42:55
    在做动态规划类题目时最大感觉就是能够分析出这道题目需要用动态规划算法来解,却没有办法构建出解题步骤,看到别人的分析时候又感觉代码很简单但是自己却想不出。 其实这还是没有理解到动态规划算法基本思想。 ...
  • 动态规划的三大步骤: 参考文章:~ 作业一: 实验一: 实验二: 写在最后: 算法的学习有两个困难的地方: 算法是一门很奇妙的课程,做算法需要静下心来去坚持,只有那样才能发现其中的乐趣与美妙,才会有所收获,...
  • 本章介绍了设计和分析高效算法的三种重要技术之一的动态规划,书中列举了四个常见问题,分析如何采用动态规划方法进行解决。 基本概念 动态规划通常应用于最优化问题,此类问题可能包含多个可行解。每个解有一个值,...
  • Android 上百实例源码分析以及开源分析 集合打包4

    千次下载 热门讨论 2012-07-10 21:54:03
    3、 源码分析之前,需要认真学习一下JadeAndroid编程(有聊天程序源码下载,都在下载包中),编译源码,需要到google 中申请 map api key,不过由于神奇国度制约原因,申请连接网站无法访问,需要通过...
  • 目录第一章 算法引言第二章 算法分析的数学基础算法复杂度的分析的数学基础master定理第章 分治法第四章 动态规划第五章 贪心算法第六章 平摊分析第七章 最大流与最小割第八章 搜索第九章 字符串附录 经典算法总结...
  • 实验六 实验6.1 动态主机配置协议(DHCP) 本机:3-E 实验目的: 掌握DHCP报文格式 掌握DHCP工作原理 ...各主机打开协议分析器,进入相应网络结构并验证网络拓扑正确性,如果通过拓扑验证,关闭协议分

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 369
精华内容 147
关键字:

动态分析的三大步骤