2016-10-19 2 views
-1

의 링크에 의해 가변 배열 병합 :예를 들어, 정수 가변 배열 감안 값

var arr = new int[11][] { 
    new int[] { 0, 7 }, 
    new int[] { 1 }, 
    new int[] { 2, 5, 6 }, 
    new int[] { 3 }, 
    new int[] { 4 }, 
    new int[] { 5, 6 }, 
    new int[] { 6 }, 
    new int[] { 7, 9 }, 
    new int[] { 8, 10 }, 
    new int[] { 9 }, 
    new int[] { 10 } 
}; 

이 효과적으로 될 수 있는지 항목 1 차원 배열을 생성하도록 평탄화 그들의 위치 및 링크의 순서 그들의 가치 사이. 상기 어레이의 출력은 다음과 같아야

{ 0, 7, 9, 1, 2, 5, 6, 3, 4, 8, 10 } 
이 특정 예에서

, { 0, 7 }{ 7, 9 }들은 공통 번호를 가지고 결합 할 것이다 7 그들을 연결. 또한 { 5, 6 }, { 6 } 등과 같은 복제본은 삭제됩니다.

확실하지 않으면 잘 모르지만 내 머리를 긁적니다. 너무 많이 역 참조하고 여러 중첩 루프를 피할 수 있습니다. 가능한 경우 LINQ/PLINQ 또는 일부를 사용할 수 있습니다. 똑똑한 in-place 문자열 조작. 예

내 결과가 사용자의 서브 어레이의 쌍은 그래프 에지를 형성 DAG (방향성 비순환 그래프)의 topological sorting의 결과로서 발견 될 수도
+1

무엇 '{0, 7}''및 {7, 9하다면 }'와'{7, 10}'은 배열에 존재합니까? – dotctor

+0

비효율적 인 알고리즘이 있습니까? – dotctor

+0

질문이 잘 정의되어 있지 않습니다. 무엇이 일어나야하는지 완전히 명확하지 않은 경우가 너무 많습니다. 귀하의 예제에서 당신은 서브 배열이 "더 짧은"결과를 생성하도록 임의로 재배치 될 수 있음을 암시하는 것처럼 보입니다. 다시 정렬 할 수있는 방법이 여러 개 있다면 어떨까요? 어느 쪽을 골라야합니까? 어떤 약정이 다른 약정보다 짧은 결과를 산출한다면 어떨까요? – Jon

답변

1

{2,5,6} 형태 관한 에지 (원호) 2-> 5 및 5-> 6.

토포 정렬 또한 {2,3}, {3,5}, 추천 가능한 모순 (사이클)를 발견 할 것이다 {5,2}

+0

토폴로지 정렬을 제안 해 주셔서 감사합니다. 그것은 내가 찾고 있었던 바로 그 것이다. – Nick