
头:小W我要写一个自动化脚本来模拟发送网络请求,其中网络请求中有下面几个因子,你给我用全排列的方式生成吧~
(示例)
hid | md5 | 64位/32位 |
---|---|---|
123 | abc | 32 |
456 | cde | 64 |
小W:没问题,分分钟搞定。
....一个小时过去了
小W:头,头,我写好了~
头:嗯,不错,效率蛮高吗,拿给我看看
小W:好
(下面是小W的代码)
头:哥屋恩~
...十分钟后
头:小W啊,不是我说你啊,你这代码,产品那边改个策略,加个因子,你就要改次代码,是不是很麻烦啊。写代码要注意扩展性,要注意...
...半小时后,小W幡然醒悟,决定重新做人
...经过多天的博览群书
小W:头,头,我找到了新做法了,很高大上的~
(下面是小W洗心革面之后的代码)
高(hen)大(chang)上(jian)的递归解法,所有因子以及对应的情况维护在一个文档,函数自己去文档按顺序读出所有因子。第一次在第一个数组去一个因子,递归调用去第二个数组取因子,直到取到最后一个数组,这时候就是一条完整的Case。然后每个数组遍历取元素,就可以得到所有路径了。
头:很赞(bai)许(yan)地看了小W一眼,不错,比上次好多了,至少不用随着策略修改去改脚本代码了,有一定的扩展性~
小W:嘿嘿(傻笑)
头:不过嘛,递归也有不好的地方,比如说容易爆栈什么的 ...
小W:傻眼...
...过了不知多少天,小W仍然在默默奋斗
...在一个偶然的机会,小W听说了状态压缩这个名词
小W:头,头,这次真有牛B做法了
头:白眼~
(下面是小W认为比较牛B代码)
其实这里就是一个全状态的枚举,我们用一位数记录一个因子的状态,最后将这些数合起来,从小到大枚举,得到的就是全状态。
示例:对于上面个例子,由于每个因子只有两种状态,我们就可以用三个二进制数来表示,那么合起来后就是一个三位的二进制数,最小值为0,最大值为7,我们从0枚举到7,就可以得到全状态。
头:恩,这次算你还比较认真,终于能有个较新颖的解法(这孩子总算还有救)
如需转载该篇文章,请注明来自“搜狗测试”