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.
}

しかし、問題は、それが巨大な深さまで成長する可能性があるということです. 数千レベルではないにしても数百レベルの深さになる可能性が高く、もちろん非常に広い可能性もあります。この理由は、任意の 1 つの新しいエントリが、任意の既存のポイントの直接の子として等しく追加される可能性があるためですepic[1]epic[1][21][41][661][3][72][8543][22][1][2][etc.]

私の質問は、このような単一の「壮大な」配列を構築することの意味は何ですか? 巨大な/DEEP配列が異なる言語で処理される方法に違いはありますか? 一部の言語は、他の言語よりもこれに適していますか? この配列はどのように保存するのが最適でしょうか?

これを例証する最も簡単な方法は、おそらく、1 人の人から始まる家系図全体を 1 つの配列に何百世代も格納することを想像することです (また、各「親」が 2.5 ではなく無限の子供を持つことができると想像してください :)

現在、配列に関する私の唯一の露出はphpとjavascriptであるため、それらは良い出発点になるでしょう。

4

1 に答える 1

0

これは非常に一般的な質問であり、適切な方法で回答することはできません。もちろん、異なる言語では配列の扱いが異なります。php はハッシュマップを使用し (たとえば、c/c++ と比較すると非常に遅い)、javascript AFAIK は通常の配列を使用します (したがって、c/c++ と同等のパフォーマンスが得られるはずです)。Java には通常の配列があります。 、ハッシュマップ、リンクリストなど。

2番目の部分は、そのようなデータの保存に関するものです(データベースだと思います)。リレーショナルデータベース(mysql)では、それらをツリーとして保存できます(RDBMSの階層データを参照)、または2つのテーブルを介して多対多のリンクを作成できます(人、リンク テーブル)

いずれにせよ、質問に対する主な答えは、実行しようとしている操作を詳細に調査することで見つかります。これにより、使用する必要があるデータ構造と、この構造をディスクに保存する方法が定義されます。

「家系図」だとしたら、それで何をしたいですか? 単に表示するか、検索するか、何らかの統計的調査結果 (この家族で年ごとに何人の息子が生まれたかなど)、2 人の異なる人物 (いとこなど) 間の関係を計算する必要があるかもしれません。

注意: 1 人の子供が 2 人以上の親を持つことができることを忘れないでください (ステップとゴッドファーザーの場合)。

于 2013-10-09T21:24:22.040 に答える