我不知道你在用什么编程语言,但是在我看来,就像你在描述一个directed acyclic graph一样,简而言之,它是一个带有箭头连接的点的集合,但是没有没有任何周期。
这是一个非常常见的结构。例如,它描述了使用自动软件安装(如许多Linux发行版)的操作系统中软件包的依赖性。它描述了研究论文中的引文,其中一篇论文可以引用许多其他论文,一篇论文可以被许多其他论文引用,但两篇论文没有意义相互引用。
表示此数据结构的最佳方式取决于编程语言以及您需要使用的语言。要做到这一点大多数编程语言最简单的方法是简单地通过参看有每个对象链接到其他对象,像:
struct Song {
std::string name;
std::vector<struct Foo*> originals;
};
这是一个简单的事情,找到一个给定的歌曲的每一个“原始”,但找到每一个“混音”要花费更多。您可以通过混音链接来增强结构并确保一致性,但在这两种情况下,您都必须确保没有循环。
在SQL数据库中,你可以描述这种关系就像这样:
CREATE TABLE songs (
id SERIAL PRIMARY KEY,
name TEXT
);
CREATE TABLE is_remix_of (
remix INT REFERENCES songs(id),
original INT REFERENCES songs(id)
);
CREATE INDEX remix_to_original ON is_remix_of(remix);
CREATE INDEX original_to_remix ON is_remix_of(original);
再次,你必须找到一个方法来防范周期。