2017BUAA个人项目小结

一、作业链接

http://www.cnblogs.com/jiel/p/7545780.html

二、评分细则

0.注意事项

  • 按时间完成并提交——正常评分
  • 晚交一周以内——0分
  • 晚交一周以上或不交——倒扣本次作业分数
  • 抄袭——倒扣本次作业分数

1.博客细则

博客共15分,分布如下:

  • 在文章开头给出Github项目地址。(1')
  • 在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间。(0.5')
  • 解题思路描述。即刚开始拿到题目后,如何思考,如何找资料的过程。(3')
  • 设计实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?单元测试是怎么设计的?(4')
  • 记录在改进程序性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(由VS 2017的性能分析工具自动生成),并展示你程序中消耗最大的函数。(3')
  • 代码说明。展示出项目关键代码,并解释思路与注释说明。(3')
  • 在你实现完程序之后,在下述PSP表格记录下你在程序的各个模块上实际花费的时间。(0.5')

2.程序细则

程序共35分,分布如下:

  • 源代码管理评分,该评分主要通过源代码管理中的commit注释信息,增量修改的内容,是否有运行说明等给分。(2')

  • 正确性评分,正确性测试中输入范围限制在 1-1000,要求程序在 60 s 内给出结果,超时则认定运行结果无效。(20')

  • 错误处理,对-c参数进行一系列错误参数进行测试,根据程序是否能正常运行给分。(3')

  • 性能评分,性能测试中输入范围限制在 10000-1000000,没有时间的最小要求限制。(10')

    • 当程序的正确性评分等于20分时才可以参与性能评分环节,所以请各位同学务必保证自己程序的正确性。
    • 性能评分将采取档级评分制度,助教将根据同学们的程序跑同一数据耗费的时间长度将程序分为若干档,每一档的同学得到的分数为 10/档级数。
  • 附加题。(5')

三、博客分数列表

注:点击表头元素可进行排序

INDEX 作业地址 Github PSP前 思路 设计 优化 关键代码 PSP后 总分
1 15061183 1 0.5 3 4 3 3 0.5 15
2 15061144 1 0.5 3 4 2.5 2.5 0.5 14
3 15061104 1 0.5 3 3 1 2.5 0.5 11.5
4 15061132 1 0.5 3 2.5 3 2.5 0.5 13
5 15231196 1 0.5 2 3 3 3 0.5 13
6 15061111 1 0.5 2.5 3 2 2.5 0.5 12
7 15231058 1 0.5 3 3 2 2.5 0.5 12.5
8 15271106 1 0.5 3 3 3 2.5 0.5 13.5
9 15061199 1 0.5 3 4 3 3 0.5 15
10 15061188 1 0.5 2.5 3 3 2.5 0.5 13
11 15061074 1 0.5 2.5 3 3 2.5 0.5 13
12 15061119 1 0.5 2.5 3 2 2.5 0.5 12
13 15061080 1 0.5 2.5 2.5 2 3 0.5 12
14 15061180 1 0.5 2.5 3.5 2.5 2.5 0.5 13
15 15061075 1 0.5 3 2.5 2.5 2 0.5 12
16 15061187 1 0.5 2.5 3 3 3 0.5 13.5
17 15061101 1 0.5 2 2.5 1 2.5 0.5 10
18 15061129 1 0.5 3 3.5 3 3 0.5 14.5
19 15061186 1 0.5 2 3 2.5 2.5 0.5 12
20 15061189 1 0.5 2.5 4 2.5 3 0.5 14
21 15231177 1 0.5 3 2.5 2.5 2.5 0.5 12.5
22 15061067 1 0.5 2.5 2.5 3 0 0.5 10
23 15061151 1 0.5 2 3 2.5 3 0.5 12.5
24 14011100 1 0.5 3 3 3 3 0.5 14
25 15061175 1 0.5 2 3 2 3 0.5 12
26 14061213 1 0.5 2.5 2.5 1 3 0.5 11
27 15061069 1 0.5 2.5 3 2 3 0.5 12.5
28 15061085 1 0.5 1 0 0 0 0.5 3
29 15061122 1 0.5 3 3.5 3 3 0.5 14.5
30 15061077 1 0.5 2.5 2.5 0 2 0.5 9

四、自动测试得分列表

测试结果详见:http://www.cnblogs.com/ChildishChange/p/7609751.html

得分说明:

  • 如果进行一次额外的修改,修改系数减0.1
  • 每一项测试的前五项为正确性测试,每项2分满分
  • 每一项测试的后两项为性能测试,每项2.5分满分
    • “-c 50000”测试中,以1s划档
    • “-c 1000000”测试中,以10s划档
    • “-s 50000puzzle.txt”测试中,以10s划档
    • “-是1000000puzzle.txt”测试中,以60s划第一档,300s划第二档

最终得分为:(“-c”正确性得分+“-c”性能得分)ד-c”修改系数+(“-s”正确性得分+“-s”性能得分)ד-s”修改系数

INDEX 作业地址 正确性得分 性能分1(1s分档 性能分2(10s分档 -c总分 “-c”修改系数 正确性分 性能分1(10s "性能分2(60s,300s" -s总分 “-s”修改系数 总分
1 14011100 10 2.5 2.5 15 1 10 2.5 2.5 15 1 30
2 14061213 10 1.25 0 11.25 1 10 1.25 0 11.25 1 22.5
3 15061067 10 2.5 1.25 13.75 1 10 2.5 2.5 15 1 28.75
4 15061069 0 0 0 0 1 10 1.25 0 11.25 1 11.25
5 15061074 4 0 0 4 0.9 10 1.25 1 12.25 1 15.85
6 15061075 10 2.5 1.25 13.75 1 10 2.5 1.25 13.75 1 27.5
7 15061077 10 0 0 10 1 10 0 0 10 0.8 18
8 15061080 10 0 0 10 1 10 1.25 1 12.25 1 22.25
9 15061085 0 0 0 0 1 0 0 0 0 1 0
10 15061101 4 0 0 4 1 2 0 0 2 1 6
11 15061104 10 1.25 0 11.25 1 10 0 0 10 1 21.25
12 15061111 10 2.5 1.25 13.75 1 10 1.25 1.25 12.5 1 26.25
13 15061119 10 2.5 2.5 15 1 10 2.5 1.25 13.75 1 28.75
14 15061122 10 2.5 2.5 15 1 10 2.5 1.25 13.75 1 28.75
15 15061129 10 2.5 2.5 15 1 10 2.5 1.25 13.75 0.9 27.375
16 15061132 10 2.5 0 12.5 1 10 2.5 1.25 13.75 1 26.25
17 15061144 10 2.5 2.5 15 1 10 2.5 2.5 15 1 30
18 15061151 10 2.5 1.25 13.75 1 10 1.25 0 11.25 1 25
19 15061175 10 2.5 2.5 15 1 10 2.5 2.5 15 1 30
20 15061180 10 2.5 2.5 15 1 10 2.5 2.5 15 1 30
21 15061183 10 2.5 2.5 15 1 10 2.5 2.5 15 1 30
22 15061186 10 2.5 2.5 15 1 10 2.5 1.25 13.75 1 28.75
23 15061187 10 2.5 2.5 15 1 10 2.5 1.25 13.75 1 28.75
24 15061188 10 0 0 10 0.9 10 1.25 1 12.25 1 21.25
25 15061189 10 2.5 2.5 15 0.9 10 1.25 0 11.25 0.9 23.625
26 15061199 10 2.5 2.5 15 1 10 2.5 1.25 13.75 1 28.75
27 15231058 10 2.5 2.5 15 1 10 2.5 2.5 15 1 30
28 15231177 10 2.5 1.25 13.75 1 10 1.25 0 11.25 0.9 23.875
29 15231196 10 2.5 2.5 15 1 10 2.5 1.25 13.75 1 28.75
30 15271106 10 2.5 2.5 15 1 10 2.5 1.25 13.75 1 28.75

五、总分

INDEX 作业地址 博客分数 Github 自动测试得分 错误处理 附加题 总分(不计附加 总分
1 14011100 14 2 30 3 5 49 54
2 14061213 11 2 22.5 2.5 5 38 43
3 15061067 10 2 28.75 2 0 42.75 42.75
4 15061069 12.5 0 11.25 3 0 26.75 26.75
5 15061074 13 2 15.85 3 5 33.85 38.85
6 15061075 12 0 27.5 3 0 42.5 42.5
7 15061077 9 1 18 2.5 0 30.5 30.5
8 15061080 12 0 22.25 3 0 37.25 37.25
9 15061085 3 0 0 2 0 5 5
10 15061101 10 0 6 3 0 19 19
11 15061104 11.5 1 21.25 0.5 0 34.25 34.25
12 15061111 12 2 26.25 3 0 43.25 43.25
13 15061119 12 2 28.75 3 0 45.75 45.75
14 15061122 14.5 2 28.75 3 0 48.25 48.25
15 15061129 14.5 2 27.375 2.5 0 46.375 46.375
16 15061132 13 0 26.25 3 0 42.25 42.25
17 15061144 14 2 30 3 0 49 49
18 15061151 12.5 0 25 3 0 40.5 40.5
19 15061175 12 2 30 1.5 0 45.5 45.5
20 15061180 13 2 30 3 0 48 48
21 15061183 15 2 30 3 5 50 55
22 15061186 12 1 28.75 3 0 44.75 44.75
23 15061187 13.5 1 28.75 3 5 46.25 51.25
24 15061188 13 2 21.25 3 0 39.25 39.25
25 15061189 14 1 23.625 2 0 40.625 40.625
26 15061199 15 2 28.75 0 5 45.75 50.75
27 15231058 12.5 0 30 3 0 45.5 45.5
28 15231177 12.5 2 23.875 2.5 0 40.875 40.875
29 15231196 13 2 28.75 2.5 0 46.25 46.25
30 15271106 13.5 2 28.75 3 0 47.25 47.25

六、一些问题

1.晚交、错交

本次作业有两位同学在截止日期后才交上作业,原因分别是:

  • xxx同学:完成了程序与博客,忘记在班级博客中提交。
  • xx同学:完成了程序与博客,却提交至个人作业week1中。

希望大家以后能注意:D

2.正确性测试

大家出乎意料的,程序效率都很高,但是第一轮测试之后也暴露了不少问题:

2.1审题出现了问题:

  • 左上角固定数字出错

2.2程序鲁棒性问题:

  • 若题目文件最后一个题目的最后一个数字后有两个回车,则会多输出一个自己生成的数独;若只有一个回车,则正常
  • 若题目文件最后一个题目的最后一个数字后只有有一个个回车,则不会求解最后一题;若有两个个回车,则正常
  • 若题目文件最后一个题目的最后一个数字后有两个回车,则程序崩溃,若只有一个回车,则正常

2.3出题者的问题:

  • 作业在要求时没有明确说明生成文件时是追加在原文件后还是覆盖原文件

这主要是我的问题,但希望下次对题目有异议时,请联系助教或老师:D

2.4程序算法的问题:

  • 有几个同学在测试大数时生成了重复的数独

正如某位同学在更正了程序之后在博客中说的一样:

这就是多写一个测试程序的事

因此,我建议不论你的算法是否能从原理上避免重复数独,最好进行一下相关测试。这样你也安心,我也省事,不是很好吗:D

然后我猜有人问:“助教,我不知道怎么判重,两个两个比较太麻烦了”

这里根据同学们的博客整理三种判重的方法:

不管你是否还用得到,学习一下别人的思路,也是极好的:D

3.性能测试

这次性能测试使用的题目是我自己生成的,然后从生成的终局中随机挖掉一半的空。

也就是说这个测试样例实际上是对一些朴素的算法,比如回溯法,是相当友好的。

后来某位同学给了我一份含有49121个只有17个已确定的数字的数独,于是我又测了一遍,结果是这样的,大家随意感受一下:

我没有否认大家的算法和优化,毕竟这次测试并没有算分,而且大多数同学都在自动测试的部分得到了较高的分数。这次测试主要体现了大家的程序是否能在极端情况下正常地工作。因此在这里对通过了这个测试的同学提出表扬:D,其他同学也不要气馁,毕竟你们的程序也很好地完成了基础的要求:D

4.错误处理

错误处理测试了这六个参数,每个0.5分:

  • "-c"
  • "-c -100"
  • "(空参数"
  • "-c 1000000000000000"
  • "-abc"
  • "-c asd"

虽然大多数同学都拿到了错误处理的分数,但是有那么些问题:

  • 对错误的分类处理出了问题,导致不同的错误得到了相同的反馈
  • 反馈结果让人莫名其妙
  • 没有反馈
  • 直接崩溃

错误处理做得越好,用户体验就越好。希望大家能重视。

这里表扬一下:

15061074

15061186

14061213

这三个同学的错误处理,[捂脸]但是因为他们博客里没有错误处理的部分,所以我这里推荐一下福大郑浩辉同学的博客作为他山之石

这是他的错误提示:

-【开始校验参数】【校验参数中】请输入生成数量
-【开始校验参数】【校验参数中】生成数量只能是数字
-【未知指令】试试 -help ?
-【请输入指令及相关参数】试试 -help ?
-【开始校验参数】【校验参数中】请勿输入多余参数

同时郑同学的博客排版美观,思路清晰,建议大家去学习一下。链接:http://www.cnblogs.com/andwho/p/7500515.html

5.Github提交规范

这次提交的作业里,有这种画风的:

还有这种画风的:

本次作业要求的是“代码有进展即签入”稍有出入,也就是说,签入记录大体上应该是这样的:

以下摘自:[福大软工] Z班 第2次成绩排行榜

这是陈翔同学的博客:他的项目不仅有完整的运行说明,可读的commit信息注释,恰当的commit频率,还配置了集成测试。这个简直是一份完美的Github项目范例,推荐给各位同学。链接:http://www.cnblogs.com/qq952693358/p/7487056.html

这里推荐大家学习福州大学的陈翔同学整理的Github提交规范心得:D

https://github.com/Wasdns/github-example-repo

七、一些总结

1.算法

同学们使用的算法大概有这几种:

  • 随机+回溯
  • 行列变换
  • 数字重新映射
  • DLX

在中小数据上,随机产生与回溯的方法较为简单同学们优化做得太好了导致中小数据上看不出差别[捂脸]。部分同学使用了生成等价数独的方法,这个方法的好处是从根本上避免了重复数独的出现(尽管一些同学出现了重复的问题);同时也有同学考虑到求解和生成终局实际上可以使用同一个算法来解,这是也一个很好的思路。

2.优化

同学们进行的优化大概有这么几种:

  • DEBUG -> RELEASE
  • 优化IO
  • 优化算法

第一个改进是最容易的,在生成时使用RELEASE模式而不是DEBUG模式。

简单说一下这两个模式的区别:

你们编译课大概在下半个学期会学到“编译优化”的部分(包括循环优化,控制优化,活跃变量分析等)。在DEBUG模式下编译器是不会对程序做优化的,但是RELEASE模式下会,但是编译速度会受到影响。

感兴趣的同学可以参看:DEBUG和RELEASE模式的区别

第二个则是大多数同学都会进行的优化,比较简单,而且修改幅度也不大,大致有以下的方法:

  • 1.一次输出一个数->一次输出一个终局->把终局存起来一次性输出
  • 2.使用string->使用字符数组
  • 3.使用 ofstream 与 << ->使用fwrite,fprint

第一种方法减少了IO次数,第二、三种方法使用了底层的数据类型或方法,减少了开销,因此会使性能大大上升

第三个则是算法的优化,这里不再赘述

3.推荐博客

15061183-[2017BUAA软工]个人项目-数独

15061189-个人项目-数独

15061129-[2017BUAA软工]第一次个人项目 数独的生成与求解

15061122-个人作业 数独

[2017BUAA软工助教]个人项目小结的更多相关文章

  1. [2017BUAA软工助教]结对项目小结

    2017BUAA结对项目小结 一.作业链接 http://www.cnblogs.com/jiel/p/7604111.html 二.评分细则 1.注意事项 按时间完成并提交--正常评分 晚交一周以内 ...

  2. [2017BUAA软工助教]个人项目准备工作

    BUAA软工个人项目准备工作 零.注册Github个人账号(你不会没有吧..) 这是Git的使用教程: http://www.cnblogs.com/schaepher/p/5561193.html ...

  3. [2017BUAA软工助教]个人项目测试结果

    个人项目测试结果 标签(空格分隔): 未分类 9.29第一次测试结果 注:点击表头内相应项目可针对该项目进行排序 -c测试结果 INDEX NumberID -c 1 -c 5 -c 100 -c 5 ...

  4. [2017BUAA软工助教]案例分析小结

    BUAA案例分析小结 一.作业要求 http://www.cnblogs.com/jiel/p/7631784.html 二.统计数据 总人数 神策数据 博客园博客 必应词典 30 1 12 17 三 ...

  5. [2019BUAA软工助教]结对编程 - 小结

    [2019BUAA软工助教]结对编程 - 小结 一.评分规则 博客 博客共五十分 序号 要求 分值 1 在文章开头给出Github项目地址 1 2 在开始实现程序之前,在下述PSP表格记录下你估计将在 ...

  6. [2019BUAA软工助教]第一次阅读 - 小结

    [2019BUAA软工助教]第一次阅读 - 小结 一.评分规则 总分 16 分,附加 2 分,共 18 分 markdown格式统一且正确 - 2分 不统一:扣 1 分 不正确:扣 1 分(例如使用代 ...

  7. [2018福大至诚软工助教]alpha阶段小结

    [2018福大至诚软工助教]alpha阶段小结 一.得分 1. 冲刺(7次 Scrum) 150分 1)第1篇(25分) 项目 评分标准 各个成员在 Alpha 阶段认领的任务 (6分)视详细程度给分 ...

  8. [2018福大至诚软工助教]UML设计小结

    [2018福大至诚软工助教]UML设计小结 一.得分 总分(50分) 团队信息 (4分) 队名 (1分) 团队成员的学号与姓名(需要标注队长)(1分) 本次作业的博客链接(1分) 三者完全,4分 团队 ...

  9. [2017BUAA软工助教]收集个人信息

    如题 我们要收集三个东西 1.学号 2.Github地址 ① 3.博客园博客地址 ② 请各位同学自行创建,并按照如下的格式评论在这篇博客下 "14061195+https://github. ...

随机推荐

  1. 两层c:forEach循环嵌套

    jsp中两级菜单如何用c:forEach输出 items 要被循环的信息 否 无 begin 开始的元素(0=第一个元素,1=第二个元素) 否 0 end 最后一个元素(0=第一个元素,1=第二个元素 ...

  2. Windows 快捷方式(*.link)打开方式关联错误

    1.Win+r 组合键打开 “运行”,输入 “regedit” 打开 注册表 2.依次打开注册表,定位到以下位置: HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDO ...

  3. LeetCode算法题-Add Digits(Java实现-3种解法)

    这是悦乐书的第199次更新,第207篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第63题(顺位题号是258).给定非负整数num,重复添加其所有数字,直到结果只有一位数 ...

  4. 日志收集(ElasticSearch)串联查询 MDC

    之前写过将应用程序或服务程序产生的日志直接写入搜索引擎的博客 其中基本过程就是  app->redis->logstash->elasticsearch 整个链路过程  本来想将re ...

  5. June 16. 2018, Week 24th. Saturday

    Success is the ability to go from one failure to another with no loss of enthusiasm. 成功,就是即使经历过一个又一个 ...

  6. May 30. 2018 Week 22nd Wednesday

    Never forget to say "Thanks." 永远不要忘记说谢谢. Don't take anything we get for granted, and never ...

  7. 【Linux基础】VI命令模式下删除拷贝与粘贴

    在VI命令模式下:y 表示拷贝, d 表示删除,p标识粘贴 1.删除 dw 表示删除从当前光标到光标所在单词结尾的内容. d0 表示删除从当前光标到光标所在行首的内容. d$ 表示删除从当前光标到光标 ...

  8. 如何设计一个"好的"测试用例?

    什么才算是“好的”测试用例? 好的测试用例一定是一个完备的集合,它能够覆盖所有等价类以及各种边界值,而跟能否发现缺陷无关. "好的"测试用例必须具备哪些特征? 一个“好的”测试用例 ...

  9. Spring Boot+Spring Security+JWT 实现 RESTful Api 权限控制

    摘要:用spring-boot开发RESTful API非常的方便,在生产环境中,对发布的API增加授权保护是非常必要的.现在我们来看如何利用JWT技术为API增加授权保护,保证只有获得授权的用户才能 ...

  10. 【ES6】=>含义

    =>是es6语法中的arrow function (x) => x + 6 相当于 function(x){ return x + 6; }; var ids = this.sels.ma ...