软件工程作业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 函数 生成排列的函数调用次数较多,耗时符合预期,性能瓶颈基本解决。
感想
通过这次作业,对自己专业知识一无所知,脑子一片空白。只能借助百度和求助同学的帮助,这次作业也让我认清了自己的技术水平,以后还是要多加学习与练习才能有所突破!