문제

덕분에 모두 답이 아이디어 및 대체 솔루션입니다.더 효율적으로 문제를 해결하는 방법은 언제나 환영합니다,뿐만 아니라 알림 질문을 내 모델 예측제어 등을 다룬다.는 말했다,나는 당신과 같은 무시한 순간에 무엇이 문제를 해결하기 위해 노력하고있으로 알고리즘,그리고 도를 분석하는 큰 아 복잡성의 알고리즘으로 나는 그것을 작성하는 단순한 모든 경로에서는 그래프를 사용하여 깊이에 제한적으로 검색 설명 , 및 구현 .감사합니다!

편집:이 숙제를 하고,그러나 나는 이미 제출한 이 임무를 그리고 나는 단지 알고 싶다면 내 대답.내가 조금 얻을 통해 혼란 Big-O 복잡성을 재귀가 참여했다.


원래 아래 질문:

나를 찾으려고 복잡는 모든 경로 검색에 의해 주어진 알고리즘이 있습니다.주어진 두 개의 꼭지점,나를 찾는 모두 간단한 그들 사이의 경로를 사용하여 깊이 첫 번째 검색합니다.

내가 알고 있는 시간 복잡도의 DFS O(V+E)및 공간 복잡도 O(V),그리고 나 직관은 복잡성의 모든 경로 검색될 것이 이상하는,그러나 나를 확인할 수 없는 것이 될 것입니다.

관련된 그래서 질문 .

업데이트(응답하여 아래에 댓글):

나를 해결하기 위해 노력하고 여섯 정도의 케빈 베 문제입니다.이것은 일반적으로 필요를 찾는 가장 낮은 정도의 간의 쌍을 배우지만,나를 찾아야 모든 분리도(지금,6 개 미만이지만,이를 변경할 수 있습).

도움이 되었습니까?

해결책 3

내 분석으로 내 질문에 대답하면 의견/수정 해주세요!

The algorithm is simplified and analyzed as follows: 
(Note: here MAXDEPTH is the maximum degrees of separation to search for, default 6)
1. For the current vertex, get neighbors (amortized O(1))
2. For every neighbor, do the following [O(b), where b is the branching factor, or the avg. number of neighbors of a vertex]
2.1.    Check if already visited [O(MAXDEPTH), since it’s a linked list of max size MAXDEPTH)
2.2.    Append path to paths list [amortized O(1)]
3. End for 
4. Do the following MAXDEPTH times [O(MAXDEPTH)]
4.1.    For every neighbor do the following [O(b)]
4.1.1.      Check if already visited [O(MAXDEPTH)]
4.1.2.      Add to visited list [O(1)]
4.1.3.      Recursively call search again [becomes O(MAXDEPTH*b)]
4.1.4.      Delete from visited list [O(1)]
4.2 End for /* Neighbor */
5. End loop /* MAXDEPTH */

Thus, the complexity becomes O((MAXDEPTH*b)^MAXDEPTH).

다른 팁

최악의 시나리오는 완전한 그래프입니다. N 정점. 이 그래프가 있습니다 N! 간단한 경로, 그리고 그들 각각에 대해 당신의 알고리즘은 적어도 N^2 계산 단계 - 경로의 마지막 단계에 인접한 각 정점에 대해 이전에 방문한 노드의 링크 된 목록을 선형 스캔합니다. (검색의 모든 중간 단계를 계산하는 것은 아닙니다.) 따라서 복잡성은 적어도 O (O)입니다.N^2 * N!), 아마도 더 나쁘다.

해결하려는 더 큰 문제는 무엇입니까?

6 도가 좋기 때문에 그것은 당신에게 제한이 있습니다.하지만 그게 아니라는 것을 깨달았 6 변경할 수 있습니다,그러나 내가 생각하는 방식은 아직 여기에 적용됩니다.어디서나 내가 말하는"6"그 대신에"#의 도".

당신이 원하는 경우,사용할 수 있습 폭이 첫 번째 검색(BFS).내가 제대로 이해한다면,당신은 주어진 시발점(배우/여배우)그리고 당신을 찾을 필요한 모든 경로를 끝점(케이)보다 적은 것 또는 동등한 6 가장자리습니다.당신이 휴식 할 수있는 다운로 서브 문제들을 말해서 먼저 찾아 모든 연결을 1 떨어져 가장자리,모든 경로는 2 개의 가장자리를 멀리,... 고,마지막으로 모든 경로는 여섯 가장자리습니다.이 방법을 정확하게 BFS 것이다.먼저 검토하는 모든 노드가 하나의 가장자리에,두 개의,등등.

또는,당신은 또한 수정하여 사용 깊이 첫 번째 검색(DFS)을 수행하여 정상적인 DFS 고 각각의 경로를 따라 할 수 있는 한,그러나 카운터에서 중지 가는 6 가장자리 깊은 어떤 특정한 경로에 있습니다.

내가 생각하는 솔루션을 가능성이보다 훨씬 더 정상적인 O(V+E)기 때문에 단순히 당신이 방문하지 않는 모든 꼭지점이나 함께 여행하는 모든 가장자리(가정하에 우리의 그래프 사이의 관계의 큰 숫자를 배우)이지만,오히려 당신에 제약 를 본다면의 전체적인 그래프입니다.당신은 시작 검색 알고리즘처럼 행동 당신이 당신을 방문하는 모든 꼭지점/지 여부에 관계없이 사용할 BFS 또는 DFS,당신은 중지에서 6 가장자리에서 밖으로 시작 정점을 보다는 보고를 통해 전체 그래프입니다.

고려 무언가가 다음과 같 DFS 로 표현할 수 있습 O(V+E)지만,그것은 또한 수로 표현됩 O(b^d)b 는 분기 요인 및 d 은 그래프 깊이(참조하십시오 Wikipedia_DFS 더 많은 정보를 원).그래서 주어진 방법을 배우가 많이 있다,거기에 무엇이 될까요?제약을 부여 당신이 알고 있는 문제에 대해(6 도와 무지 않),무엇이 될 수 있습니다?

내 생각에 나는 가능하게 충분했다.희망이 있는 킥스타트 그것은 당신을 위해.나도 추가해야 하는 경고하는 내지 않는 실제에 대한 답을 알고 확신,이것은 다만 얼마나 문제는 나를 친;)

나는 사용에 대해 생각하고 있었다 o ((n^2)*깊이) algorhitm

  1. 각 배우마다 그가 일하고 있던 모든 배우를 찾으십시오. (O (n^2) 공간과 시간 comlexity이지만 실제 연결 수에 따라 다르며 대부분의 행위자의 경우 Facebook에서 친구의 500 또는 5x 수를 초과하지 않습니다. 이는 500*N 시간 및 공간 복잡성을 가져옵니다.

  2. 같은 깊이에서 모든 사람을 모두 조립 하고이 모든 연결을 추가하십시오. o (n^2*깊이)

연결을 저장하기 위해 이중 링크 트리를 사용하는 경우 모든 연결을 깊이 찾을 수 있습니다*n 복잡성

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top