Mik*_*ier 5 algorithm pattern-matching
假设我有以下类别(带有可能的值):
animal: any, cat, dog
color: any, white, black, gray
gender: any, male, female
[...]
或更一般地......
category: <array of values>
(1)假设我有一组可配置的规则,例如:
when animal is any, color is gray, gender is male, call x
when animal is dog, color is gray, gender is male, call y
when animal is any, color is any, gender is any, call z
[...]
(2)和一些输入值.
问:是否有一种算法可以根据给定的输入解决找到匹配规则(优先考虑最具体的规则)的问题?
第Ex.I:
input (animal:dog, color:gray, gender:male)
它会叫"y"
例2:
input (color:gray, gender:female)
它会叫"z"
更合适的方法是根据规则构建搜索树(树的每个级别是一个类别)?
喜欢:
- any animal
  - any color
    - any gender => z
  - gray
     - male => x
- dog
  - gray
     - male => y
有没有更好的方法呢?
谢谢!
经过以下修改的决策树将起作用:
递归遍历时,遍历“value”和“any”,并跟踪每个解决方案中的“any”数,返回“any”最少的那个
def traverse(values, level, tree,anyCount): 如果树是叶子: return (appr_func, anyCount)
v1 = None
if values[level] in tree:
    v1 = traverse(values, level+1, tree[values[level]]], anyCount)
v2 = None
if 'any' in tree:
    v2 = traverse(values, level+1, tree['any'], anyCount+1)
if v1!=None:
    if v2!=None:
        if v1[1]<v2[1]:
            return v1
        else:
            return v2
    else:
        return v1
elif v2!=None:
    return v2
else:
    return None