结对编程-四则运算(挑战出题)成绩及点评
本次作业的题目博客 结对编程-四则运算(挑战出题)
先谈谈判断题目重复的问题
本次题目在题目去重上并没有给大家明确的提示,目的是希望大家自己思考出有一定可行性的方法,并且在评分上也没有严格要求一定不能有重复,只是重复越少得分越高。
同学们在如何判断题目重复上都花了不少心思,通过博客也表现出大家有相互交流,其中通过 运算结果不同来判定题目不同 的做法比较多。当然结果不同,题目肯定不同,但是结果相同,题目不一定相同,也就会出现很多误判的情况。这里带来的问题就是有可能无法完成条件苛刻的出题要求,比如限定3个运算符,出题10000道不重复题目,这个过程可能因为误判太多题目,最终找不到符合条件的题目,死循环,无法完成任务。
这里在公布成绩的同时,也给大家一个参考方法(只提供思路,不讲具体实现,通过搜索相关资料丰富,建议同学们自行参考并动手实现):
-
首先,同学们都会将中缀表达式转换为后缀表达式
-
接下来我们根据后缀表达式构建一棵表达式树也是非常容易的,参考Binary expression tree
-
按照题目描述
1+2+3
与3+(2+1)
是同一道题目,那么如何判断呢?我们按照上面的方式构建表达式树:
-
接下来操作就很简单了,看看是否能通过 有限次交换左右子树 来使得两棵树相同,如果可以,则两个表达式相同,反之不同。以上例子的实际操作如下:
我们尝试将1+2+3
转换成3+(2+1)
(当然反过来也是可以的)
-
按上面的操作,2次子树交换就完成了转换就达到目的,因此两个表达式是相同的,这样的两棵树也称为 同构
-
下面也有另一对表达式树,大家可以自己动手尝试看能否通过 有限次交换左右子树 来使得两棵树相同
如何交换两颗子树呢?
其实我们仅仅是要比较交换后的结果是否相同(是否同构),不必真正交换,伪代码如下:
bool isomorphic(tree1, tree2)
# 两棵树都为空,视作相同
if tree1 is NIL and tree2 is NIL
then return true
# 经过以上条件,一定有一棵树不为空,这时候有任意一棵树为空,则不同
if tree1 is NIL or tree2 is NIL
then return false
# 两棵树都不为空,比较当前节点
if tree1.value is not equal to tree2.value
then return false
# 如果当前节点相同,看看左子树与左子树比较,右子树与右子树比较的情况(即不交换比较一下)
if isomorphic(tree1.left, tree2.left) and isomorphic(tree1.right, tree2.right)
then return true
# 不交换的情况下比较结果不同,我们再试试交换左右子树比较一下
# 等等!加法和乘法有交换律,可是减法和除法交换后就有问题,因此我们只对加法和乘法做交换比较
if tree1.value is '+' or tree1.value is '*' # tree1和tree2当前节点的值都是一样的
then if isomorphic(tree1.left, tree2.right) and isomorphic(tree1.right, tree2.left)
then return true
# 交换比较也不同,则不同
return false
成绩
- 本次成绩以实际运行结果为准,除了同学们自己使用测试工具的几组测试参数(不能完成之前预设的测试参数,分数按题目要求折扣),本次主要评分使用另一组参数
- 评分使用的参数
10000 3 10000-3.txt
,即:- 生成
10000
道题目 3
个运算符- 输出结果至
10000-3.txt
- 生成
- 重复题目数计入成绩表(重复数越低分数越高)
- 耗时计入成绩表(耗时越少分数越高)
- 评分过程所有代码均在同一系统中进行,程序本身具有随机特性,加上环境不同,不保证与同学们自行测试结果相同,但理论上不会出现数量级差异。
详细成绩表
- JCF 基础分(按时提交)5分
- PSP PSP表格 5分
- XQFX 需求分析 5分
- SJSL 设计思路 5分
- DMJS 实现过程中的关键代码解释 5分
- KNJJ 遇到的困难及解决方法 5分
- JDPJ 对结对小伙伴做出评价 5分
- CFS 重复数
- HS 耗时
- DYPF 队友评分
- ZK 分数折扣
- CFSYS 重复数映射分数 10~45
- HSYS 耗时映射分数5~20
分组 | 学号 | 姓名 | JCF | PSP | XQFX | SJSL | DMJS | KNJJ | JDPJ | CFS | HS | DYPF | ZK | CFSYS | HSYS | 合计 | 映射分数 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 20162303 | 石亚鑫 | 5 | 5 | 3 | 2 | 2 | 3 | 2 | 267 | 747 | 48 | 1 | 43.14 | 19.31 | 74.71 | 95.43 |
1 | 20162307 | 张韵琪 | 5 | 5 | 3 | 2 | 2 | 3 | 4 | 267 | 747 | 52 | 1 | 43.14 | 19.31 | 77.46 | 97.52 |
2 | 20162324 | 春 旺 | 5 | 5 | 1 | 3 | 1 | 2 | 3 | 5000 | 10000 | 60 | 0.2 | 2 | 1 | 22.64 | 55.81 |
2 | 20162312 | 张家铖 | 5 | 5 | 1 | 3 | 2 | 2 | 4 | 5000 | 10000 | 40 | 0.2 | 2 | 1 | 24.46 | 57.2 |
3 | 20162330 | 刘伟康 | 5 | 5 | 4 | 4 | 4 | 4 | 2 | 9 | 3898 | 30 | 1 | 44.94 | 14.43 | 74.9 | 95.57 |
3 | 20162329 | 张旭升 | 5 | 5 | 2 | 3 | 3 | 3 | 4 | 9 | 3898 | 70 | 1 | 44.94 | 14.43 | 79.03 | 98.71 |
4 | 20162326 | 齐力锋 | 5 | 3 | 2 | 1 | 0 | 1 | 1 | 2700 | 10000 | 51 | 1 | 26.1 | 5 | 39.53 | 68.66 |
4 | 20162320 | 刘先润 | 5 | 3 | 2 | 1 | 1 | 1 | 1 | 2700 | 10000 | 49 | 1 | 26.1 | 5 | 40.34 | 69.28 |
5 | 20162325 | 金立清 | 5 | 5 | 2 | 2 | 3 | 1 | 1 | 234 | 298 | 35 | 1 | 43.37 | 20 | 70.01 | 91.85 |
5 | 20162311 | 张之睿 | 5 | 5 | 3 | 2 | 3 | 3 | 3 | 234 | 298 | 65 | 1 | 43.37 | 20 | 80.72 | 100 |
6 | 20162301 | 张师瑜 | 5 | 5 | 4 | 4 | 4 | 3 | 3 | 183 | 2128 | 35 | 1 | 43.73 | 17.17 | 77.02 | 97.19 |
6 | 20162308 | 马平川 | 5 | 5 | 4 | 3 | 4 | 3 | 0 | 183 | 2128 | 65 | 1 | 43.73 | 17.17 | 78.51 | 98.32 |
7 | 20162315 | 马 军 | 5 | 0 | 2 | 2 | 4 | 3 | 2 | 5000 | 10000 | 35 | 0 | 0 | 0 | 18 | 52.28 |
7 | 20162317 | 袁逸灏 | 5 | 5 | 1 | 3 | 3 | 2 | 2 | 5000 | 10000 | 65 | 0 | 0 | 0 | 21 | 54.56 |
8 | 20162306 | 陈是奇 | 5 | 5 | 2 | 2 | 0 | 2 | 2 | 9 | 4086 | 60 | 1 | 44.94 | 14.14 | 69.99 | 91.84 |
8 | 20162305 | 李昱兴 | 5 | 5 | 3 | 4 | 2 | 1 | 3 | 9 | 4086 | 40 | 1 | 44.94 | 14.14 | 71.45 | 92.95 |
9 | 20162327 | 王旌含 | 5 | 5 | 3 | 2 | 2 | 1 | 2 | 310 | 10000 | 30 | 0.9 | 38.55 | 4.5 | 54.01 | 79.68 |
9 | 20162321 | 王 彪 | 5 | 5 | 0 | 1 | 3 | 1 | 1 | 310 | 10000 | 70 | 0.9 | 38.55 | 4.5 | 55.18 | 80.57 |
10 | 20162310 | 林 臻 | 5 | 5 | 4 | 3 | 0 | 1 | 1 | 2 | 1943 | 22 | 0.7 | 31.5 | 12.22 | 52.49 | 78.52 |
10 | 20162314 | 王译潇 | 5 | 5 | 2 | 2 | 2 | 1 | 1 | 2 | 1943 | 78 | 0.7 | 31.5 | 12.22 | 58.83 | 83.35 |
11 | 20162309 | 邢天岳 | 5 | 5 | 1 | 2 | 1 | 2 | 1 | 1 | 1993 | 43 | 0.7 | 31.5 | 12.17 | 53.2 | 79.06 |
11 | 20162313 | 苑洪铭 | 5 | 5 | 2 | 2 | 1 | 2 | 1 | 1 | 1993 | 57 | 0.7 | 31.5 | 12.17 | 56.04 | 81.22 |
12 | 20162319 | 莫礼钟 | 5 | 5 | 1 | 1 | 1 | 0 | 0 | 176 | 595 | 20 | 1 | 43.77 | 19.54 | 61.12 | 85.09 |
12 | 20162302 | 杨京典 | 5 | 5 | 2 | 1 | 2 | 2 | 0 | 176 | 595 | 80 | 1 | 43.77 | 19.54 | 76.51 | 96.8 |
13 | 20162323 | 周 楠 | 5 | 5 | 2 | 2 | 1 | 2 | 4 | 272 | 521 | 40 | 1 | 43.1 | 19.66 | 72.46 | 93.72 |
13 | 20162322 | 朱娅霖 | 5 | 5 | 2 | 2 | 1 | 2 | 3 | 272 | 521 | 60 | 1 | 43.1 | 19.66 | 75.23 | 95.82 |
14 | 20162328 | 蔡文琛 | 5 | 5 | 2 | 1 | 0 | 2 | 0 | 5000 | 10000 | 45 | 0 | 0 | 0 | 15 | 50 |
14 | 20162316 | 刘诚昊 | 5 | 5 | 2 | 1 | 0 | 1 | 1 | 5000 | 10000 | 55 | 0 | 0 | 0 | 15 | 50 |
15 | 20162304 | 张浩林 | 5 | 5 | 3 | 4 | 3 | 0 | 2 | 38 | 4468 | 45 | 1 | 44.74 | 13.55 | 70.67 | 92.35 |
15 | 20162318 | 张泰毓 | 5 | 5 | 3 | 4 | 3 | 0 | 1 | 38 | 4468 | 55 | 1 | 44.74 | 13.55 | 71.42 | 92.92 |
备注
- 【第2组】在
100 1 100.txt
参数时无法完成生成(长时间不结束)。评分的用例10000 3 10000-3.txt
也无法完成。重复数按5000计,耗时按10s计。 - 【第4组】评分的用例
10000 3 10000-3.txt
也无法完成,重复数按100 3 100.txt
的重复率计,耗时按10s计。 - 【第7组】没能找到生成的题目,重复数按5000计,耗时按10s计,折扣计0。
- 【第9组】
30 1 30.txt
未生成题目,分数得90%。10000 3 10000-3.txt
评分用例无法完成,按照1000 3 1000.txt
的重复率来评估重复数,耗时10s计。
- 【第10组】有分数,随机空间增大,按约定得分比为70%。
- 【第11组】有分数,随机空间增大,按约定得分比为70%。
- 【第14组】生成题目不符合输入输出规范,重复数按5000计,耗时按10s计,折扣计0。
点评
- 张旭升同学本次作业率先完成作业,去重思路也有其他组引用(比如陈是奇/李昱兴组),并且在评分测试中也取得较好的去重效果。不过张旭升同学在博客上对自己的思路描述并不是很清楚,有待改进。
- 张师瑜同学在博客撰写上较为认真,并在“设计思路”中也体现对不同去重方法的效果进行实测,望继续保持并改进。
- 张浩林/张泰毓组在“设计思路”上描述简单清晰,评分测试中去重效果也不错,希望继续改进。
- 还有其他优秀的同学在这里就不一一提出了。希望大家多思考,多实践!
注意
- 需要核对代码实际运行情况的同学可以单独联系我取得执行结果。
- 对成绩有疑问的同学请在成绩发布后次日一天内(至2017-6-11 23:59截止)联系我进行复查,原则上仅处理环境相关问题,不予新提交的功能及问题修复代码进行重新评分。