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

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.mzph.cn/news/833419.shtml

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

相关文章

链表经典面试题01

目录 引言 面试题01:返回倒数第k个节点 题目描述: 思路分析: 代码展示: 面试题02:链表的回文结构 题目描述: 描述 思路分析: 代码展示: 面试题03:相交链表 题目描述: 思路分析: 代码展示: 小结: 引言 这次的题均来自力扣和牛客有关链表的经典面试题,代码只会展示…

C++从入门到精通——类的6个默认成员函数之拷贝构造函数

拷贝构造函数 前言一、拷贝构造函数概念理解定义 二、拷贝构造函数的特征三、注意要点写法实践传址返回与引用返回的区别传址返回引用返回 传值返回和传址返回的对比总结测试 前言 类的6个默认成员函数&#xff1a;如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中…

抢占用户|AI助力企业高效挖掘潜在客户,推动高质量转化

随着人工智能&#xff08;AI&#xff09;技术的崛起&#xff0c;企业终于可以在这个数字化时代获得一种强大的工具&#xff0c;帮助企业迅速而准确地找到潜在客户。AI不仅能够处理海量的数据&#xff0c;还能自动分析和识别潜在客户的特征和行为模式&#xff0c;为企业营销提供…

【WEEK11】 【DAY1】Employee Management System Part 2【English Version】

2024.5.6 Monday Continuing from 【WEEK10】 【DAY2】Employee Management System Part 1【English Version】 Contents 10.3. Page Internationalization10.3.1. Preparation10.3.2. Configuration File Writing10.3.2.1. Create an i18n (abbreviation for internationaliza…

专业的保密网文件导入导出系统,让文件流转行为更可控安全

军工单位因其涉及国防安全和军事机密&#xff0c;对保密工作有极高的要求&#xff0c;通常会采取严格的网络隔离措施来保护敏感信息和提高网络安全性。常见的方式是通过物理隔离将网络彻底分隔开来&#xff0c;比如保密网和非保密网。网络隔离后&#xff0c;仍有数据交换的需求…

GORM的常见命令

文章目录 一、什么是GORM&#xff1f;二、GORM连接mysql以及AutoMigrate创建表三、查询1、检索此对象是否存在于数据库&#xff08;First,Take,Last方法&#xff09;2、Find()方法检索3、根据指定字段查询 四、更新1、Save() 保存多个字段2、更新单个字段 五、删除 一、什么是G…

Python中设计注册登录代码

import hashlib import json import os import sys # user interface 用户是界面 UI """ 用户登录系统 1.注册 2.登陆 0.退出 """ # 读取users.bin def load(path): return json.load(open(path, "rt")) # 保存user.bin def save(dic…

Figma 高效技巧:设计系统中的图标嵌套

Figma 高效技巧&#xff1a;设计系统中的图标嵌套 在设计中&#xff0c;图标起着不可或缺的作用。一套便捷易用的图标嵌套方法可以有效提高设计效率。 分享一下我在图标嵌套上走过的弯路和经验教训。我的图标嵌套可以分三个阶段&#xff1a; 第一阶段&#xff1a;建立图标库 一…

目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)

文章目录 一、目标检测介绍二、YOLOv7介绍三、源码/论文获取四、环境搭建4.1 环境检测 五、数据集准备六、 模型训练七、模型验证八、模型测试九、错误总结9.1 错误1-numpy jas mp attribute int9.2 错误2-测试代码未能跑出检测框9.3 错误3- Command git tag returned non-zero…

Apple OpenELM设备端语言模型

Apple 发布的 OpenELM&#xff08;一系列专为高效设备上处理而设计的开源语言模型&#xff09;引发了相当大的争论。一方面&#xff0c;苹果在开源协作和设备端AI处理方面迈出了一步&#xff0c;强调隐私和效率。另一方面&#xff0c;与微软 Phi-3 Mini 等竞争对手相比&#xf…

森林消防新利器:高扬程水泵的革新与应用/恒峰智慧科技

随着全球气候变化的加剧&#xff0c;森林火灾的频发已成为威胁生态安全的重要问题。在森林消防工作中&#xff0c;高效、快速的水源供给设备显得尤为重要。近年来&#xff0c;高扬程水泵的广泛应用&#xff0c;为森林消防工作带来了新的希望与突破。 一、高扬程水泵的技术优势 …

探索Baidu Comate:编程世界中的新利器

文章目录 Baidu Comate 介绍Baidu Comate的优势Baidu Comate安装过程Baidu Comate实战演练代码调优代码解释代码生成注释生成 总结 Baidu Comate 介绍 随着GPT的大火&#xff0c;衍生了各种AI工具&#xff0c;这些AI工具遍布在各行业各领域中&#xff0c;有AI写作、AI办公、AI…

向各位请教一个问题

这是菜鸟上的一道题目&#xff0c;单单拿出来问问大家&#xff0c;看看能不能解惑 &#xff0c;谢谢各位&#xff01; 题目25&#xff1a;求12!3!...20!的和 解题思路&#xff1a;这个题不知道为什么我用DEV C 5.11显示出来为0.000000&#xff0c;可能版本有问题&#xff1f;&a…

jenkins部署服务到windows系统服务器

1、安装openSSH windows默认不支持ssh协议&#xff0c;需要下载安装&#xff0c;主要适用于jenkins传输文件已经执行命令使用 点击查看下载openSSH 2、项目配置 这里简单说说怎么配置&#xff0c;主要解决点就是ssh执行cmd或shell命令时不能开启新窗口导致应用部署失败或者断…

【论文阅读笔记】MAS-SAM: Segment Any Marine Animal with Aggregated Features

1.论文介绍 MAS-SAM: Segment Any Marine Animal with Aggregated Features MAS-SAM&#xff1a;利用聚合特征分割任何海洋动物 Paper Code(空的) 2.摘要 最近&#xff0c;分割任何模型&#xff08;SAM&#xff09;在生成高质量的对象掩模和实现零拍摄图像分割方面表现出卓越…

海云安受邀参加诸子云 4.27南京「金融互联网」私董会

4月27日&#xff0c;“安在新媒体网安用户行业活动”第四期私董会在南京顺利举办。活动以“金融&互联网”为主题&#xff0c;邀请十余位业内资深的甲方用户以及典型厂商代表。摒弃传统的议题分享&#xff0c;采取“随时问答&#xff0c;自由讨论”的形式&#xff0c;提问题…

Poisson_Image-Editing

1.算法介绍 快速泊松图像编辑&#xff08;Fast Poisson Image Editing&#xff09;是一种图像处理算法&#xff0c;用于将源图像的某个区域无缝地嵌入到目标图像中。它基于泊松方程的性质&#xff0c;通过求解离散化的泊松方程来实现图像的融合。该算法的核心思想是&#xff0c…

信息系统项目管理师0092:项目管理原则(6项目管理概论—6.4价值驱动的项目管理知识体系—6.4.1项目管理原则)

点击查看专栏目录 文章目录 6.4价值驱动的项目管理知识体系6.4.1项目管理原则1.原则一:勤勉、尊重和关心他人2.原则二:营造协作的项目管理团队环境3.原则三:促进干系人有效参与4.原则四:聚焦于价值5.原则五:识别、评估和响应系统交互6.原则六:展现领导力行为7.原则七:根…

在家中访问一个网站的思考

在家中访问一个网站的思考 1、家庭网络简介2、家庭WLAN DHCP2.1、家庭路由器PPPOE拨号2.2、DHCP&#xff08;动态主机配置协议&#xff09;2.3、接入家庭网的主机IP地址2.4、家庭总线型以太网2.5、Mac地址2.6、ARP协议2.7、IP协议 & UDP/TCP协议2.8、NAT&#xff08;Netwo…

沙盘Sandboxie v5.56.4

菜鸟高手裸奔工具沙盘Sandboxie是一款国外著名的系统安全工具&#xff0c;它可以让选定程序在安全的隔离环境下运行&#xff0c; 只要在此环境中运行的软件&#xff0c;浏览器或注册表信息等都可以完整的进行清空&#xff0c;不留一点痕迹。同时可以防御些 带有木马或者病毒的…