精华内容
下载资源
问答
  • 高中数学基本数学思想与具体解题方法归纳一 数学思想方法函数与方程思想 数形结合思想分类讨论思想化归转化思想 整体思想二 数学...直接法 定义法 参数法 交轨法 几何法 弦中点轨迹求法比较法 基本不等式法 综合法...

    高中数学基本数学思想与具体解题方法归纳

    一  数学思想方法函数与方程思想      数形结合思想   分类讨论思想化归转化思想       整体思想二      数学逻辑方法比较法     综合法   分析法    反证法归纳法    抽象与概括   类比法三 数学具体解题方法代入法   直接法  定义法  参数法  交轨法  几何法  弦中点轨迹求法比较法   基本不等式法   综合法   分析法   放缩法   反证法   换元法构造法   数学归纳法  配方法   判别式法  序轴标根法   向量平行法向量垂直法   同一法   累加法  累乘法   倒序相加法   分组法   公式法错位相减法   裂项法   迭代法  角的变换法   公式的变形及逆用法降幂法   升幂法  “1”的代换法   引入辅助角法   三角函数线法构造对偶式法   构造三角形法   估算法   待定系数法   特殊优先法先选后排法   捆绑法   插空法   间接法   筛选法(排除法)   数形结合法特殊值法   回代法(验证法)   特殊图形法   分类法   运算转换法结构转换法   割补转换法   导数法   象限分析法  补集法   距离法变更主元法   差异分析法   反例法   阅读理解法   信息迁移法类比联想法   抽象概括法   逻辑推理法   等价转化法   根的分布法分离参数法   抽签法   随机数表法  学习更多数学内容请关注

    ad93fdb45917f90cd14228cac74b5777.png

    -END-

    立足双基  夯实基础  突破重点

    展开全文
  • 上节课我们学习的冒泡排序,是让我们的list从小到大进行排列,这次我们的任务是,请对冒泡排序进行一定的修改,加一个参数,让它能够按照我们的定义需要进行从大到小或者从小到大的排序。返回这个排序后的li...

    今天是我们一年一度的“五一劳动节”,首先我代表“雪山凌狐教程”的所有同仁,跟广大的劳动者说一声:你们辛苦了!

    节日归节日,学习永无止境。这节课我们来就上节课学到的经典算法——冒泡排序法来做一点练习题。

    上节课我们学习的冒泡排序法,是让我们的list从小到大进行排列,这次我们的任务是,请对冒泡排序法进行一定的修改,加一个参数,让它能够按照我们的定义需要进行从大到小或者从小到大的排序。返回这个排序后的list。

    下面是我们需要实现的一些例子,从例子中你可以了解到第二个参数的一些定义规则。假定输入的参数没有错误等问题。

    函数调用命令

    返回值

    bubbleSort([37,87,12,3,0],1)

    [0, 3, 12, 37, 87]

    bubbleSort([7,8,123,33,1],2)

    [123, 33, 8, 7, 1]

    bubbleSort([3411,5,32,57,521],1)

    [5, 32, 57, 521, 3411]

    下面是题目py代码,请复制到你的py文件后再编写:

    def bubbleSort(nums):

    # 请修改代码成题目要求的样子

    for i in range(len(nums)-1): # 这个循环负责设置冒泡排序进行的次数

    for j in range(len(nums)-i-1): # j为列表下标

    if nums[j] > nums[j+1]:

    nums[j], nums[j+1] = nums[j+1], nums[j]

    return nums

    # 测试代码

    print("testing bubbleSort for ([37,87,12,3,0],1) result:" + str(bubbleSort([37,87,12,3,0],1)))

    print("testing bubbleSort for ([7,8,123,33,1],2) result:" + str(bubbleSort([7,8,123,33,1],2)))

    print("testing bubbleSort for ([3411,5,32,57,521],1) result:" + str(bubbleSort([3411,5,32,57,521],1)))

    本期参考答案:

    感谢大家的收看,我们下期再见!

    展开全文
  • 利用最小二乘法和梯度下降求解多元线性回归的参数,其中X、Y是待拟合的数据,X是自变量,Y是因变量。 2、解题思路 使用梯度下降来求解。损失函数为:1/2(y - f(x))^2,每进行一次迭代,先求出所有...

    1、题目描述

        利用最小二乘法和梯度下降法求解多元线性回归的参数,其中X、Y是待拟合的数据,X是自变量,Y是因变量。

        

        

    2、解题思路

        使用梯度下降法来求解。损失函数为:1/2(y - f(x))^2 ,每进行一次迭代,先求出所有样本点的平均损失,然后损失函数对各个权重求偏导得到关于每个权重的梯度值,接着使用学习率梯度值更新每个权重。这里的权重初始化不能为0,否则梯度不能更新。代码如下:

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    void LinearRegression() {
    	/*
    		需要拟合的模型为:y = a + bx0 + cx1,其中(a,b,c)是要求的参数
    	*/
    	vector<vector<float>> X({ {1,1},{2,2},{1,3},{1,6} });
    	vector<float> Y({3.5,6.5,5.5,4.0});
    	float learning_rate = 0.01;                             //学习率
    	float a = 0.1, b = 0.1, c = 0.1;                        //权重初始值
    	unsigned int iterator = 100000;                         //迭代次数
    	for (int i = 0; i < iterator; i++) {
    		float gradient_a = 0;
    		float gradient_b = 0;
    		float gradient_c = 0;   
    		for (int j = 0; j < X.size(); j++) {
    			float x0 = X[j][0];
    			float x1 = X[j][1];
    			float y = Y[j];
    
    			//采用的是梯度下降法,需要对所有样本点的梯度求平均值
    			//这里的损失函数为1/2(y - f(x))^2,损失函数对各个参数分别求偏导得到梯度值			
    			gradient_a = gradient_a - (1.0 / X.size()) * (y - (a + b*x0 + c*x1));     
    			gradient_b = gradient_b - (1.0 / X.size()) * (y - (a + b*x0 + c*x1)) * x0;
    			gradient_c = gradient_c - (1.0 / X.size()) * (y - (a + b*x0 + c*x1)) * x1;
    		}		
                    //权重参数的更新
    		a = a - learning_rate * gradient_a;
    		b = b - learning_rate * gradient_b;
    		c = c - learning_rate * gradient_c;
    	}
            //保留两位小数
    	a = (int)(a * 100) / 100.0;
    	b = (int)(b * 100) / 100.0;
    	c = (int)(c * 100) / 100.0;
    	cout << "a:" << a << endl;
    	cout << "b:" << b << endl;
    	cout << "c:" << c << endl;
    }

        这里只是一个二元一次方程的回归,相当于三维空间中的一条直线,对于其更复杂的回归函数拟合的求解方法是类似的。

    展开全文
  • 递归解题思路

    2021-01-24 22:57:03
    文章目录递归设计经验解题思路一:划分(切蛋糕思维)1.1、数组求和问题1.2、翻转字符串解题思路二:递推公式2.1、斐波那契数列2.2、求 n 的阶乘解题思路三:等价转换3.1、求解最大公约数3.2、汉诺塔问题总结 ...


    递归设计经验


    递归作为一种算法,其本身具有一定的抽象性质,有些时候确实难以理解。但是递归算法是有套路可循的。

    通常我们理解的递归就是函数或方法,自身调用自身,一层一层调用,然后依次返回结果。但是 传入什么参数如何调用自身返回什么结果 就是我们要考虑的问题了。

    这个过程可以大致概括以下三个步骤(三步走 OvO):

    • 找重复(找子问题)
      思路一:找到一种划分的方法
      思路二:找到递推公式
      思路三:找等价转换
      这个过程一直是在划分子问题,将父问题的求解转换为求解一系列等价的子问题
    • 找重复的变化量 ——— 不断变化的量作为参数
    • 找参数变化的趋势 —— 设计出口

    总结起来:递归问题

    • 可分解为:直接量 + 小规模子问题
    • 或者分解为:多个小规模子问题

    递归算法的模板:

    public static recursion(Type...params) {
    	// 设计出口
    	if (expression)
    		return params;
    	
    	// 递归调用
    	..............
    
    	// 返回结果
    	return params;
    }
    

    解题思路一:划分法(切蛋糕思维)


    划分法就像我们日常生活中切蛋糕一样,如何把一块蛋糕切成均等的几份小蛋糕块,放在递归算法中,就是如何把原问题切分成多个等价的子问题。

    下面看例子:


    1.1、数组求和问题


    问题描述:设计递归算法,实现求数组中所有元素的和。

    思路:普通解法直接遍历数组求和就可以了,但是我们用递归的思想去解决,这时应该这样想,例如下面这样的,本来我们要求的是 a1 + a2 + a3 + a4 + a5 的和,现在把它切成这样,a1 + (a2 + a3 + a4 + a5),然后依次向下切,最后切到数组的末尾。

    这个过程按照我们的三步走思想:

    • 找重复(划分子问题):把一整个数组求和的问题转换成求多个数组的和,最后相加的问题
    • 找重复的变化量(设计参数):我们发现这个过程中,有个直接量在不停的变化,就是下面图中不断向后移动的竖直的箭头,我们把这个索引作为参数
    • 找参数变化的趋势(设计出口):我们发现这个索引最后会到数组的最后一个下标就停止了,这儿可以作为出口

    在这里插入图片描述
    分析完毕,上代码:

    	public static int sumOfArray(int[] arr, int begin) {
    
            if ((begin + 1) == arr.length)
                return arr[begin];
    
            return arr[begin] + sumOfArray(arr, begin + 1);
        }
    

    1.2、翻转字符串


    问题描述:设计递归算法,将一个字符翻转。
    例如,输入 “abcde” 返回 “edcba”

    不多说上代码,看看能否理解:
    (Tip:和上面的例题正好反过来)

    	public static String reverseStr(String str, int end) {
    
            if (end == 0)
                return "" + str.charAt(end);
    
            return str.charAt(end) + reverseStr(str, end - 1);
        }
    

    解题思路二:递推公式


    我们可以找出问题的求解公式,根据这个递推公式设计递归算法。


    2.1、斐波那契数列

    最为经典的莫过于求解斐波那契数列的第 n 项了。
    问题描述:像 1,1,2,3,5,8,13,21,34…… 这样前两项为 1 ,后面每一项都是它的前两项的和的递增数列,我们称之为 Fibonacci 数列。
    设计递归算法,求解 Fibonacci 数列的第 n 项。

    那么根据我们的三步走战略:

    • 找重复(递推公式):f(n)= f(n - 1)+ f(n - 2),n = 1,2 时,f(n)= 1
    • 找重复的变化量:n 一直在变化
    • 找参数变化的趋势:n 最后减小到 1 或 2 时,返回 1

    上代码:

    	// 1 1 2 3 5 8 13 21 34 .....
        public static int fibonacci(int n) {
            
            if (n == 1 || n == 2)
                return 1;
    
            return fibonacci(n - 1) + fibonacci(n - 2);
        }
    

    2.2、求 n 的阶乘


    问题描述:设计递归算法,求解一个数 n 的阶乘
    Tip:递推公式:f(n)= n * f(n - 1)

    上代码看看能不能看懂:

    	public static int factorial(int n) {
    
            if (n == 1)
                return 1;
    
            return n * factorial(n - 1);
        }
    

    解题思路三:等价转换


    当我们无法使用划分法切分子问题,也无法找出递推公式的时候,不妨看看我们的第三种思路:等价转换 —— 将原问题转换为等价的若干个子问题。


    3.1、求解最大公约数


    先看看一个简单的等价转换问题。

    问题描述:设计递归算法,求解两个数 a 、b 的最大公约数
    思路:我们采用辗转相除法的递归形式求解

    Tip:等价转换:f(a,b)= f(a,a % b)

    可以看看能不能看懂代码:

    	public static int gcd(int a, int b) {
    
            if (b == 0)
                return a;
    
            int n = a % b;  // 取余数
    
            return gcd(b, n);
        }
    

    3.2、汉诺塔问题


    最为经典的莫过于汉诺塔问题了。

    问题描述:该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

    设计递归算法,打印出每一次移动的过程,例如 从 A 移动 编号为 n 的盘子 到 B
    在这里插入图片描述
    乍一看,这一道题,好像没办法划分, 也找不出递推公式,没什么思路。
    用等价转换好像也无法转换。

    但是仔细想想,我们从最简单的情况分析

    • 1 个盘子的时候,直接 from A to C
    • 2 个盘子(从上到下标号:1、2)的时候,先 1 from A to C,然后 2 from A to B,然后 1 from C to A,然后 2 from B to C,最后 1 form A to C。
    • 3 个盘子(标号 1,2,3),1 from A to C,………… 3 from A to C ………… 最后 1 from A to C
      …………
      在这个过程中,我们发现柱子的角色在不断发生变化,我们可以将移动盘子的问题等价转换为柱子的角色变化问题

    划分子问题:

    • 最简单情况:只有一个盘子,这个过程 C 是目标,B 是辅助,A 是来源,from A to C
    • 超过一个盘子时,
      1、首先把 1 - (n - 1)个盘子移动到辅助空间 B 上才能达成最简单情况,这个过程中 B 是目标,C 是辅助,A 是来源,from A to B
      2、完成上一步后,该实现一个最简单情况了,此时 A 上面只有一个盘子(编号为 n),B 上面有 n - 1个盘子,所以 from A to C,此后 A 柱子上没有盘子
      3、完成上一步后,我们发现三个柱子的角色发生了变化,此时 C 是目标,A 是辅助,B 是来源,我们要将 B 上面 1 - (n - 2)个盘子移动到 C 上,from B to C
      …………………………
      4、到了这一步我们终于找出了重复的问题,以及不停变化的直接量,出口条件也明确了

    上代码:

    	public static void HanoiTower(int n, String from, String to, String help) {
            if (n == 1)
                System.out.println("move: " + n + " from " + from + " to " + to);
            else {
                HanoiTower(n - 1, from, help, to);
                System.out.println("move: " + n + " from " + from + " to " + to);
                HanoiTower(n - 1, help, to, from);
            }
    
        }
    

    总结


    到了这一步,我们基本上了解了设计递归算法的三种思路,利用这三种思路能够解决大部分使用递归算法的问题。当然也有一些特例,如果遇到了不妨记录下来,慢慢总结经验。

    展开全文
  • 天天中午 12:15,一起学算法作者 | P.yh来源 | 五分钟学算法往期回顾概论这次再来看一类动态规划问题,序列类动态规划问题,这类动态规划问题较为普遍,分析难度相比之前也略有提升,通常问题的输入参数会涉及数组...
  • 参数法 ……………………………………… 28 反证法 ……………………………………… 32 消去法 ……………………………………… 分析与综合法 ……………………………… 特殊与一般法 ……………………………… 类比...
  • 考研数学解题36计之10 极数的展开与求和的零部件安装 考研数学解题36计之11 解微分方程的两把钥匙“按类求解”和“观察待定” 考研数学解题36计之12 解应用题的基本方法“规律翻译”和“微量平衡分析” 考研...
  • 变化的东西是参数 重复的规模变小是递归的调用 /* 2013c++c3 从我做起振 我做起振兴 做起振兴中 起振兴中华 从“从”开始,每个格子只能向右或向下走,走出“从我做起振兴中华”有多少走 */ /*思考 枚举所有的走...
  • 显然可以用回溯解题,一个一个的分割点尝试如果合法则加入结果集中,由于结果集需要在回溯函数里用到,所以我们可以定义结果集在函数外(当然也可以让结果集作为回溯函数的参数,但是为了函数的简洁我就不这么做...
  • 第七章 参数估计 7.1点估计 点估计的概念 矩估计 eg: 最大似然估计 解题方法: 例题:
  • 逆波兰表达式的求值,最简单...1. 简单的栈就可以过, 除运算直接计算就可以, 向下取余的结果可以继续使用, stack<Integer>就可以; 2. 不需要考虑参数不够的情况,或者数量太多内存太大等情况, 转...
  • 解题思路-leetcode第二十二题:括号生成 题目描述:给出 n 代表生成括号的对数,请你写出一个函数,使其...本题采用回溯,首先定义回溯函数back,参数为字符串S和两个标记l1,l2,函数内部,如果当前字符串长度...
  • 智力激励(创新思维2)

    千次阅读 2015-04-21 21:10:06
    1)应用于TRIZ的解题环节:比如参数确定,打开思路,防止思维定势等。2)是一种集体发明创造方法,包括集思广益,集中思考,头脑风暴,头脑震荡,互激设想法等。智力碰撞。通过群体思考,群体设想,互相激励...
  • 问题描述:Merge k sorted linked lists and return it as one ...提供两种方法:分治:我们发现给定函数传入的参数为一个链表组成的数组,把合并所有数组的任务分解为多个子任务,每次合并一半的链表得到两...
  • 例1:解答:例2:解答:2、设定主元方法介绍当题目中给出2个字母,却只给出1个方程,或者给出3个字母,却只给出2个方程时,我们无法具体求出每个字母的值.因此,可以设定其中一个字母作为主元,用含主元的代数式...
  • # 递归,将节点所在的层数作为参数,层数与数组的位置一一对应 def levelOrder(self, root): """ :type root: Node :rtype: List[List[int]] """ self.res ...
  • 坐标上升

    2019-08-29 16:47:35
    一、要解决哪类问题 假设需要求解的优化问题包含多个变量...二、算法的解题思路 算法采用迭代的思想,每次固定其它参数,调整一个ai,求出使得W最大的ai。再换一个ai(即换一个方向进行调整),直到算法收敛。 ...
  • 问题:有个国际象棋游戏程序使用了方法: ...分析:白盒测试来路径测量代码的结构,测量每个逻辑分支,用黑盒测试中的边界来测试上下参数最大值,最大值加1,最小值,  最小值减1.考虑边界,以及输入数据的有效性
  • 1.回溯法解题的通常步骤: 针对所给的问题,定义问题的解空间 确定易于搜索的解空间结构 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索 2.基本的回溯策略【也可以说是编程框架】 a.递归回溯 ...
  • 摘 要:圆锥曲线中求参数范围的问题是一类很常见又很重要的问题,是历年高考中的重点题型.此类问题往往涉及化归转化,数形结合,函数与方程等思想方法.加强此类问题的教学有利于提升学生的综合解题能力,对培养...
  • 今天再来介绍一种新的解题思路: 递归。 它可以看成是对穷举的一种补充。它的思路是在不方便穷举所有的可能时,通过设置特定的函数,在该函数内部反复地调用自身并输入不同的参数,以达到遍历所有可能性的目的。...
  • 回溯(Backtracking)

    2016-03-27 13:02:40
    回溯的基本思想剪枝函数解题步骤 1.定义问题的解空间(树状结构) 2.确定易于搜索的解空间结构 3.使用递归或者迭代的方法搜索符合要求的解空间,并使用约束条件和剪枝函数避免无效的搜索 算法框架递归算法 ...
  • MATLAB三次样条插值之三弯矩首先说这个程序并不完善,为了实现通用(1,2,…,n)格式解题,以及为调用追赶程序,没有针对节点数在三个以下的情况进行分类讨论。希望能有朋友给出更好的方法。首先,通过函数...
  • 输入:待求解参数 double类型输出:输出参数的立方根,保留一位小数样例输入:216样例输出:6.0二、解题报告本题要求一个数的立方根的近似值,精确到小数点后的一位。这里使用 牛顿迭代 求近似值。牛顿迭代,又...
  • 下面是一种高效计算权重参数的方法——误差反向传播 计算图求解 太郎在超市买了2个苹果、3个橘子。其中,苹果每个100日元, 橘子每个150日元。消费税是10%,请计算支付金额 综上,用计算图解题的情况下,需要按...
  • 题目描述 输入一个复杂链表(每个节点中有节点值,...这次试用优化之后的暴力法解题。 首先 遍历一次原链表,这次只复制next域。同时将原链表与复制链表中节点的一一对应关系,存储在map中。比如原链表中的节点为...
  • 解题思路 哈希法: 这里两次用到字典的get方法,第一个get(num, 0) : 第二个max(nums_dict, key=nums_dict.get),首先遍历可迭代对象nums_dict,然后把返回值作为参数传递给key对应的函数nums_dict.get,将函数的...

空空如也

空空如也

1 2 3 4 5 6
收藏数 102
精华内容 40
关键字:

参数法解题