第二次结对编程作业

github
队友博客
作业博客

具体分工

队友负责ui的设计,我负责 后端ai的实现和 网络接口的衔接。

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 60
Estimate 估计这个任务需要多少时间 1000 2000
Development 开发 300 480
Analysis 需求分析 (包括学习新技术) 120 180
Design Spec 生成设计文档 30 40
Design Review 设计复审 10 15
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 30
Design 具体设计 240 300
Coding 具体编码 1000 1200
Code Review 代码复审 180 240
Test 测试(自我测试,修改代码,提交修改) 300 360
Reporting 报告 20 30
Test Repor 测试报告 30 60
Size Measurement 计算工作量 30 60
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 30
合计 2300 3100

解题思路

刚拿到题目就想到了 可以直接暴力枚举所有情况,因为总情况的数量是很少的 仅有 7w多种, 对于每种情况赋一个大致的估值进行排序, 粗略的筛掉大部分的情况, 留下小部分的情况, 对于小部分情况再进行细致的筛选,

网络接口的使用


用py写(偷)的网络接口

类图

函数名 函数作用
ans 输出答案
check 判断该牌型是否合法,合法就丢入粗筛数组中
dfs 深度优先搜索 枚举所有情况
doit 运行算法, 记录答案
fc_to_number 花色hash
num_to_number 大小hash
number_to_fc 花色逆hash
number_to_num 大小逆hash
pk 细筛进行大小比较

算法的关键与关键实现部分流程图

我觉得关键的部分是对于牌型的分析, 枚举部分过于简单个人认为并不关键。

有价值的代码片段

枚举部分

dfs算法,将牌型转成二进制位,记录已选的牌型和未选的牌型。

性能分析

从中可以看出来, 时间占用最多的是 枚举算法之后 计算权值的时间, 于是我优化了计算权值的方法, 减少了枚举的次数, 进行了一部分剪枝之后大幅度优化了时间。

单元测试

测试思路

先测试 是否正确的枚举了所有情况, 然后测试分值函数是否正确, 之后测试 比较函数是否正确, 最后测试 答案是否优秀。

commit记录

遇到的代码模块异常或结对困难及解决方法

问题描述

网络接口用c++实现很复杂

做过哪些尝试

尝试用c++解决,但是发现太麻烦了, 最后选择py

是否解决

已解决

有何收获

学会了不能一直依赖C++, 以及学习了python对网络接口的调用。

评价队友

值得学习的地方

队友做了很多我不会的事情,ui图片的设计方面值得我好好学习。

值得改进的地方

代码方面可能写的比较少,但是大部分问题还是解决的非常好。

学习进度条

学习进度条

第一周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
1 0 0 6 6 对墨刀有了初步的了解
2 0 0 15 21 临时恶补作业所需知识
3 1200 1200 20 41 设计算法和UI
4 300 1500 11 52 对接以及各种调试
posted @ 2019-10-15 20:01  Seast  阅读(201)  评论(2编辑  收藏  举报