软件工程作业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 计划
Estimate 估计这个任务需要多少时间
Development 开发
Analysis 需求分析 (包括学习新技术)
Design Spec 生成设计文档
Design Review 设计复审
Coding Standard 代码规范 (为目前的开发制定合适的规范)
Design 具体设计
Coding 具体编码
Code Review 代码复审
Test 测试(自我测试,修改代码,提交修改)
Reporting 报告
Test Repor 测试报告
Size Measurement 计算工作量
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划
calculer 合计

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

求解思路

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

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

性能分析和优化

如图:



结果分析

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

感想

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

posted @ 2020-04-02 18:34  啊西吧儿  阅读(130)  评论(1编辑  收藏  举报