2011-10-31 2 views
0

나는 예를 들어, 책의 제목과 발행 연도와 저자의 목록을 가지고 :공동 저작자를 저장할 데이터 구조는 무엇입니까?

브라이언 게츠, 팀 Peierls, 조슈아 블로흐, 조셉 Bowbeer, 데이비드 홈즈, 더그 레아 : 연습 자바 동시성 2006 년

켄 아놀드, 제임스 고슬링 (James Gosling)과 데이비드 홈즈 : 자바 프로그래밍 언어 2005 년

...

나는 일에 가장 좋은 것입니다 어떤 데이터 구조가 궁금 해서요 공동 저자, 함께 쓰여진 서적 및 출판 연도에 관한 정보.

그래프를 그리기 위해이 정보를 사용하고 싶습니다. (JUNG에서, 나는 자바를 사용하고 있습니다.) 각 저자는 노드이고 가장자리는 그들이 공동 저술 한 각 책이 될 것입니다. 매년 별도의 그래프가 그려집니다. 멀티 맵 사용을 고려 중이었습니다.

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

그러나이 방법은 너무 복잡합니까?

미리 도움을 청하십시오.

답변

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 방법은 먼저 확인 것 이미 그려진 노드가있는 저자 또는 저자 => 노드지도)가 포함 된 집합을 만들고 필요한 노드를 그리고 그 사이에 가장자리를 그립니다.

0

나는 다형성 개념을 사용하지 않는 것이 좋다고 생각합니다.

Class Author 같은 다른 엔티티를 생성하고 List<Author> 공동 저자를 포함 할 두 도서 사이에 구축하고, 저자List<Book>

를 포함 할 수 있습니다보다 .. 등 이름을 발행 해 같은 물건을 포함, Class Book을 생성하지
1

JUNG 그래프를 만들어보세요. JUNG은 데이터 구조를 처리 할 것입니다. 즉, 노드는 작성자이고 가장자리는 공동 작업자 관계입니다 (작업에 대한 정보로 구성됩니다).

과거에는 공동 저자 그래프로 작업 한 결과, 공동 저자의 자연스러운 표현을 이원 적 그래프 (Authors vs Works) 또는 하이퍼 그래프로 간주 할 수 있습니다. 그렇게하면 작업을 중복하여 여러 번 표시 할 필요가 없습니다.

관련 문제