3

当 2 个哈希匹配时用单词解释是很复杂的,因此,请参见示例:哈希模式存储在如下列表中:(我使用 JavaScript 表示)

pattern:[
    0:{type:'circle', radius:function(n){ return n>10; }},
    1:{type:'circle', radius:function(n){ return n==2; }},
    2:{type:'circle', color:'blue', radius:5},
    ... etc]

var test = {type:'circle', radius:12};

test 应该与模式 0 匹配,因为 pattern[0].type==test.type && pattern.radius(test.radius)==true。

因此,尝试使用单词时,如果哈希的每个值都等于模式的值,或者在作为函数应用时返回 true,则哈希匹配模式。

我的问题是:是否有一种算法可以在不测试所有模式的情况下找到与某个哈希匹配的所有模式?

4

1 回答 1

1

考虑一个动态的递归决策树结构,如下所示。

decision:[
    field:'type',
    values:[
        'circle': <another decision structure>,
        'square': 0, // meaning it matched, return this value
        'triangle': <another decision structure>
    ],
    functions:[
        function(n){ return n<12;}: <another decision structure>,
        function(n){ return n>12;}: <another decision structure>
    ],
    missing: <another decision structure>
]

d 上的算法(一个决策结构):

if test has field d.field
    if test[d.field] in d.values
        if d.values[test[d.field]] is a decision structure
            recurse using the new decision structure
        else
            yield d.values[test[d.field]]
    foreach f => v in d.functions
        if f(test[d.field])
            if v is a decision structure
                recurse using the new decision structure
            else
                yield v
else if d.missing is present
    if d.missing is a decision structure
        recurse using the new decision structure
    else
        yield d.missing
else
    No match
于 2012-09-02T19:39:00.023 回答