2017-03-27 1 views
2

this 질문에 영감을 받아 JSON에서 DAG를 표현하려고합니다. 내 경우에는 일부 데이터가 들어있는 가장자리와 노드가 포함됩니다 (이 예와 같이 문자열이 아님). 나는이 같은 사양의 생각 : 내가 가진JSON에서 그래프 표현하기

{ 
    "graph": { 
     "a": ["b", "c"], 
     "b": ["c"] 
     "c" 
    }, 

    "nodes": { 
     "a": { 
      "name": "Adam" 
     }, 
     "b": { 
      "name": "Bob" 
     }, 
     "c": { 
      "name": "Caillou" 
     } 
    }, 

    "edges": { 
     // how to do the same for edges? 
     // ie: how to query edges ? 
    } 
} 

하나의 아이디어가 가장자리의 키는 연결하는 두 개의 정점 식별자의 연결이 될 수 있도록했다. 예를 들어 ab, acbc은이 그래프의 세 모서리입니다. 이 작업을 수행하는 데 더 표준적인 방법이 있는지 알고 싶습니다.

편집은 다음 DAG의 가장자리가 데이터를 저장하기 때문에이 내가 지금

{ 
    "graph": { 
     "a": { 
      "data": { 
       // a's vertex data 
      }, 
      "neighbors": { 
       "b": { 
        "data": { 
         // data in edge ab 
        } 
       }, 
       "c": { 
        "data": { 
         // data in edge ac 
        } 
       } 
      } 
     }, 
     "b": { 
      "data": { 
       // b's vertex data 
      }, 
      "neighbors": { 
       "c": { 
        "data": { 
         // data in edge bc 
        } 
       } 
      } 
     }, 
     "c": { 
      "data": { 
       // c's vertex data 
      } 
     } 
    } 
} 

답변

4

생각하고 무엇을, 그들은 더 나은 단지 노드처럼, 자신의 식별자를 가지고있다. 즉, 상기 JSON 표현은 세 개의 구성 요소로 구성되어야한다 :

  1. 노드 레코드 : 매핑 각 노드 식별자는 노드의 데이터.
  2. 에지 레코드 : 각 에지 식별자를 에지의 데이터에 매핑합니다.
  3. 인접성 목록 : 각 노드 식별자를 에지 식별자 배열에 매핑합니다. 각 노드 식별자는 노드에서 나가는 에지에 해당합니다.

    DAG = { 
        "adjacency": { 
        "a": ["1", "2"], 
        "b": ["3"] 
        }, 
        "nodes": { 
        "a": { 
         // data 
        }, 
        "b": { 
         // data 
        }, 
        "c": { 
         // data 
        } 
        }, 
        "edges": { 
        "1": { 
         "from": "a", "to": "b", 
         "data": { 
         // data 
         } 
        }, 
        "2": { 
         "from": "a", "to": "b", 
         "data": { 
         // data 
         } 
        }, 
        "3": { 
         "from": "b", "to": "c", 
         "data": { 
         // data 
         } 
        } 
        } 
    } 
    
+0

덕분에 응답, 나는이 일을 고려할 것입니다,하지만 어떻게 든 내가 수동으로 그래프를 만들려면 좀 성가신 것 에지 ID를 생성해야합니다 의미합니다. 내 편집에 대해 어떻게 생각하세요? – Carpetfizz

+1

@Carpetfizz, 두 정점 id를 에지 ID로 결합하는 것은 확실히 합법적입니다. 그것을 위해 가라. – snakile

+0

정말 고마워! 당신이 유효한 대답을 한 이후에도 당신을 받아 들일 것입니다. 파이썬 라이브러리 인 networkx와 같은 모델을 만들고 싶었다. – Carpetfizz