电梯升降
github: https://github.com/Seast90/Elevator
方案 | 代码行数 | bug数 |
---|---|---|
A | 预计200+ | 预计20+个 |
B | 120 | 20个 |
优化过程
模拟现实的电梯写的代码。
本来想写A方案的贪心思路,就是仅靠当前数据进行权值计算来判断电梯接下来应该如何运作,但是由于思路不完整并且觉得仅仅凭借权值判断会出现有些情况无法最优的情形,所以思路A只写了一个模板,然后去写了思路B的代码,就是在当前时间暴力dfs每种电梯可行的情况中最优的情况,用字符串存储电梯的运作,然后读取最优运作的字符串进行电梯的调度。
优化主要在dfs的思路上的优化和代码的debug,运行过程中我发现我的dfs有部分可以剪枝,所以对代码进行了大刀阔斧的整改,在出的几个测试数据都没有bug的情况下我提交了代码。
对于贪心的权值判断我有个大概的框架,但是并不能保证所有情况下都能最优,所以还没决定要如何写贪心策略的代码。
测试数据
在一层楼 停下多次 载客:
来回载客的复杂情况:
选取最优策略的判断:
复杂情况选取策略:
电梯中途掉头的情况:
电梯不掉头等待乘客的情况:
总体来说满足我的预期并且在图二情况中跑赢了stolf犇犇的贪心电梯,也从侧面证实了我对贪心策略无法做到百分百最优策略的判断(但是其他五种情况都一样 stolf犇犇太强了%%%)
收获
一开始以为这题并不难 所以水了几天只思考没实践,后来开始实践的时候才发现自己考虑的还是太少了,还是有些部分没有考虑清楚,
其中包括对贪心策略的判断,一开始觉得这个策略不会很难想,后来发现很难将这个策略做到极致,总会有些小情况是没办法完美解决的,
所以改写了暴力的代码,并且发现暴力的代码也是一样的不好写= =。debug了几个小时的终于把问题解决清楚,总的来说对于B代码还是比较满意的,
但是对于A代码没写出来还是有些不满意,同时也得多留心生活中的一些小事情,说不定之后就会遇到同样的代码题(