计算机系列之算法分析与设计

21、算法分析与设计

算法是对特定问题求解步骤的一种描述。它是指令的有限序列,其中每一条指令标识一个或多个操作。

它具有有穷性、确定性(含义确定、输入输出确定,相同输入相同输出;执行路径唯一)、可行性、输入(另零个或多个)、输出(零个或多个)五个特性。

算法的时间复杂度分析:主要分析算法的运行时间,即算法执行所需要的基本操作数。

在这里插入图片描述

递归:是指子程序或函数直接调用自己活通过一系列调用语句间接调用自己。

在这里插入图片描述

T(n) = 8T(n/2) + n2 则:

T(n) = 8 * (8 * T(n/2/2) + (n/2)2 ) + n2

​ = 82T(n/4) + 2n2+ n2

​ = 82 (8 * T(n/4/2) + (n/4)2 ) + 2n2 + n2

​ = 83T(n/8) + 4n2 + 2n2+ n2

​ =8nT(n/(2n) + 2n-1n2 + 2n-2n2 + … + 21n2+ 20n2

可以看到,肯定是远远大于 n2,所以时间复杂度是 n3

n 足够大,则 X 最大 为 63.

所以答案为:D、C。复杂度为 n2,最大值为63.

1、分治法:分组且子问题相同且独立,最后合并。递归法。

◆分治法的设计思想是将一个难以直接解决的大问题分解成一些规模较小的相同问题,以便各个击破,分而治之。如果规模为n的问题可分解成k个子问题1<k≤n,这些子问题互相独立且与原问题相同。分治法产生的子问题往往是原问题的较小模式,这就为递归技术提供了方便。
◆一般来说,分治算法在每一层递归上都有3 个步骤。
(1)分解。将原问题分解成一系列子问题。
(2)求解。递归地求解各子问题。若子问题足够小则直接求解
(3)合并。将子问题的解合并成原问题的解。

凡是涉及到分组解决的都是分治法,且分组时分为的问题相同。
例如归并排序算法完全依照上述分治算法的3 个步骤进行。
(1)分解。将n 个元素分成各含n/2 个元素的子序列,
(2)求解。用归并排序对两个子序列递归地排序。
(3)合并。合并两个已经排好序的子序列以得到排序结果。

2、动态规划法:分组且子问题可能相同、可能独立,记录每个子问题的答案,寻找全局最优(最大、最小等),递归法。一定能得到全局最优。

◆动态规划算法与分治法类似,其**基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。**与分治法不同的是,适合用动态规划法求解的问题,**经分解得到的子问题往往不是独立的。**若用分治法来解这类问题,则相同的子问题会被求解多次,以至于最后解决原问题需要耗费指数级时间。

◆然而,不同子问题的数目常常只有多项式量级。如果能够保存已解决的子问题的答案,在需要时再找出已求得的答案,这样就可以避免大量的重复计算,从而得到多项式时间的算法。为了达到这个目的,可以**用一个表来记录所有已解决的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。**这就是动态规划法的基本思路。

◆**动态规划算法通常用于求解具有某种最优性质的问题。**在这类问题中,可能会有许多可行解,每个解都对应于一个值,我们希望找到具有最优值(最大值或最小值)的那个解。当然,最优解可能会有多个,动态规划算法能找出其中的一个最优解。设计一个动态规划算法,通常按照以下几个步骤进行。

(1)找出最优解的性质,并刻画其结构特征。
(2)递归地定义最优解的值。
(3)以自底向上的方式计算出最优值。
(4)根据计算最优值时得到的信息,构造一个最优解。
◆步骤(1)~(3)是动态规划算法的基本步骤。在只需要求出最优值的情形
步骤(4)可以省略。若需要求出问题的一个最优解,则必须执行步骤
(4)。

◆对于一个给定的问题,若其具有以下两个性质,可以考虑用动态规划法来求
解。
(1)最优子结构。如果一个问题的最优解中包含了其子问题的最优,也就是说
该问题具有最优子结构。当一个问题具有最优子结构时,提示我们动态规划法可能会适用,但是此时贪心策略可能也是适用的。
(2)**重叠子问题。重叠子问题指用来解原问题的递归算法可反复地解同样的子问题,而不是总在产生新的子问题。**即当一个递归算法不断地调用同一个问题时,就说该问题包含重叠子问题。

动态规划的典型应用:0-1背包问题:即要么不放,要么全放。

两个条件:容量不能超过 W,且价值最大。

在这里插入图片描述

3、贪心法:类似动态规划,但得到的是局部最优、可能近似最优,不一定是全局最优。

◆和动态规划法一样,贪心法也经常用于解决最优化问题。与动态规划法不同的是,贪心法在解决问题的策略上是仅根据当前已有的信息做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。换而言之,贪心法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优。 这种局部最优选择并不能保证总能获得全局最优解,但通常能得到较好的近似最优解。
◆贪心法问题一般具有两个重要的性质。
(1)**最优子结构。**当一个问题的最优解包含其子问题的最优解时,称此问题具
有最优子结构。问题具有最优子结构是该问题可以采用动态规划法或者贪心法求解的关键性质。
(2)**贪心选择性质。**指问题的整体最优解可以通过一系列局部最优的选择,即
贪心选择来得到。这是贪心法和动态规划法的主要区别。证明一个问题具有贪心选择性质也是贪心法的一个难点。

相较于0-1背包问题:n 个背包,要么不放,要么全放;

而背包问题:n个背包,可以放部分。

在这里插入图片描述

4、回溯法

◆概念:有**“通用的解题法”之称,可以系统地搜索一个问题的所有解或任一
解。在包含问题的所有解的解空间树中,按照深度优先的策略**,从根节点出发搜索解空间树。搜索至任一结点时,总是**先判断该结点是否肯定不包含问题的解,**如果不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先的策略进行搜索。

可以理解为先进行深度优先搜索,一直向下探测,当此路不通时,返回上一层探索另外的分支,重复此步骤,这就是回溯,意为先一直探测,当不成功时再返回上一层。

一般用于解决迷宫类的问题。

在这里插入图片描述

0-1 背包问题: 要么都放、要么都不放(即完整的放,即一个物体,不能切开、拆开的放,这个物体要么放,要么不放)。

已知最大放入5个物品,背包容量最大为10,每个物体要么放,要么不放。

经过推算可以得到最大装包价值为:

排序为:[重量,价值]

[2,6],[2,3],[6,5],[5,4],[4,6]

动态规划采用的是递归法。类似于分治法,而分治法采用的是分组、分子问题。

根据重量限制能放:

2 + 4 + 2,价值为: 6 + 6 + 3 = 15

4 + 6,价值为:6 + 5 = 11

2 + 2 + 5,价值为 6 + 3 + 4 = 13

2 + 2 + 6,价值为 6 + 3 + 5 = 14

根据答案选项,已经可以验证答案为 C。

即63题答案为 C。

0-1背包的时间复杂度为 O(nW),记住即可。

即64题答案为 A。

部分背包问题,归并排序算法。归并排序算法:分组,排序,合并。时间服复杂度为 nlgn

单位重量价值:6/2 = 3;3/2 = 1.5 ; 5/6≈0.8333 ;4/5 = 0.8;6/4 = 1.5;

从大到小排序:

[单位重量价值,价值,重量]

[3,6,2]、[1.5,3,2]、[1.5,6,4]、[0.83,5,6]、[0.8,4,5]

[3,6,2]、[1.5,6,4]、[1.5,3,2]、[0.83,5,6]、[0.8,4,5]

已知最大放入5个物品,背包容量最大为10,

所以:2+2+4 = 8 < 10,放了3个,还可以再放2个,所以最大价值:6 + 3 + 6 + 2 * 0.8333 = 15 + 1.6666 ≈ 16.67。

所以 64 答案为 D、65 答案为 B。

在这里插入图片描述

该题的算法思路中只考虑了左端的房子的右侧放消防栓是否可以覆盖,但没有考虑一个消防栓是否同时覆盖左右两侧的。

所以这是一种考虑局部最优解的算法思路。所以是贪心算法的思路。

贪心的时间复杂度为: 考虑第1栋,第2栋…第n栋,所以是线性的,所以是 O(n)

只需要装5个即可:即30装一个(覆盖10、20、30、35),80装一个(覆盖60、80),160装一个、210装一个、280装一个(覆盖260和300)

所以答案为:

62:C

63:B

64:B

65:C**(贪心法可能得到近似最优解,也可能得不到,对有些实例,可能得不到最优)**

5、分支限界法(了解即可)

与回溯法的区别:1、求解目标是找出满足约束条件的一个解,或是在满足约
束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
2、以广度优先或以最小耗费(最大收益)优先的方式搜索解空间树。

6、概率算法(了解即可)

在算法执行某些步骤时,**可以随机地选择下一步该如何进行,同时允许结果以较小的概率出现错误,**并以此为代价,获得算法运行时间的大幅度减少(降低算法复杂度)。

基本特征是对所求解问题的同一实例用同一概率算法求解两次,可能得到完全不同的效果。

四类概率算法:数值概率算法(数值问题的求解)、蒙特卡洛算法(求问题的精确解)、拉斯维加斯算法(不会得到不正确的解)、舍伍德算法(总能求得问题的一个正确解)。

7、近似算法(了解即可)

放弃求最优解,而用近似最优解代替最优解,总会给待求解的问题提供一个解。该算法必须能够给出算法所产生的解与最优解之间的差别或者比例的一个界限。

通过近似算法,以换取算法设计上的简化和时间复杂度的降低。

很凉近似算法性能的两个标准:

(1)算法的时间复杂度:必须是多项式阶

(2)解的近似程度。

8、数据挖掘算法(了解即可)

◆分析爆炸式增长的各类数据的技术,以发现隐含在这些数据中的有价值的信息和知识。数据挖掘利用机器学习方法对多种数据进行分析和挖掘。其核心是算法,主要功能包括分类、回归、关联规则和聚类等。

分类
◆是一种有监督的学习过程,根据历史数据预测未来数据的模型。
◆数据分类的两个步骤:学习模型(基于训练数据集采用分类算法建立学习
型)、应用模型(应用测试数据集的数据到学习模型中,根据输出来评估模型
的好坏以及将未知数据输入到学习模型中,预测数据的类型)。
◆分类算法:决策树归纳(自顶向下的递归树算法)、朴素贝叶斯算法、后向
传播BP、支持向量机SVM。

聚类

是一种无监督学习过程。根据数据的特征,将相似的数据对象归为一类。

9、智能优化算法(了解即可)

优化技术是一种以数学为基础,用于求解各种工程问题优化解的应用技术。

人工神经网络算法ANN:一个以有向图为拓扑结构的动态系统。神经元网络。

遗传算法:模拟优胜劣汰、遗传变异。在迭代过程中保持已有的结构,同时寻找最好的结果。

模拟退火算法SA:求解全局优化泛。模拟物理退火过程:加温、等温、冷却。

禁忌搜索算法TS:模拟人类智力过程的一种全局算法,是对局部邻域搜索的一种扩展。记忆可行解,对已经优化的过程进行记录和选择,指导下一步搜索方向。

10、蚁群算法(了解即可)

是一种用来寻找优化路径的概率型算法。

蚁群可以子在不同的环境下,寻找最短到达食物的路径。

整个蚂蚁群体的所有路径构成待优化问题的解空间。路径较短的蚂蚁释放的信息素量较多。

11、粒子群优化算法 PSO(了解即可)

一群鸟随机搜索食物,这个区域只有一个食物,但是所有鸟不知道食物在哪里。但是它们指导当前的位置离食物还有多远。那么最简单有效的就是搜寻目前距离食物最近的鸟的周围区域。

每个优化问题的解都是搜索空间中的一只鸟,称为粒子。所有粒子都有一个由被优化的函数决定的适应值,每个粒子还有一个速度决定它们飞翔的方向和距离。然后粒子就追随当前的最优粒子在解空间中搜索。

粒子通过跟踪两个“极值”来更新自己:第一个是粒子本身所找到的最优解;另个是整个种群目前找到的最优解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SAP ME 38】SAP ME发布WebService配置及应用

更多WebService介绍请参照 【SAP ME 28】SAP ME创建开发组件&#xff08;DC&#xff09;webService 致此一个WebService应用发布成功&#xff0c;把wsdl文件提供到第三方系统调用接口&#xff01; 注意&#xff1a; 在SAP ME官方开发中默认对外开放的接口是WebService接口&am…

01、vue+openlayers6实现自定义测量功能(提供源码)

首先先封装一些openlayers的工具函数&#xff0c;如下所示&#xff1a; import VectorSource from ol/source/Vector; import VectorLayer from ol/layer/Vector; import Style from ol/style/Style; import Fill from ol/style/Fill; import Stroke from ol/style/Stroke; im…

Android GPU渲染SurfaceFlinger合成RenderThread的dequeueBuffer/queueBuffer与fence机制(2)

Android GPU渲染SurfaceFlinger合成RenderThread的dequeueBuffer/queueBuffer与fence机制&#xff08;2&#xff09; 计算fps帧率 用 adb shell dumpsys SurfaceFlinger --list 查询当前的SurfaceView&#xff0c;然后有好多行&#xff0c;再把要查询的行内容完整的传给 ad…

题目----力扣--移除链表元素

题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]示例 2&#xff1a; 输入&…

智慧公厕:让厕所管理变得更智慧、高效、舒适!

公共厕所是城市的重要组成部分&#xff0c;但常常被忽视。它们的管理和养护往往面临着许多问题&#xff0c;例如卫生状况不佳、环境畏畏缩缩、设施老旧等。为了解决这些问题&#xff0c;智慧公厕应运而生。智慧公厕是一种全方位的应用解决方案&#xff0c;将科技与公共厕所管理…

我在洛杉矶采访到了亚马逊云全球首席信息官CISO(L11)!

在本次洛杉矶举办的亚马逊云Re:Inforce全球安全大会中&#xff0c;小李哥作为亚马逊大中华区开发者社区和自媒体代表&#xff0c;跟着亚马逊云安全产品团队采访了亚马逊云首席信息安全官(CISO)CJ Moses、亚马逊副总裁Eric Brandwine和亚马逊云首席高级安全工程师Becky Weiss。 …

搜索的未来:OpenAI 的 GPT 如何彻底改变行业

搜索的未来&#xff1a;OpenAI 的 GPT 如何彻底改变行业 概述 搜索引擎格局正处于一场革命的风口浪尖&#xff0c;而 OpenAI 的 GPT 处于这场变革的最前沿。最近出现了一种被称为“im-good-gpt-2-chatbot”的神秘聊天机器人&#xff0c;以及基于 ChatGPT 的搜索引擎的传言&am…

【C++ 内存管理】深拷贝和浅拷贝你了解吗?

文章目录 1.深拷贝2.浅拷贝3.深拷贝和浅拷贝 1.深拷贝 &#x1f34e; 深拷⻉: 是对对象的完全独⽴复制&#xff0c;包括对象内部动态分配的资源。在深拷⻉中&#xff0c;不仅复制对象的值&#xff0c;还会复制对象所指向的堆上的数据。 特点&#xff1a; &#x1f427;① 复制对…

DCDC中MOS半桥的自举电容,自举电阻问题

一个免费的翻译英文文章的网站&#xff0c;可以将英文数据手册翻译为中文&#xff08;需要挂梯子&#xff0c;不收费&#xff0c;无广告&#xff0c;不需要注册&#xff09;&#xff0c;链接如下&#xff1a; Google 翻译 翻译效果&#xff1a; // 104电容是0.1uf&#xff1b…

Spring AOP(2)

目录 Spring AOP详解 PointCut 切面优先级Order 切点表达式 execution表达式 切点表达式示例 annotation 自定义注解MyAspect 切面类 添加自定义注解 Spring AOP详解 PointCut 上面代码存在一个问题, 就是对于excution(* com.example.demo.controller.*.*(..))的大量重…

Tomcat中服务启动失败,如何查看启动失败日志?

1. 查看 localhost.log 这个日志文件通常包含有关特定 web 应用的详细错误信息。运行以下命令查看 localhost.log 中的错误&#xff1a; sudo tail -n 100 /opt/tomcat/latest/logs/localhost.YYYY-MM-DD.log请替换 YYYY-MM-DD 为当前日期&#xff0c;或选择最近的日志文件日…

【notepad++】使用

1 notepad 下载路径 https://notepad-plus.en.softonic.com/download 2 设置护眼模式 . 设置——语言格式设置——前景色——黑色 . 背景色——RGB &#xff1a;199 237 204 . 勾选“使用全局背景色”、“使用全局前景色” . 保存并关闭

YOLOv5改进 | 注意力机制 | 理解全局和局部信息的SE注意力机制

在深度学习目标检测领域&#xff0c;YOLOv5成为了备受关注的模型之一。本文给大家带来的是能够理解全局和局部信息的SE注意力机制。文章在介绍主要的原理后&#xff0c;将手把手教学如何进行模块的代码添加和修改&#xff0c;并将修改后的完整代码放在文章的最后&#xff0c;方…

RAG查询改写方法概述

在RAG系统中&#xff0c;用户的查询是丰富多样的&#xff0c;可能存在措辞不准确和缺乏语义信息的问题。这导致使用原始的查询可能无法有效检索到目标文档。 因此&#xff0c;将用户查询的语义空间与文档的语义空间对齐至关重要&#xff0c;目前主要有查询改写和嵌入转换两种方…

代码随想录算法训练营第六十天| LeetCode647. 回文子串 、516.最长回文子序列

一、LeetCode647. 回文子串 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0647.%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2.html 状态&#xff1a;已解决 1.思路 这道题我只想出来了暴力解法&#xff0c;动规解法并没有想出来。根据视频讲解才把它想出来。…

【hackmyvm】 Animetronic靶机

靶机测试 arp-scanporturl枚举exiftool套中套passwordsudo 提权 arp-scan arp-scan 检测局域网中活动的主机 192.168.9.203 靶机IP地址port 通过nmap扫描&#xff0c;获取目标主机的端口信息 ┌──(root㉿kali)-[/usr/share/seclists] └─# nmap -sT -sV -O 192.16…

基于springboot+vue+Mysql的体质测试数据分析及可视化设计

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

C语言/数据结构——(相交链表)

一.前言 今天在力扣上刷到了一道题&#xff0c;想着和大家一起分享一下这道题——相交链表https://leetcode.cn/problems/intersection-of-two-linked-lists废话不多说&#xff0c;让我们开始今天的分享吧。 二.正文 1.1题目描述 是不是感觉好长&#xff0c;我也这么觉得。哈…

【智能优化算法】蜜獾优化算法(Honey Badger Algorithm,HBA)

蜜獾优化算法(Honey Badger Algorithm,HBA)是期刊“MATHEMATICS AND COMPUTERS IN SIMULATION”&#xff08;IF 3.6&#xff09;的2022年智能优化算法 01.引言 蜜獾优化算法(Honey Badger Algorithm,HBA)受蜜獾智能觅食行为的启发&#xff0c;从数学上发展出一种求解优化问题的…

Linux修炼之路之初识操作系统+基础指令(1)

目录 引言 一&#xff1a;对操作系统(OS)的简单了解 1.操作系统(OS) 是什么 2.操作系统好坏的衡量标准 3.操作系统存在的重要性 4.理解所有在计算机上的操作 二&#xff1a;Linux与windows操作的特点区别 三&#xff1a;基础指令 1.ls 指令 1.使用 2.常用选项 2.…
最新文章