0

本のタイトルと出版年を含む著者のリストがあります。たとえば、次のようになります。

Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes、Doug Lea: Java Concurrency in Practice、2006 年

Ken Arnold、James Gosling、David Holmes: Java プログラミング言語、2005 年

...

私は、共著者、彼らが一緒に書いた本、出版年に関する情報を保存するのに最適なデータ構造を疑問に思っていました。

後でこの情報を使用してグラフを描画したいと思います(Jung、私はJavaを使用しています)。各著者はノードであり、エッジは彼らが共著した各本になります。毎年別のグラフが描かれます。マルチマップの使用を考えていました:

Map<Year, Map<Author, List<Map<Co-author, Title>>>>

しかし、これは複雑すぎるのでしょうか?

助けてくれてありがとう。

4

3 に答える 3

2

著者とタイトルのセットを、たとえば「Book」という名前のオブジェクトに配置するのはどうですか? そうすれば、データ構造は単純になります

class Book {
    List<Author> authors;
    Title title;
}

Map<Year, Set<Book>> booksInYears

グラフ描画アルゴリズムは次のように機能します。

for (Book book : booksInYears.get(aYear)) 
    for (Author author1 : book.authors) 
        for (Author author2 : book.authors) 
            if (author1 != author2) 
                drawEdge(author1, author2, book.title);

drawEdgeメソッドは、最初に両方の作成者が対応するノードを既に描画しているかどうかを確認し (たとえば、作成済みのノードを持つ作成者を含むセットを使用するか、作成者 => ノード マップを使用)、必要なノードを描画し、それらの間にエッジを描画します。

于 2011-10-31T10:44:15.957 に答える
1

それからJUNGグラフを作成するだけです。JUNGはデータ構造を処理します。つまり、ノードは作成者になり、エッジは共同作成者の関係になります(これは作業に関する情報で構成されます)。

とはいえ、過去に共著グラフを扱ったことがあるので、共著のより自然な表現を2部グラフ(著者と作品)またはハイパーグラフのいずれかとして検討することをお勧めします。そうすれば、作業を何度も冗長に表現する必要がなくなります。

于 2011-10-31T16:05:28.317 に答える
0

ポリモーフィズムの概念を使用しないのはなぜですか?

なぜ、発行年、名前Class Bookなどを含む を作成しClass Authorないのですか?List<Author>List<Book>

于 2011-10-31T10:50:08.300 に答える