C 实现功能结构:使用什么数据类型?
简单来说,特征结构是属性值对的无序列表C 实现功能结构:使用什么数据类型?,c,data-structures,C,Data Structures,简单来说,特征结构是属性值对的无序列表 [number:sg, person:3 | _ ], 可嵌入以下内容: [cat:np, agr:[number:sg, person:3 | _ ] | _ ], 是否可以对内容进行子索引并共享值 [number:[1], person:3 | _ ], 其中[1]是另一个特性结构(即,它允许重入) 我的问题是:人们认为应该用什么样的数据结构来实现这一点,以便以后访问值,在两个fts之间执行统一,并“键入”它们,等等 关于这方面有一本完整的书,
[number:sg, person:3 | _ ],
可嵌入以下内容:
[cat:np, agr:[number:sg, person:3 | _ ] | _ ],
是否可以对内容进行子索引并共享值
[number:[1], person:3 | _ ],
其中[1]是另一个特性结构(即,它允许重入)
我的问题是:人们认为应该用什么样的数据结构来实现这一点,以便以后访问值,在两个fts之间执行统一,并“键入”它们,等等
关于这方面有一本完整的书,但它是用lisp编写的,它简化了列表处理。因此,我的选择是:列表哈希、列表列表或trie。人们对此有何看法?更仔细地思考价值的构成。 我会尝试可能有效的最简单的方法:
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;
}
在这一点上,你可以开始做生意了。如果“成对列表”不是正确的表示形式,您可以更改它。在不知道您计划什么运营或您对成本模型的期望值的情况下,我将从这里开始。然后,如果您需要更高效的方法,我可能会使用三元搜索树表示一个功能结构,并对值保持相同的表示形式