这次的pairwork是跟韩佳胤一起的,之前不是很熟,通过这次pairwork,我们了解了对方,同时不是很完美但也解决了问题。本来自己之前是不会c#的,但老师给的框架是c#,只好硬着头皮学了。感觉还是学到了一些东西的,尤其是对接口等面向对象的思想和特性有了更深入的学习。
先说一下两人合作的优缺点吧:
优点:1.相互检查,更易找出错误。无论是算法还是代码,甚至是对问题的理解都能通过两个人的交流迅速判断出是否正确并合适。
2.相互约束,保证更多的时间写工程。合作的话需要更多的讨论,这样保证了更多的思考的时间,提高了工程的质量。
3.事半功倍。两人分别承担相应的工作,可以更专注的做自己的一部分。
4.锻炼交流能力。不解释。
缺点:如果两人各自做自己的代码,假如不小心有一个地方出现了矛盾,要修改的话还是挺麻烦的。如果出现一强一若并悬殊太大的话,弱的一方很难跟上,而且得不到很好的工程能力的锻炼。
韩佳胤的优点有:1.思想活跃,易相处。2.表达清晰有条理,很容易让别人明白他的想法和思路。3.代码风格十分好,尤其是注释。
缺点是:过于淡定,做工程没有急迫感。
这是我们一学习时的照片。
我们花了一些时间去阅读老师给的框架,发现好多接口,好多方法啊,看得非常的头晕,由于对c#掌握的还不太好,很多方法看得还不是太懂。后来从@李忠大神那里拿到了一份标有注释的原框架,之后的阅读就顺利的多了。研究了老师给的naive算法,第一感觉是这个算法弱爆了,怪不得叫naive算法,后来惊闻有人的第三组数据跑不过naive算法,我才仔细研究了naive算法,发现有时naive算法的效率还是不容忽视的,例如只有第0层和第20层有人,而且有很多人,他们这些人可能到任意一层,而且能够覆盖所有楼层,这时naive算法的优势就显现出来了。这种情况下naive算法不用做更多的判断即能有效的运输乘客。
之后我们就开始设计自己的算法,韩佳胤先提出了自己的想法,即在naive算法的基础上,每个电梯都在电梯内所有人要到的最近的楼层停,假如同时电梯外有人发出乘信号,则判断是否与电梯运动同向和电梯是否超员,之后在符合条件的电梯中找到离发信号楼层最近的一个去响应信号,如果都不合条件,则信号一直存在,直到有满足条件的电梯。我们讨论了这个算法,一致认为该算法的难点是如何找到电梯内这些人要去的楼层并冒泡出最近楼层。后来发现直接用数组存乘客的信息的话非常麻烦,因为涉及到删除信息,每下一个乘客都要处理数组,当人十分多的情况下非常麻烦。所以这个算法后来被否定了。后来有大神提到可以用ArrayList来存信息,由于该类包含了很多已经定义好的方法使用起来十分方便。
后来我们对这个想法进行了修改。就是在naive的基础上,判断下一个楼层是否有人下,并判断下一楼层是否有人发出信号,同时判断电梯自己的超员情况。这样决定是否停。这样会少停很多地方,就提高了效率,同时这样的话就不用考虑四部电梯之间的冲突。然后我可以在这个基础上进而判断下两层...其实我们还想到在上班时0,1层人很多,电梯没人时应停到下面,而到下班的时候电梯应该停到高层。但是后来还是有些接口的功能没有搞清楚,没有实现。
这是我们所写程序的类图:
其实如果这是一个公司的电梯的话,每天乘坐电梯的人的路经大概都是不会有什么变化的,电梯可以在运行一天后对这一天的数据进行统计,找到最优的方式,之后一直按着最优方式的算法运行就好了。这样的效率应该是最高的了。