그래프에서 연결된 모든 구성 요소를 트래버스해야합니다. 그래프의 경로가 이런 배열에 저장된다 : 여기각 배열에 포함 된 요소로 배열 배열 정렬
var paths = [
[5,6],
[1,2],
[4,7,5,6],
[6]
]
내가 paths[2]=[4,7,5,6]
차례로 paths[3]=[6]
로부터 의존 paths[0]=[5,6]
로부터 의존 참조.
자, 내가 어떤 재귀 적으로 다른 하나에 포함되어 있는지 확인하기 위해 모든 경로를 순회 할 필요가 먼저 다른 해결하기 위해 도울 수있는, 즉 내가 어떤 배열이 다른 배열에 포함되어 있는지 확인해야합니다 :
예 :
process [6]
process [5,6]
process [4,7,5,6]
process [1,2]
인해 요소의 많은 양의, 내가 재귀를 사용하지 않으 것입니다. 다른 모든 배열에 포함 된 한 배열의 요소로이 배열 목록을 정렬하는 방법이 있습니까? 그래서 반복 할 때 처리 할 수 있습니까?
는편집 : 나는이로 구성된 각 경로에 가중치를 할당함으로써 해결 될 수 있다고 생각 다음 :이 노드가 다른 경로에 포함되는 횟수를 곱한 각 경로에 포함 된 노드의 합, 다음 경로를 정렬 길이 오름차순 및 체중 내림차순 -하지만 이것은 단지 내 추측입니다 ...
'많은 양의 요소 때문에 재귀를 사용하지 않는 것이 좋습니다 .' 함수가 최대 스택 크기에 도달한다는 것이 염려되면 주위에 방법이 있습니다. 그것은 일종의 "자신 만의 TCO를 굴려 라."하지만 매우 효과적 일 수 있습니다. [여기는 좋은 기사입니다] (http://www.integralist.co.uk/posts/js-recursion.html).여하튼,'[5, 6]'은'[6]'을 포함하고 있다고 생각하는 것이 맞습니까? 본질적으로, 더 큰 배열들만 작은 배열을 포함 할 것이고, [5,6]는 _ [4,7,5,6]의 일부를 포함하지 않는다. – vlaz
@ Vld : 나는 어제 당신이 언급 한 기사를 읽었으며, 나는 그것을 소화하는 길에 여전히 있음을 인정해야한다 ... 요점 : 그들은 또한 길이가 같을 수도 있고, 길이로 정렬하는 것도 첫 번째 시도였다. 슬프게도 더 복잡한 그래프에서 성공하지 못했습니다. – deblocker
귀하의 경우 현명한 비교 작업을 쌍으로 만들지 않겠습니까? 'n '이 경로의 수인 경우''O (n * n)'시간이 걸릴 것입니다 (경로 길이가 어떤 최대 길이'k'보다 작다고 가정하십시오) –