2011-08-19 6 views
12

두 계층 구조를 동기화하는 알고리즘을 작성하고 싶습니다. 이러한 구조는 객체 그래프, 관계형 데이터베이스 테이블에 저장된 데이터 등이 될 수 있습니다 (유사한 키가있는 한 두 개의 다른 구조조차도). 동기화는 단방향 일 수 있습니다. 즉, 하나의 구조가 프로토 타입이되고 다른 구조가 일치하도록 수정됩니다.두 계층 구조의 단방향 동기화

sync 기능이 있다고 가정 해 보겠습니다. 프로토 타입

  • objB - -
  • keyA
  • 을 수정할 수있는 객체 - objA
  • keyB위한 키 생성 기능 - 키 생성 기능

    1. objA에는 다음과 같은 동의해야합니다 objB
    2. addB - 함수는 objB (새 ID는 objB)을 생성합니다.
    3. setB는 - 기능 업데이트 objB
    4. remB - 삭제하는 기능 objB
    5. parB -이

    그래서 우리는이 상황에 대한 addB에 전달 - objB의 부모의 ID 이 :

    let sync (objA:'a) (objB:'b) (keyA:'a -> 'k) (keyB:'b -> 'k) 
         (addB:'p * 'a -> 'p) (setB:'a * 'b -> unit) (remB:'b -> unit) 
         (parB:'p) = ... 
    

    여기 내가 문제가있는 곳이 있습니다. 'a'b은 계층 구조이므로 함수는 'a'b의 속성을 알고 있어야합니다 (일단 키를 비교하고 여기까지 일치하고 더 통과해야 함). 이러한 "자식"속성의 경우에는 동기화에 전달 된 모든 동일한 인수가 필요하지만 각각의 인수는 필요합니다.

    이것이 데이터 구조 문제라는 것이 명백 해지자. 루트 객체가 sync으로 전달 될 수 있고 그래프를 아래쪽으로 탐색 할 수 있도록이 정보를 함께 연결하려면 어떻게해야합니까? 필자의 초기 생각은 모든 인수를 하나의 클래스에 통합하는 것이 었습니다.이 클래스에는 자식 속성 (동일한 유형의 ResizeArray)이 있습니다. 그러나 다양한 유형의 다양한 속성을 사용하여 유형을 창 밖으로 던지거나 형식 인수의 대부분 또는 전체를 만드는 것보다는 작게 만들 수있는 방법을 찾지 못했습니다. obj.

    1. 어떤 데이터 구조가 난을 캡슐화하는 데 사용할 수 있습니다 (I 아무것도 찾을 수가 없었다) 이미이 작업을 수행하는 잘 확립 된 방법이있다 :

      그래서 여기 내 질문 있습니다 이 작업을 수행하는 데 필요한 데이터가 있습니까?

    나는 이것을 철저히 설명하기 위해 최선을 다했지만, 명확하지 않은 것이 남아 있다면, 더 나은 정보를 제공하려고 노력할 것입니다.

  • +0

    이 알고리즘이 작동하는 중간 데이터 구조가 필요하며 다양한 유형의 데이터에도 해당 데이터를 중간 데이터 구조로 변환하고 알 고를 실행 한 다음 원래 데이터로 다시 변환해야합니다. 양식 – Ankur

    답변

    1

    나는 이것이 이것을 단순화하고 있다고 확신하지만 여기에 나의 생각이있다.

    DAG 인 경우 objA의 너비 우선 탐색을 수행 할 수 있습니다.objA에서 노드를 대기열에 추가 할 때 objB 및 필요한 기타 정보 (튜플)가 포함됩니다. 그런 다음 당신이 dequeue 할 때 objB를 수정하십시오.

    차별화 된 공용체를 사용하여 대기열에있는 다른 자식 유형을 처리 할 수 ​​있습니다.

    +0

    흥미로운 아이디어. 나가 그것을 시도 할 수 있기 전에 그것은 하루 이틀일지도 모르다. 다시 너에게 갈거야. 제안 해 주셔서 감사합니다! – Daniel

    +0

    이것은 다양한 유형의 하위 노드 인 원래의 문제를 유지합니다. – Daniel

    0

    두 데이터 구조에서 diffgrams을 생성하고 변환을 변환 된 문제점에 맵핑하십시오.

    관련 문제