第二次团队作业
这个作业属于哪个课程 | |
这个作业要求在哪里 | |
团队名称 | TZN |
这个作业的目标 | 弄清楚用户的需求,进行需求分析,为软件开发做准备 |
一.团队成员学号列表:
姓名 | 学号 |
彭潇然 | 201731062217 |
甘昀 | 201731062218 |
何谊春 | 201731062219 |
刘豪 | 201731062220 |
张鑫 | 201731062221 |
傅豪 | 201731062222 |
二.拟开发项目介绍:
这是一个简单休闲游戏,操作简单但是里面的原理不简单,可能有的人玩前面几关可以过但是后面的话没有技巧是很难单凭运气玩过去的。所以无聊的时候玩一玩还是很有乐趣的。
三.典型用户及用户故事:
我们这个软件项目,早期的用户是我们周边的寝室,后面会逐步发展到整个专业或者推广到全学校。
在大学里面,我们难免不了出现分歧,在出现分歧的时候,我们需要用竞技的手段来处理,什么能有效的体现出竞争性呢?我们对此展开了激烈的讨轮。于是我们做了一个简单的小游戏,别看只是小游戏,但是要把它玩转还真的不容易,在没有竞技体育的想法时,就可以用我们的小程序替代,公平公正。闲暇时光还能打发时间
四.项目的主要功能
其实点灯游戏的基本功能大家都知道:益智
但是我要说的不是这个,因为这个大家都知道,而且是主要功能。
点灯游戏其实我觉得对于我们学计算机的学生来讲是特别有用的,
因为它的一个作用是算法的比拼。曾经出现过很多不同时间复杂度和
空间复杂度的算法来求解,下面会挨着介绍。所以它有个别名,史上
最难智力游戏,正是因为算法的比拼和更新让游戏变得更有趣更难。
这里有一个介绍:点灯游戏_百度百科
wikipedia : Lights Out (game)
这里有一个在线版,可以试玩:变色方块 史上最难智力游戏
国外大概在1983年就出现了这个游戏,(对,你没有看错,确实是30年前),而且还申请了专利,当时大概是这样的一个东西:
国内许多人知道这个游戏,大概是在1995年前后?因为电脑普及后,一些游戏里出现??
简单地说,一个NxN的棋盘(比如5x5),在每一个单元格上点一下,“这个格子”+“上下左右四个格子”,都会改变状态(亮变暗,或者暗变亮),(超出边界的忽略)。
比如,对于下图中的N=5,点击最左侧的红点,会使得黄色5个格子由暗变亮,再点击中间一幅图的红点,自身与周围的几个点,由亮变暗,或由暗变亮。
要解决的第一个问题,就是对于N,能否从“全灭”的状态,通过点击,达到“全亮”的状态。
答案自然是有的:
按照蓝色格子依次点击一遍即可得到“全亮”的结果
随之产生了一系列问题,比如:
- 对于任意的N,是否总是有解?
- 如果初始状态,棋盘上已经有些灯被点亮,能否把变成全亮,或者全灭?
- 怎样能求出一个解?复杂度多少?(也就是需要多少的计算量)
- 如果不止一个解,有多少个? 和N有什么关系? 如何求出最优解?(点击数量最少)
这些都已经有定论,我们暂时不展开。
解决这些问题的数学理论,一般属于大学数学一年级的范围,矩阵高斯消元法,加上一些离散数学的基本知识。一般一个大学二年级的学生,应该可以都可以看懂。
对于比较复杂的引申问题,比如解的数量,需要用到 斐波那契多项式的一些知识(对,就是那个两只兔子越生越多的那个东西)。
有不少文章,提到了一些算法,数量级是O((N^2)^3)=O(N^6),
(也有提到O(N^4.7xxx)的算法,不过貌似没有给出具体实现)。
尤其是对于N比较大的情况,比如N>1000,以当前的普通家用PC性能,就不够啦。
一个问题的解决啊,当然要靠编程技巧,但是也要考虑到算法学习的进程~!
这个问题有一个O(N^3)的解法,所以用现在的家用PC,(甚至不借助多核),对于N<100,1秒之内找到答案(注:不是最优解),对于N=1000左右,1-2分钟左右可以找到解。
(“迟到8年的美丽”一文的作者在初三的时候,也就是大概2006年,就自己考虑了许多的问题,并且动手做了不少工作,确实很聪明很难得……)
这个问题早在1997-1998年就被人研究过,也就是大概18年前。
并且,研究的很透彻(比如:何时有解?何时解不唯一?不唯一时,解有多少个?各种游戏的变种等等),并非像“迟到8年的美丽”一文文章里所说得那么晚。
值得一提的是,1998年的主流电脑,应该是类似奔腾II 233Hz,32M内存,售价要接近1万人民币,(对,你没有看错,可以去百度“1998年电脑主流配置”),现在你手里拿着的苹果三星华为小米等随便一个手机,比这种电脑不知道高到哪里去了~~~
- 这个网页基本搜集了许多相关的信息: Lights Out Mathematics
- 两篇主要论文在这里:
- [AF] Turning Lights Out with Linear Algebra, by M. Anderson and T. Feil (1998). Math Magazine, vol. 71, no. 4, October 1998, pp. 300-303.
- [GTK2] Characterizing Switch-Setting Problems, by John Goldwasser, William F. Klostermeyer, and George E. Trapp (1997). Linear and Multilinear Algebra, vol. 43, pp. 121-135.
好,我们先来看结果吧。
注意:以下对于每一个N,只是找到一个解,可以把“全灭”变成“全亮”
在N<1000的情况里,有几乎42%的情况有不止一个解,而且解的数量很多,是指数级,通过穷举是不太可能的。还没有找到更好的方法来找到最优解。
下面这张图片列出了对于N<=135时解的数量(如果N没有列出,就表示只有唯一的解):
比如对于N=123,因为解的数量实在太多,excel的精度都不够了。跟不要说N>1000时的情况了。
五.说明所采用的原型开发工具,展示系统原型模型
原型开发工具:VC++
展示:
七、初步开发计划(分工及计划安排)
UI设计:201731062220,201731062217 第八周
部分功能代码的编写,以及异常问题的处理日志:201731062221,201731062219,201731062218 第八周,第九周
整体代码的合并与测试:201731062222 第十周,第十一周
整体界面的再优化:201731062220,201731062217 第十一周
运行测试:全体 第十二周
整体优化及推广:全体 第十三周