0

我已经开发出生成单个史诗数组的需求。一开始看起来相当标准,例如:

epic = {
    0 : "epic parent"
    1 : {
        0 : "bob child",
        1 : {
            0 : "mary grand-child",
            1 : {
                0 : "jane great-grand-child",
                etc. (e.g. down to "john (great*1000)-grand-child")
            }
        },
        2 : {
            etc.
        }
    },
    2 : {
        etc.
    }
    etc.
}

但问题是,它有潜力发展到巨大的深度。可能会进入数百个甚至数千个级别,当然也可能非常宽。这样做的原因是,任何一个新条目都可以同样添加为任何现有点的直接子节点,无论是它epic[1]还是epic[1][21][41][661][3][72][8543][22][1][2][etc.]

我的问题是,像这样构建一个“史诗”数组有什么影响?不同语言处理的巨大/深度数组是否存在差异?有些语言会比其他语言更适合这个吗?如何最好地存储这个数组?

举例说明这一点的最简单方法可能是想象存储从一个人开始的整个家谱,在一个数组中,有数百代(并且还想象每个“父母”可以有无限的孩子​​而不是 2.5 :)

目前我对数组的唯一接触是在 php 和 javascript 中,所以它们将是一个很好的起点。

4

1 回答 1

0

这是一个非常笼统的问题,无法以适当的方式回答。当然,不同的语言对数组的处理方式不同,php 使用 hashmaps(例如,与 c/c++ 相比非常慢),javascript AFAIK 使用普通数组(因此,它们应该具有与 c/c++ 相当的性能),java 使用普通数组、哈希图、链表等。

第二部分是关于存储此类数据(我想是数据库),在关系数据库(mysql)中,您可以将它们存储为树(请参阅RDBMS 中的分层数据),或者您可以通过 2 个表(人,链接表)

无论如何 - 在深入调查您计划执行的操作期间会找到您问题的主要答案- 这将定义您应该使用的数据结构以及将此结构存储到磁盘的方式。

如果我们假设“家谱”——你想用它做什么?只是显示,或者搜索,或者一些统计结果(比如这个家庭有多少儿子出生?),也许我们需要计算 2 个不同的人(比如表亲)之间的关系,等等。

注意:不要忘记 1 个孩子可以有 2 个以上的父母(如果是继父和教父)。

于 2013-10-09T21:24:22.040 回答