软件工程作业03

软件工程作业03

软件工程 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1
作业要求 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10458
作业目标 实现一个数独命令行程序
作业正文 见下文
参考文献 知乎 百度 CSDN

PSP表格

PSP Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
pianing 计划 50 60
Estimate 估计这个任务需要多少时间 300 600
Development 开发 100 150
Analysis 需求分析 (包括学习新技术) 30 30
Design Spec 生成设计文档 40 30
Design Review 设计复审 20 15
Coding Standard 代码规范 (为目前的开发制定合适的规范) 25 20
Design 具体设计 30 40
Coding 具体编码 50 60
Code Review 代码复审 20 20
Test 测试(自我测试,修改代码,提交修改) 30 35
Reporting 报告 20 30
Test Repor 测试报告 20 30
Size Measurement 计算工作量 20 30
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 40 60
calculer 合计 400 550

Github 项目地址:https://github.com/lwb20177673/storehouse/blob/master/20177673

求解思路

基本求解思路是暴力枚举和深度优先搜索。但是由于求解的数独数目最高可以达到 1,000,000 个,且空白数目较多,因此需要对算法进行优化。

优化思路是将数独中的空白按照可填数字数目从低到高的顺序进行排序,优先选择可填数字少的格子,可以减少大量递归调用函数自身时间。

性能分析和优化

如图:



结果分析

程序在 Windows 10 环境下运行时间 3.354 s,速度大幅提升。其中最耗时部分是 std::next_permutation 函数 生成排列的函数调用次数较多,耗时符合预期,性能瓶颈基本解决。

感想

通过这次作业,对自己专业知识一无所知,脑子一片空白。只能借助百度和求助同学的帮助,这次作业也让我认清了自己的技术水平,以后还是要多加学习与练习才能有所突破!

原文地址:https://www.cnblogs.com/liwenbo20177673/p/12622216.html