zoukankan      html  css  js  c++  java
  • 一个数据结构设计实例(下)

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

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

    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']

    如果你有更好的想法,

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

    好,先这样了

  • 相关阅读:
    LeetCode 24. Swap Nodes in Pairs (两两交换链表中的节点)
    LeetCode 1041. Robot Bounded In Circle (困于环中的机器人)
    LeetCode 1037. Valid Boomerang (有效的回旋镖)
    LeetCode 1108. Defanging an IP Address (IP 地址无效化)
    LeetCode 704. Binary Search (二分查找)
    LeetCode 744. Find Smallest Letter Greater Than Target (寻找比目标字母大的最小字母)
    LeetCode 852. Peak Index in a Mountain Array (山脉数组的峰顶索引)
    LeetCode 817. Linked List Components (链表组件)
    LeetCode 1019. Next Greater Node In Linked List (链表中的下一个更大节点)
    29. Divide Two Integers
  • 原文地址:https://www.cnblogs.com/2010Freeze/p/2878265.html
Copyright © 2011-2022 走看看