第一个项目——数独
GitHub地址:https://github.com/lometheus/sudo_creat
老师发布了作业要求做一个数独,首先我先了解一下数独的游戏规则,数独一共九九八十一个小方格,要求1-9九个数字在每一行,每一列,每个3*3的小格子都只出现一次,编程的那么问题就变得极其粗暴了,遍历每一个格子,查看它行和列和3*3小格的数字,存储可能的数字,然后一点一点尝试。所以说暂时看来O(n^4)复杂度的代码是少不了了
优化可能性
1、由于要遍历多个点,所以可以尝试采用多线程的方法尝试为计算加速
2、在遍历数组查看是否在1—9时可采用位运算的方式,减少内存且加快了运算速度
过程中可能存在的问题
1、用户输入的问题,在进行实际运算的时候必须考虑用户输入的问题,用户可能输入一个错误或无法解出的数独,此时需要做预判,判断数独是否正确
项目计划

设计实现过程
程序一共使用11个函数,包括输入、输出(测试用)、存储、解数独、生成随机数独、以及其他辅助计算函数
算法设计图

解数独算法流程

单元测试
1、错误输入
2、正常输入
3、边界输入
性能改进

瓶颈一:
数独生成后,将数独存入文件中耗时极多
优化:
数独产生后输入文件的优化,以整形一个一个存入极其费时,将数组化为一个字符串一次性输入,大幅度降低了时间损耗。(减少约80%)
瓶颈二:
系统随机数生成耗时极多
优化:
以时间(毫秒)为基生成随机数,减少了生成随机数时间
优化:
由于输入数据较大,可以将数独生成和存入分置在两个进程里,产生一部分数独后开启存储的进程,提高了时间利用率
代码说明:

采用回溯法求解数独,在确认数独正确后,记录每一个空格里可能存放的数字,依次尝试填入,当出现矛盾时向前重新填入,直至全部正确填入

浙公网安备 33010602011771号