软考(中级-软件设计师)算法分析篇(1024)

三、算法设计与分析

#1024程序员节|正文#
请添加图片描述

一、分治法

1.1 分而治之

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

要求:

  • 该问题的规模缩小到一定程度就可以容易地解决
  • 该问题可以分解为若干规模较小的相同问题
  • 利用该问题分解出的子问题的解可以合并为该问题的解
  • 该问题所分解出的各个子问题是相互独立的。

一般来说,分治算法在每一层递归上都有3个步骤。

  1. 分解。将原问题分解成一系列子问题。
  2. 求解。递归地求解各子问题。若子问题足够小,则直接求解。
  3. 合并,将子问题的解合并成原问题的解。

1.2 递归

递归:就是在运行过程中调用自己。

#include<stdio.h>
int muliplyNumbers(int n) ;
int main(){int n;printf("输入一个整数:");scanf("%d",&n);printf("%d  != %ld",n,multiplyNumbers());return 0;
}int muliplyNumbers(int n)
{if(n>1){return n* muliplyNumbers(n-1);}else return 1;
}

函数递归调用带来的内存开销:

S(n)=O(n)

空间复杂度=递归调用的深度

例题

快速排序算法在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分成两个部分,前面一部分元素值小于基准元素,而后面一部分元素值大于基准元素。然后再分别对前后两个部分进步进行划分根据上述描述,快速排序算法采用了( )算法设计策略。已知确定着基准元素操作的时间复杂度为( )

A.分治 B.动态规划 C.贪心 D.回溯
A . O ( n ) 和 O ( n l g n ) B . O ( n ) 和 O ( n 2 ) C . O ( n l g n ) 和 O ( n l g n ) D . O ( n l g n ) 和 O ( n 2 ) A.O(n)和O(nlgn) \quad \quad\quad B.O(n)和O(n^2) \\ C.O(nlgn)和O(nlgn) \quad \quad\quad D.O(nlgn)和O(n^2) A.O(n)O(nlgn)B.O(n)O(n2)C.O(nlgn)O(nlgn)D.O(nlgn)O(n2)
AD

二、回溯法

2.1 深度优先搜索法

回溯法是种选优搜索法,按选优条件向前搜索,以达到目标。但当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。这种走不通就退回再走的技术就是回溯法。请添加图片描述

三、贪心法

3.1 局部最优

总是做出在当前来说是最好的选择,而并不是从整体上加以考虑,它所做出的每步选择只是当前步骤的局部最优选择,但从整体来说不一定是最优的选择。由于它不必为了寻找最优解而穷尽所有的可能解,因此其耗费时间少,一般可以快速得到满意的解,但得不到最优解。也常用于解决最优化问题

用贪心法求解的问题一般具有两个重要的性质。

  1. 最优子结构。当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构。问题的最优子机构是该问题可以采用动态规划法或者贪心法求解的关键性质
  2. 贪心选择性质。指问题的整体最优解可以通过一系列局部最优的选择,即贪心选择得到。这是贪心法和动态规划的主要区别。

四、动态规划法

4.1 子问题独立(区别分治法)

基本思想是将求解问题分解成若干子问题,先求解子问题,燃弧从这些子问题的解得到原问题的解。

与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是独立的

动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解,每个解都对应一个值,我们希望找到具有最优值的那个解。当然,最优解可能会有多个,动态规划算法能找出其中的一个最优解。

4.2 整体最优(区别贪心法)

对一个给定的问题,若其具有以下两个性质,则可以考虑用动态规划法来求解。

  1. 最优子结构。如果一个问题的最优解中包含了其子问题的最优解,就说该问题具有最优子结构。当一个问题具有最优子结构时,提示我们动态规划法可能适用,但是此时贪心策略可能也是适用的。
  2. 重叠子问题。指用来求解原问题的递归算法可反复地解同样的子问题,而不是总在产生新的子问题。即当一个递归算法不断地调用同一个问题时,就说该问题包含重叠子问题。此时若用分治法递归求解,则每次遇到子问题都活视为新问题,会极大地降低算法效率,而动态规划法总是充分利用重叠子问题,对每个子问题仅计算一次,把解保存在一个需要时就可以查看的表中,而每次查表的时间为常数。

请添加图片描述

考虑一个背包问题,共有5个物品,背包容量为W=10,物品重量和价值分别w={2,2,6,5,4},v={6,3,5,4,6},求解背包问题的最大装包价值。若此为0-1背包问题,分析该问题具有最优子结构,定义递归式为
c(i,j)=\left{
\begin{aligned}
0 \quad \quad\quad \quad\quad \quad\quad \quad 若i=0或j=0\
c(i-1) \quad \quad\quad \quad\quad \quad \quad \quad 若w[i]>j \
max{c(i-1),c(i-1,j-w(i))}\quad\quad 其他
\end{aligned}
\right.
$$
$$

A . 11 B . 14 C . 15 D . 16.67 A . O ( n W ) B . O ( n l g n ) C . O ( n 2 ) D . O ( n l g n W ) A.11\quad \quad B.14 \quad \quad C.15 \quad \quad D.16.67 \\ A.O(nW)\quad \quad B.O(nlgn)\quad \quad C.O(n^2) \quad \quad D.O(nlgnW) A.11B.14C.15D.16.67A.O(nW)B.O(nlgn)C.O(n2)D.O(nlgnW)

​ CA

考虑一个背包问题,共有5个物品,背包容量为W=10,物品重量和价值分别w={2,2,6,5,4},v={6,3,5,4,6},求解背包问题的最大装包价值。若此为部分背包问题,首先采用归并排序算法,根据物品的单位重量价值从大到小排序,然后依次将物品放入背包直至所有物品放入背包中或者背包再无容量,则得到的最大装包价值为 ( ),算法的时间复杂度为( )。 分析该问题具有最优子结构,定义递归式为
c(i,j)=\left{
\begin{aligned}
0 \quad \quad\quad \quad\quad \quad\quad \quad 若i=0或j=0\
c(i-1) \quad \quad\quad \quad\quad \quad \quad \quad 若w[i]>j \
max{c(i-1),c(i-1,j-w(i))}\quad\quad 其他
\end{aligned}
\right.
$
$$

A . 11 B . 14 C . 15 D . 16.67 A . O ( n W ) B . O ( n l g n ) C . O ( n 2 ) D . O ( n l g n W ) A.11\quad \quad B.14 \quad \quad C.15 \quad \quad D.16.67 \\ A.O(nW)\quad \quad B.O(nlgn)\quad \quad C.O(n^2) \quad \quad D.O(nlgnW) A.11B.14C.15D.16.67A.O(nW)B.O(nlgn)C.O(n2)D.O(nlgnW)

​ DB

O ( 1 ) < O ( l o g 2 n ) < O ( n ) < O ( n l o g 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1)<O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n) O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)

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

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

相关文章

数组类型应用举例

在main.cpp里输入程序如下&#xff1a; #include "stdio.h" //使能printf()函数 #include <stdlib.h> //使能exit(); #define My_array_Size 10 //定义用My_array_Size代替 unsigned char My_array[My_array_Size]; //声明数组My_arra…

集群分发脚本

我的后端学习大纲 我的Linux环境搭建学习大纲 8.2.scp安全拷贝: 1.命令格式&#xff1a;scp -r $pdir/$fname $user$host:$pdir/$fname2.具体命令&#xff1a; scp -r jdk1.8.0_321/ rootHadoop104:/opt/module 3.实际操作&#xff1a; 3.1.在hadoop2和hadoop3&#xff0c;had…

Verilog 0x01 基础

硬件描述语言 0x00 数电逻辑符号 与 & 或 | 异或 ^ 同或 ~^0x01 基本结构 1.1 线网&#xff08;wire&#xff09; wire 类型表示硬件单元之间的物理连线&#xff0c;由其连接的器件输出端连续驱动 如果没有驱动元件连接到 wire 型变量&#xff0c;缺省值一般为 “Z” …

h5页面与小程序页面互相跳转

小程序跳转h5页面 一个home页 /pages/home/home 一个含有点击事件的元素&#xff1a;<button type"primary" bind:tap"toWebView">点击跳转h5页面</button>toWebView(){ wx.navigateTo({ url: /pages/webview/webview }) } 一个webView页 /pa…

数据结构——队列和栈

目录 一、栈 1、概念与结构 2、栈的结构与初始化 3、入栈 4、出栈 5、取栈顶元素 6、取栈中有效元素个数 7、栈是否为空 二、队列 1、概念与结构 2、队列的结构与初始化 3、入队列 4、出队列 5、取队头数据 6、取队尾数据 7、队列判空 8、队列中有效元素个数 练习题目链 一…

(一)Mysql篇---Mysql整体架构

MySql框架浅析 首先&#xff0c;上一张图先让各位看看大致结构&#xff1a; 从上到下&#xff0c;依次说一下结构&#xff1a; 连接层&#xff1a;这里主要是处理客户端和数据库连接的&#xff0c;直接使用的Tomcat的连接池&#xff0c;可以调整最大连接数&#xff1b; 服务…

精益思维在新能源汽车研发中的应用体现

近年来&#xff0c;新能源汽车作为绿色出行的重要载体&#xff0c;其研发与生产模式正经历着深刻的变革。精益思维&#xff0c;这一源自制造业的管理理念&#xff0c;正逐步渗透并深刻影响着新能源汽车的研发过程&#xff0c;不仅提升了产品质量与生产效率&#xff0c;还促进了…

汽车级DC-DC转换器英飞凌TLF35584

上汽荣威都在用的汽车级DC-DC转换器英飞凌TLF35584 今天平台君从IPBrain数据库中给大家带来的一款由Infineon(英飞凌)推出的一款多路输出安全电源芯片,具备高可靠性和安全性。适用于汽车电子系统中的多种应用场景,如车身控制、安全气囊、防抱死制动系统,电子稳定控制系统等。…

数据结构:堆的应用

堆排序 假定有一组数据极多的数&#xff0c;让我们进行排序&#xff0c;那我们很容易想到一种经典的排序方法&#xff0c;冒泡排序&#xff0c;我们对冒泡排序的时间复杂度进行分析&#xff1a; 显然&#xff0c;冒泡排序的时间复杂度是O&#xff08;n^2&#xff09;,当数据量…

软考(中级-软件设计师)计算机系统篇(1024)

#1024程序员节|正文# 六、树和二叉树 6.1 树的基本概念 描述结果结点的度子结点的个数树的度最大结点的度叶子结点没有子结点的结点内部结点除根结点和叶子结点外的结点父节点有子结点的结点子节点有父结点的结点兄弟节点有同一个父结点的结点层次4层 6.2 二叉树的基本概念…

【Javaee】网络原理—TCP协议的核心机制

前言 TCP/IP五层协议是互联网中的主流模型&#xff0c;为网络通信提供了一个稳固的框架。 主要包含了应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层。 本篇主要介绍传输层的TCP协议的核心机制 一. 确认应答&#xff08;ack&#xf…

线程本地变量-ThreadLocal

一、ThreadLocal简介 ThreadLocal叫做线程变量&#xff0c;意思是ThreadLocal中填充的变量属于当前线程&#xff0c;该变量对其他线程而言是隔离的&#xff0c;也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本&#xff0c;那么每个线程可…

量子纠错--shor‘s 码

定理1 (量子纠错的条件) C是一组量子编码&#xff0c;P是映射到C上的投影算子。假设是一个算子元素描述的量子操作&#xff0c;那么基于量子编码C&#xff0c;存在一个能对抗描述的噪声的纠错操作R的充要条件是 对某个复元素厄米矩阵成立。 将算子元素称为导致的错误。如果这样…

[C++进阶数据结构]红黑树(半成品)

我们讲完了AVL树,它追求绝对平衡&#xff0c;从而导致插入和删除性能较差。今天我们来讲讲&#xff0c;红黑树&#xff0c;它是另一种平衡二叉搜索树&#xff0c;它追求相对平衡&#xff0c;使得增删查改的性能都极佳&#xff0c;时间复杂度皆为O(log2N)。 一、红黑树的概念 …

CSS3 动画相关属性实例大全(三)(columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性)

CSS3 动画相关属性实例大全&#xff08;三) &#xff08;columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性&#xff09; 本文目录&#xff1a; 一、columns属性&#xff08;设置元素的列宽和列数&#xff09; 二、filter属性&#xff08;调整图像、背景和边…

Ribbon客户端负载均衡策略测试及其改进

文章目录 一、目的概述二、验证步骤1、源码下载2、导入IDE3、运行前修改配置4、策略说明5、修改策略 三、最终结论四、改进措施1. 思路分析2. 核心代码3. 测试页面 一、目的概述 为了验证Ribbon客户端负载均衡策略在负载节点失效的情况下&#xff0c;是否具有故障转移的功能&a…

【逆向基础】十七、PE文件格式(二)

一、简介 本篇章主要PE文件组成部分中使用的结构体&#xff1b;根据结构体的成员变量去了解各个字节的含义。&#xff08;ps:我们依旧以”cmd.exe“为例展开解析&#xff1b;) 二、DOS Header 1、结构体&#xff1a;IMAGE_DOS_HEADER IMAGE_DOS_HEADER结构体的背景是为了兼…

忘记7-zip文件7-zip文件,还可以解压zip文件吗?

文件压缩与解压已成为我们日常处理数据和存储信息的常规操作。7-Zip&#xff0c;作为一款开源且功能强大的文件压缩工具&#xff0c;凭借其高压缩率、支持多种格式以及免费使用的特点&#xff0c;赢得了广大用户的青睐。然而&#xff0c;出于保护文件内容安全的考虑&#xff0c…

基于NVIDIA NIM平台—生成属于自己的DIY食谱

目录 一、介绍NVIDIA NIM平台 二、生成DIY食谱Demo 三、小结 一、介绍NVIDIA NIM平台 NVIDIA NIM&#xff08;Nvidia Inference Microservices&#xff09;平台是NVIDIA推出的一个微服务套件&#xff0c;旨在加速生成式AI模型在云端、数据中心和工作站上的部署和使用。以下是…

怎么区分主谓宾I love you与主系表I am fine? 去掉宾语看句子完整性 主系表结构则侧重于描述主语的状态、特征或性质

主谓宾与主系表是英语句子结构中的两种基本类型&#xff0c;它们在关注点、动词分类以及句子完整性方面有所区别。具体分析如下&#xff1a; 关注点 主谓宾I love you&#xff1a;主谓宾结构主要关注动作和影响对象之间的关系[1]。这种结构强调的是动态和行为&#xff0c;通常描…