西北工业大学算法理论考试复习

news2025/1/11 12:57:11

😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!💪💪💪

在这里插入图片描述

文章目录

  • 前言
  • 算法理论复习
    • 一、算法定义
    • 二、分治法
    • 三、递归
    • 四、回溯法(深度优先搜索)
    • 五、分支限界法(广度优先搜素)
    • 六、动态规划
    • 七、贪心法

前言


此文章献给正在准备算法考试的学弟学妹,祝你们都能满绩过算法❤️。


算法理论复习


一、算法定义


  • 大O

image-20221120154409435

  • 算法定义

算法是求解问题的一系列计算步骤,用来将输入数据转换成输出结果。

特性:

  • 输入性
  • 输出性
  • 确定性
  • 可行性
  • 有限性

二、分治法


  • 定义

对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决;否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。

  • 步骤
  1. 分解:将问题的实例划分为同一个问题的几个较小的实例,最好拥有同样的规模;
  2. 求解子问题:对这些较小的实例求解(一般使用递归的方法,但在问题规模足够小的时候,有时也会使用一些其他方法)
  3. 合并:如果必要的话,合并这些较小问题的解,以得到原始问题的解.
  • 设计思想

(1)该问题的规模缩小到一定的程度就可以容易地解决。
(2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
(3)利用该问题分解出的子问题的解可以合并为该问题的解。
(4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。


三、递归


  • 定义

**在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。**若调用自身,称之为直接递归。若过程或函数p调用过程或函数q,而q又调用p,称之为间接递归。如果一个递归过程或递归函数中递归调用语句是最后一条执行语句,则称这种递归调用为尾递归。

  • 使用条件

(1)需要解决的问题可以转化为一个或多个子问题来求解,而这些子问题的求解方法与原问题完全相同,只是在数量规模上不同;
(2)递归调用的次数必须是有限的;
(3)必须有结束递归的条件(递归基)来终止递归。


四、回溯法(深度优先搜索)


  • 基本思想

在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点(开始结点)出发搜索解空间树。
(1)首先根结点成为活结点,同时也成为当前的扩展结点。
(2)在当前的扩展结点处,搜索向纵深方向移至一个新结点。这个新结点就成为新的活结点,并成为当前扩展结点。
(3)如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。此时应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。
回溯法以这种方式递归地在解空间中搜索,直至找到所要求的解或解空间中已无活结点为止。

  • 相关概念
  • 一个复杂问题的解决方案是由若干个小的决策步骤组成的决策序列,解决一个问题的所有可能的决策序列构成该问题的解空间。一般用树形式来组织,也称为解空间树或状态空间

  • 应用回溯法求解问题时,首先应该明确问题的解空间。解空间中满足约束条件的决策序列称为可行解(是解空间的子集)。

  • 一般来说,解任何问题都有一个目标,在约束条件下使目标达到最优的可行解称为该问题的最优解

  • 活结点:一个自身已生成但其儿子还没有全部生成的节点称做活结点。

  • 死结点:一个所有儿子已经产生的结点称做死结点。

  • 扩展结点: 是指正在产生孩子结点的结点.

  • 深度优先的问题状态生成法:如果对一个扩展结点R,一旦产生了它的一个儿子C,就把C当做新的扩展结点。在完成对子树C(以C为根的子树)的穷尽搜索之后,将R重新变成扩展结点,继续生成R的下一个儿子(如果存在)。


五、分支限界法(广度优先搜素)


  • 基本思想

每一个结点只有一次机会成为扩展结点。结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。

  • 一般过程

分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。问题的解空间树是表示问题解空间的一棵有序树,常见的有子集树和排列树,在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,那些导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被子加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所求的解或活结点表为空时为止。

  • 分支限界法和回溯法的联系
  • 求解目标:
    回溯法:找出解空间树中满足约束条件的所有解;
    分枝限界法:找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。

  • 搜索方式的不同:
    回溯法:深度优先的方式搜索解空间树;
    分枝限界法:以广度优先或以最小耗费优先的方式搜索解空间树。


六、动态规划


  • 基本思想

将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式

  • 动态规划问题特征
  • 最优性原理
  • 无后效性
  • 有重叠子问题
  • 一般步骤
  1. 分析最优解的性质,并刻画其结构特征。
  2. 分段将原问题分解为若干个相互重叠的子问题;
  3. 建立递归关系,递归地定义最优解(状态转移方程)。
  4. 计算最优值,以自底向上或自顶向下的记忆化方式。
  5. 构造最优解,根据计算最优值时得到的信息构造最优解。
  • 与分治法的联系

与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,但各问题间往往有重叠。分治法对子问题的重叠部分要被重复计算多次。动态规划法将每个子问题只求解一次并保存在表中,下次查表获得解,免去重复计算。


七、贪心法


  • 最优子结构

一个问题的最优解包含其子问题的最优解,则称此问题具有最优子结构性质。

问题的最优子结构性质是该问题可用动态规划算法或贪心法求解的关键特征。

  • 基本思想

把求解的问题分成若干个子问题。 对每一子问题求解,得到子问题的局部最优解。把子问题的解局部最优解合成原来解问题的一个解。

  • 贪心法与动态规划

动态规划算法具有最优子结构特性和子问题重叠特性,通常以自底向上的方式解各子问题;

算法或贪心法求解的关键特征。

  • 基本思想

把求解的问题分成若干个子问题。 对每一子问题求解,得到子问题的局部最优解。把子问题的解局部最优解合成原来解问题的一个解。

  • 贪心法与动态规划

动态规划算法具有最优子结构特性和子问题重叠特性,通常以自底向上的方式解各子问题;

而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云免费SSL证书过期替换

阿里云上有免费的SSL证书,但是好像一个账号全部免费的额度只有20张,一张可以用1年,意思是如果20年后你还需要SSL证书的话,那么你可能就得买了。 我的SSL证书过期了,网站能访问,但是浏览器总是说站点不安全&…

【蓝桥杯冲击国赛计划第7天】模拟和打表 {题目:算式问题、求值、既约分数、天干地支}

文章目录1. 模拟和打表1.1 定义2. 实例「算式问题」题目描述运行限制2.1 简单分析2.2 检查函数2.3 三重化二重3. 实例「求值」题目描述运行限制3.1 简单分析3.2 主函数4. 实例「既约分数」题目描述运行限制4.1 简单分析4.2 辗转相除法2.3 主函数5. 实例「天干地支」题目描述输入…

同花顺_代码解析_技术指标_T、U

本文通过对同花顺中现成代码进行解析,用以了解同花顺相关策略设计的思想 目录 TBR TRIX TRIXFS TWR UDL UOS TBR 新三价率 新三价率:100*上涨家数/(上涨家数下跌家数) MATBR1:TBR的M1日异同移动平均 MATBR2:TBR的M2日异同移动平均 1.指数仍处于下跌状态&a…

Java数据结构 | PriorityQueue详解

目录 一 、PriorityQueue 二、PriorityQueue常用方法介绍 三、 PriorityQueue源码剖析 四:应用:Top-K问题 一 、PriorityQueue 常用接口介绍 上文中我们介绍了优先级队列的模拟实现, Java集合框架中提供了PriorityQueue和PriorityBlocki…

2021 XV6 4:traps

目录 1.RISC-V assenbly 2.Backtrace 3.Alarm 1.RISC-V assenbly 第一个任务是阅读理解,一共有6个问题。 1.Which registers contain arguments to functions? For example, which register holds 13 in mains call to printf? 具体来说就是a0,a1几个…

Docker入门

目录 Docker的作用 Docker的核心概念 Docker安装 镜像命令 镜像下载 查看镜像 搜索镜像 删除镜像 容器命令 创建容器 列出容器 新建并启动容器(最常使用) 守护态运行 启动容器 终止容器 重启容器 进入容器 attach命令 exec命令(最常使用) 退出容器…

【JavaEE】一文掌握 Ajax

🐱‍🏍目录1. AJAX 简介2. 伪造Ajax演示3. jQuery.ajax3.1 简单测试,使用最原始的HttpServletResponse处理3.2 使用ajax动态构建前端表格3.3 登录提示效果小demo4. 练习小demo,实现百度搜索框的动态内容提示5. 总结:1.…

纸牌游戏洗牌发牌排序算法设计

纸牌游戏洗牌发牌排序算法设计 本文提供纸牌游戏设计制作的基础部分,即洗牌,发牌,牌张排序排列显示的算法。 以及游戏开始时间使用时间的显示。我是用简单的C语言编译器MySpringC在安卓手机上编写的。此是游戏的框架,供游戏设计者…

计算机网络4小时速成:网络层,虚电路和数据包服务,ipv4,ABC类地址,地址解析协议ARP,子网掩码,路由选择协议,路由器

计算机网络4小时速成:网络层,虚电路和数据包服务,ipv4,ABC类地址,地址解析协议ARP,子网掩码,路由选择协议,路由器 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,…

关于瑞萨R7 的CANFD切换为经典CAN

首先,R7的CANFD是兼容CAN通讯的,在R7芯片他们公用相同的寄存器,至于发出来的帧是CANFD还是CAN取决于协议的不同。 CANFD是可变速率数据段为可变长度,扩展到64Byte,仲裁段和数据段的速率不相同。CANFD新增了FDF,BRS,ESI。FDF表示是…

牛客_小白月赛_61

传送门 A 如果不是特意防止溢出了,那么需要用long,否则会一直卡 很普通的写法,超了就 1, 最后补上一个 1就行 (所以, 这题我wa了8次, 卡了半个小时,就是因为没开 long ! ! !) package com.csh.A; /*** author :Changersh* date : 2022/11/18*/import java.io.*; i…

day02 springmvc

day02 springmvc 第一章 RESTFul风格交互方式 第一节 RESTFul概述 1. REST的概念 REST:Representational State Transfer,表现层资源状态转移。 定位:互联网软件架构风格倡导者:Roy Thomas Fielding文献:Roy Thom…

Android源码学习---init

init,是linux系统中用户空间的第一个进程,也是Android系统中用户空间的第一个进程。 位于/system/core/init目录下。 分析init int main(int argc, char **argv) { //设置子进程退出的信号处理函数 sigchld_handler act.sa_handler sigchld_handler;…

【博学谷学习记录】超强总结,用心分享丨人工智能 Python面向对象 学习总结之Python与Java的区别

目录前言简述面向对象类对象特性前言 经过学习,对Python面向对象部分有了一定的了解。 总结记录:面向对象上Python与Java的部分区别 简述 从类、对象、特性三个层面来简述其部分区别 面向对象 类 PythonJava定义class ClassName(object):passpubl…

2000-2020年各省固定资本存量数据

2000-2020年各省资本存量数据 1:来源:统计NJ、各省统计NJ 2、时间:2000-2020年 3、包括:30个省 4、数据说明:含原始数据和计算过程及最终结果 4、指标说明: 参考文献: 单豪杰(…

【微服务架构组件之注册中心】注册中心选型-我只选nacos

注册中心的产生是基于用来解耦服务提供者(Provider)与消费者(Consumer)的关系,分布式设计架构下,众多的服务提供者的数量并不是动态不变的,在传统的静态LB的方案中,无法很好感知这种变化; 在分…

[附源码]java毕业设计网上宠物商店

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

进度条——不仅仅是语言层面上的小程序

文章目录\r和\n进度条完整代码\r和\n 在老式键盘上,回车键是这样的形状 但是该键的功能它不仅仅是回车,而是回车换行! 这里需要明白两个概念: 回车:光标移动到当前行的行首 换行:光标移动到当前位置的…

跟艾文学编程《Python基础》Anaconda 安装

作者:艾文,计算机硕士学位,企业内训讲师和金牌面试官,公司资深算法专家,现就职BAT一线大厂。 邮箱:1121025745qq.com 博客:https://edu.csdn.net/lecturer/894?spm1003.2001.3001.4144 内容&am…

原生AJAX

👨‍💻个人主页:微微的猪食小窝 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 微微的猪食小窝 原创 1、AJAX 简介 AJAX 全称为Asynchronous Javascript And XML,就是异步的JS 和 XML. 通过AJAX可以在浏览器中向服务器…