【问题标题】:implementing feature structures: what data type to use?实现特征结构:使用什么数据类型?
【发布时间】:2023-03-17 20:25:01
【问题描述】:

简单来说,特征结构是属性值对的无序列表。

[number:sg, person:3 | _ ],

可以嵌入:

 [cat:np, agr:[number:sg, person:3 | _ ] | _ ],

可以对内容进行子索引并共享价值

[number:[1], person:3 | _ ],

其中 [1] 是另一个特征结构(也就是说,它允许重入)。

我的问题是:人们认为应该使用什么数据结构来实现以后访问值、执行 2 英尺之间的统一、“键入”它们等等。

这方面有一本完整的书,但它是用 lisp 编写的,它简化了列表处理。所以,我的选择是:列表的哈希、列表的列表或 trie。人们对此有何看法?

【问题讨论】:

    标签: c data-structures


    【解决方案1】:

    仔细想想什么是价值。 我会尝试可能可行的最简单的方法:

    typedef struct value {
       enum { INT, BOOL, STRING, FEATURE_STRUCTURE } ty;
       union {
         int int;
         bool bool;
         char *string;
         struct fs *feature_structure;
       } u;
    } *Value;
    
    typedef struct fs * { // list of pairs; this rep could change
        struct avpair *pair;
        Value value;
    } *Feature_Structure;
    
    struct avpair {
       const char *attribute;
       Value value;
    };
    

    你会想要一堆构造函数,比如

    Value mkBool(bool p) {
      Value v = malloc(sizeof(*v));
      assert(v);
      v->ty = BOOL;
      v->u.bool = p;
      return v;
    }
    

    此时您可以开始做生意了。如果“对列表”结果不是正确的表示,您可以更改它。在不知道您计划什么操作或您对成本模型的期望是什么的情况下,我将从这里开始。然后,如果您需要转向更高效的方法,我可能会使用三元搜索树来表示特征结构,并为Value 保持相同的表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      相关资源
      最近更新 更多