NashZhou

广告算法工程师,目前致力于关键词广告的效果自动优化

一个数据结构设计实例(下)

把自己的需求又重新看了一下,首先 感谢下那位默默按顶的园友,不管怎样是他给了我 把(下)

写了的决心。因为由于以下原因,我没有完全实现(上)中的需求。

1.本人 较笨 短时间内 没想出 方法

2.这个模块的 效果重点是规则 参数的动态设定,因为不同的case 同一个规则的标准可能不一样

3.出于综合 考虑,只能妥协了一部分需求,你可以理解为我的借口,也可以理解为身不由己。

正文:

order_set 里 存了所有的order种类

opposite_dict里存储了所有互相矛盾的 order关系对

扫描了每条规则都会生成一个order_dict,例如:

order_dict={'rise_percent':0.1,'drop_percent':0.1,'level':2,'reason':'low power'}

所有的order_dict都存到 rule_result这个list里。

将rule_result里的规则 按照 level从低到高 排序 这么做的好处是,可以让低可信度的冲突,先抵消掉,然后在考虑高可信度的冲突

原本的需求是,高可信度的order有冲突,那么就由低可信度的决定。

现在是高可信度order冲突,这一对冲突order就无效

同时 同类型的order,高可信度的 要替代低可信度的

不同规则 产生的order reason不一样,通过这个 区分 是否是同一个规则 产生的order

好了 大致思想就是这样了

部分代码(python):

 1   def __summary(self):
 2         """
 3         总结规则 
 4         """
 5         self.order_dict = {}
 6         order_set = set(['rise_percent', 'drop_percent', 'grad_percent', 'delete_percent'])
 7         opposite_dict = {'rise_percent':'drop_percent', 'drop_percent':'rise_percent', \
 8                 'grad_percent':'delete_percent', 'delete_percent':'grad_percent'}
 9         #按level从小到大排序
10         self.rule_result.sort(key = lambda x:x['level'])
11         for rule in self.rule_result:
12             keys = order_set.intersection(set(rule.keys()))
13             for key in keys:
14                 level = key + '_level'
15                 reason = key + '_reason'
16                 opp_key = opposite_dict[key]
17                 opp_level = opp_key + '_level'
18                 opp_reason = opp_key + '_reason'
19                 
20                 if self.order_dict.has_key(key):
21                     if rule['level'] > self.order_dict[level]:
22                         if self.order_dict.has_key(opp_key) and self.order_dict[reason] != self.order_dict[opp_reason]:
23                             if rule['level'] == self.order_dict[opp_level]:
24                                 del self.order_dict[opp_key]
25                                 del self.order_dict[opp_level]
26                                 del self.order_dict[opp_reason]
27                                 continue
28                         self.order_dict[key] = rule[key]
29                         self.order_dict[level] = rule['level']
30                         self.order_dict[reason] = rule['reason']
31                 else:
32                     self.order_dict[key] = rule[key]
33                     self.order_dict[level] = rule['level']
34                     self.order_dict[reason] = rule['reason']

如果你有更好的想法,

也欢迎你与我讨论,有讨论 才有进步

好,先这样了

posted on 2013-01-26 22:42  NashZhou  阅读(600)  评论(0编辑  收藏  举报

导航