软件设计师第4题

首先,我是备考2023年上半年的考试。

一、历年考试题

        历年的考题如下,从表中分析可以看出,动态规划法、排序算法、回溯法、分治法是很大概率考察的算法,尤其是动态规划法,本身其理解难度较高,且可以出的题型很多。

        我猜测,2023年上半年很有可能就是出动态规划法。其次就是回溯法和分治法。回溯法学习n皇后问题就行了。

年份考点
2022下半年堆排序算法--时间复杂度计算--排序结果推导
2022上半年动态规划算法(矩阵乘法)--时间复杂度计算--算法结果推导
2021下半年动态规划算法--时间复杂度计算--算法结果推导
2021上半年动态规划算法--时间复杂度计算--空间复杂度计算
2020下半年希尔排序--时间复杂度/是否稳定--算法结果推导
2020上半年(疫情原因取消)
2019下半年

动态规划算法(0-1背包问题)

--自底向上或自顶向下

--算法结果推导

2019上半年回溯法(n皇后问题)--算法结果推导
2018下半年动态规划算法--时间复杂度计算--算法结果推导
2018上半年动态规划算法/递归算法--时间复杂度计算
2017下半年回溯法
2017上半年分治法--时间复杂度计算--算法结果推导
2016下半年KMP算法--时间复杂度计算--算法结果推导
2016上半年动态规划算法--时间复杂度计算--算法结果推导
2015下半年动态规划算法--时间复杂度计算--算法结果推导
2015上半年回溯法(n皇后问题)--算法结果推导
2014下半年动态规划算法--时间复杂度计算--算法结果推导
2014上半年分治法--时间复杂度计算--算法结果推导

        其他博主总结的考点如下,参考看看就行了。

在这里插入图片描述

二、动态规划法

2.1 算法介绍

2.2 题型1:

三、回溯法(n皇后问题)

3.1问题描述

八皇后问题是十九世纪著名的数学家高斯于1850年提出的。问题是:在8×8的棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。可以把八皇后问题扩展到n皇后问题,即在n×n的棋盘上摆放n个皇后,使任意两个皇后都不能处于同一行、同一列或同一斜线上。 

简而言之:n×n的棋盘上摆放n个皇后,不能同行,不能同列,也不能同斜线。

3.2回溯解法

首先这是一个排列组合问题,解空间的大小为:n!(n的阶乘)

如下图所示是解空间的构成树,又称排列树。

 解法一:如果硬去罗列所有排列组合,然后进行判断。规模稍大就不行了,因为是n!的问题规模。

解法二:采用回溯法,对排列树进行搜索,在中途就发现不行时,直接退出该路线,回溯到上一步,相当于在剪枝。

举个例子:

4皇后问题:

先将第一个皇后放在第一行的第一列上,符合题目要求

开始放置第二个皇后。放在第二行的第一个与第一行的皇后为同一列,不符合题意,继续向后搜素,放在第二列上面与第一个皇后在同一斜线上,不符合题意,继续向后搜素,发现放在第三列符合题意

开始放置第三个皇后。放在第三行的任意位置都会出现冲突,此时需要回溯,将第二个皇后放置在第四列,此时符合题意,继续放置第三个皇后,发现第三个皇后放置在第三行的第二列符合题意

继续放置第四个皇后。放在第四行的任意位置都会出现冲突,此时需要回溯,第三个皇后向后移动,发现依然不符合题意,继续回溯,第二行的皇后无法再向后移动,继续回溯,将第一个皇后向后移动到第二列,符合题意

移动第二个皇后,发现放在第四列符合题意

移动第三个皇后,发现放在第一列符合题意

移动第四个皇后,发现放在第三列符合题意

回溯结束

3.3源码

3.3.1 递归方法

重点是进行冲突检测

1、摆当前棋子是在某行中选一个位置,行冲突是没有的。

2、列冲突:queenPos[j] == i;

3、斜线冲突:abs(queenPos[j] - i) == abs(k - j)。由于棋盘是方块,当前棋子与之前放置棋子的行差与列差相同说明在一条斜线上。

其中的变量:

i是当前行放置位置;

j是搜索queenPos数组已经放置的棋子(范围从第1个棋子到当前棋子k);

k是当前放第几个棋子。

#include<iostream>
using namespace std;
const int M = 100;
int N;
int queenPos[M];//存放皇后的摆放位置
int sum = 0;//记一共有多少种解决方案

void display()//《《不是必须的》》,用来图形化输出结果,@表示皇后
{
	int i, j;
	int k;
	cout << endl;
	sum++;
	for (i = 0; i < N; i++)
	{
		cout << " ";
		for (k = 0; k < N; k++)
		{
			cout << "---";
		}
		cout << endl;
		for (j = 0; j < N; j++)
		{
			if (j == queenPos[i])
			{
				cout << "| ";
				cout << "@";
			}
				
				
			else
			{
				cout << "| ";
				cout << ".";
			}
		}
		cout << " |"<<endl;
	
	}
	cout << " ";
	for (i = 0; i < N; i++)
	{
		cout << "---";
	}
	cout << "\n"<<endl;
}

void NQueen(int k)
{
    //跳出条件,已经搜索到N皇后的第N行了。
	if (k == N)//N个皇后已经全部摆好
	{
		cout << N << "皇后的摆放位置是:";
		for (int i = 0; i < N; i++)
		{
			cout << queenPos[i] + 1 << " ";
		}
		cout << endl;
		cout << "图解如下:" << endl;
		display();
		return;
	}

    //主要搜索过程
	for (int i = 0; i < N; i++)//在一行中逐个检测每个位置
	{
		int j;
		for (j = 0; j < k; j++)//和语句摆好的前几个皇后进行冲突检测
		{
			if (queenPos[j] == i || abs(queenPos[j] - i) == abs(k - j))
			{
				break;//发生冲突,则检测下一个位置
			}
		}
		if (j == k)//搜到最后都没有break,说明该位置不与前面的皇后发生冲突,添加该位置
		{
			queenPos[k] = i;//将第k个皇后放在第i的位置上
			NQueen(k + 1);//搜下一个皇后的摆放位置
		}
	}
}
int main()
{
	cin >> N;
	NQueen(0);//摆放第0个皇后
	cout <<N<<" 皇后的解决方案有 "<< sum << " 种"<<endl;;
	return 0;
}

3.3.2 非递归方法

3.4 时间复杂度

该算法中每个皇后都要试探n列,共n个皇后,其解空间是一棵子集树,每个结点可能有n棵子树,对应的算法时间复杂度为 O(n^n)
利用显示约束排除两个皇后在同一行或同一列的方法,解空间树就是一棵排列树,因此共有n ! n!n!个叶子结点,所以算法的时间复杂度可以降为O ( n ! ) 

常见算法时间复杂度空间复杂度
哈希搜索O(1) — 常数复杂度
二分搜索

O(log n) — 对数复杂度

回溯法--N皇后问题O(n*2^n) — 线性复杂度
动态规划法--矩阵乘法O(n*3)O(n*2)
动态规划法--0-1背包问题O(m*n)/
动态规划法--跳台阶问题O(n)O(n)
动态规划法--最短路径问题O(n*2)O(n)
分治法O(n*log n) O(n)
贪心算法

O(m*n)

O(n*2)

O(m*n)

O(n*2)

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

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

相关文章

【计网】第二章 物理层

文章目录 物理层一、物理层的基本概念二、数据通信的基础知识2.1 数据通信系统的模型2.2 有关信道的基本概念2.3 信道的极限容量2.3.1 奈奎斯特定理2.3.1 香农定理2.3.2 信噪比 三、物理层下面的传输媒体3.1 导引型传输媒体3.2 非导引型传输媒体 四、信道复用技术4.1 频分复用 …

【小沐学Python】Python实现在线电子书(Sphinx + readthedocs + github + Markdown)

文章目录 1、简介2、安装3、创建测试工程4、项目文件结构5、编译为本地文件6、编译为http服务7、更改样式主题8、支持markdown9、修改文档显示结构10、项目托管到github11、部署到ReadtheDocs结语 1、简介 Sphinx 是一个 文档生成器 &#xff0c;您也可以把它看成一种工具&…

STC15WProteus仿真HX711电子秤串口计价称重4x4键盘STC15W4K32S4

STC15WProteus仿真HX711电子秤串口计价称重4x4键盘STC15W4K32S4 Proteus仿真小实验&#xff1a; STC15WProteus仿真HX711电子秤串口计价称重4x4键盘STC15W4K32S4 功能&#xff1a; 硬件组成&#xff1a;STC15W4K32S4单片机 LCD12864显示器4x4矩阵键盘HX711电子秤 1.单片机通…

操作教程:EasyCVR视频融合平台如何配置平台级联?

EasyCVR视频融合平台基于云边端一体化架构&#xff0c;可支持多协议、多类型设备接入&#xff0c;在视频能力上&#xff0c;平台可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、电子地图、集群、智能分析以及平台级联等。平台可拓展性强、开放度高、部署轻快&…

NUCLEO-F411RE RT-Thread 体验 (3) - GCC环境 uart驱动的移植以及console的使用

NUCLEO-F411RE RT-Thread 体验 (3) - GCC环境 uart驱动的移植以及console的使用 1、准备工作 在第一节里&#xff0c;我们用stm32cubemx将pa2 pa3管脚配置成usart2&#xff0c;用于跟st-link虚拟串口的打印用&#xff0c;那么我们先重定向printf函数&#xff0c;看这条通道是…

2009年iMac装64位windows7

前言&#xff1a;单位领导会花屏的iMac&#xff08;24寸 2009年初版&#xff09;我捡来用&#xff0c;应该大约是在2020年安装了32位windows7&#xff0c;发现不安装显卡驱动便不会花屏死机&#xff0c;于是就当简单的上网机用着&#xff0c;毕竟iMac的显示屏还是蛮不错的。现在…

windows系统安装显卡驱动软件和CUDA11.1的详细教程

深度学习目标检测框架在进行图像计算时需要GPU进行加速&#xff0c;需要用到硬件GPU显卡&#xff0c;目标检测框架和硬件GPU建立联系需要通过①显卡驱动软件&#xff1b;②CUDA软件依次建立联系。这两个软件&#xff0c;可直接从NVIDIA官网下载&#xff0c;版本没有非常严格的需…

python获取某乎热搜数据并保存成Excel

python获取知乎热搜数据 一、获取目标、准备工作二、开始编码三、总结 一、获取目标、准备工作 1、获取目标&#xff1a; 本次获取教程目标&#xff1a;某乎热搜 2、准备工作 环境python3.xrequestspandas requests跟pandas为本次教程所需的库&#xff0c;requests用于模拟h…

WinDbg安装入坑3(C#)

由于作者水平有限&#xff0c;如有写得不对的地方&#xff0c;请指正。 使用WinDbg的过程中&#xff0c;坑特别的多&#xff0c;对版本要求比较严格&#xff0c;如&#xff1a; 1 32位应用程序导出的Dump文件要用32位的WinDbg打开&#xff0c;想要没有那么多的问题&#xf…

SpringCloud Eureka注册服务提供者(七)

这里我们在原来的服务提供者项目 microservice-student-provider-1001 上面直接修改&#xff1a; 首先pom.xml修改&#xff0c;加上eureka客户端依赖&#xff1a; <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>…

【正点原子STM32连载】 第三十二章 光敏传感器实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

第三十二章 光敏传感器实验 本章&#xff0c;我们将学习使用STM32开发板板载的一个光敏传感器。我们还是要使用到ADC采集&#xff0c;通过ADC采集电压&#xff0c;获取光敏传感器的电阻变化&#xff0c;从而得出环境光线的变化&#xff0c;并在TFTLCD上面显示出来。 本章分为如…

VSCode 安装配置教程详解包含c++环境配置方法

vscode安装教程及c环境配置详解 vscode下载安装下载C扩展插件VScode C环境配置配置环境变量检查 MinGW 安装配置编译器&#xff1a;配置构建任务检查是否安装了编译器配置完毕 vscode下载安装 地址&#xff1a;官网下载地址 直接打开下载好的.exe文件进行安装即可&#xff0…

“暗网议会”如今已成为现实

图片来源:Marcin Balcerzak 最近&#xff0c;“暗网议会”已经成为了网络犯罪分子试图证明自己影响力的最新流行语&#xff0c;安全内部人士对这个词也很感兴趣。 上周五&#xff0c;臭名昭著的亲俄黑客组织Killnet在其电报威胁帖子中使用了这个词语。随后&#xff0c;twitte…

SPEC 2006 gcc version 8.3.0 (Uos 8.3.0.3-3+rebuild) x86_64 源码编译tools 错误处理笔记

编译tools 拷贝tools到安装目录 cp /mnt/iso/tools /opt/speccpu2006/ -r 执行编译 su rootcd /opt/speccpu2006/tools/src sh -x buildtools 错误 undefined reference to __alloca 编辑./make-3.82/glob/glob.c&#xff0c;注释掉以下宏判断 you should not run config…

5-垃圾回收

目录 1.死亡对象的判断算法 1.1.引用计数算法 1.2.可达性分析算法&#xff08;主流&#xff09; PS&#xff1a;强引用、软引用、弱引用、虚引用 2.垃圾回收算法 2.1.标记-清除算法 2.2.复制算法 2.3.标记-整理算法 2.4.分代算法&#xff08;主流&#xff09; PS&…

二进制方式部署kubernetes集群

二进制方式部署kubernetes集群 1、部署k8s常见的几种方式 1.1 kubeadm Kubeadm 是一个 k8s 部署工具&#xff0c;提供 kubeadm init 和 kubeadm join&#xff0c;用于快速部署 Kubernetes 集群。 Kubeadm 降低部署门槛&#xff0c;但屏蔽了很多细节&#xff0c;遇到问题很难…

TDesign电商小程序模板解析02-首页功能

目录 1 home.json2 goods-list组件3 goods-card组件总结 上一篇我们搭建了底部的导航条&#xff0c;这一篇来拆解一下首页的功能。首页有如下功能 可以进行搜索显示轮播图横向可拖动的页签图文卡片列表 1 home.json 因为是要使用组件库的组件搭建页面&#xff0c;自然是先需要…

【win11+Visual Studio 2019 配置 PCL 1.12.1 的经验总结分享】

点云pc库的下载与安装参考另外一篇文章&#xff0c;链接&#xff1a; https://blog.csdn.net/weixin_47869094/article/details/131270772?spm1001.2014.3001.5501 各种教程里面这都很好&#xff0c;就不赘述了&#xff0c;当然&#xff0c;这里也给出一个个人认为不错的安装…

java项目之病人跟踪治疗信息管理系统(ssm+vue)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的病人跟踪治疗信息管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

智慧绿色档案馆之八防一体化解决系统方案

主要涉及系统&#xff1a; 智慧档案馆温湿度监控系统 智慧档案馆净化系统 智慧档案馆防火监控系统 智慧档案馆防盗监控系统 智慧档案馆漏水监控系统 智慧档案馆空气质量监控系统 智慧档案馆自动化恒温恒净化系统 智慧档案馆大数据云平台建设系统 &#xff08;一&#xff09;技…