2013-07-31 2 views
-1

나는 문제가있다. 나는 어떤 방법으로 첫 번째 요소에 연결된 요소와 다른 요소 목록이 있습니다. 목록의 어떤 요소가 첫 번째 요소인지 확인하고 싶습니다. 결과를 배열에 저장하십시오. 그런 다음 첫 아이를 데리고 아이를 찾습니다. 그 등등을 저장하십시오. 문제는 관계의 정확한 수를 모른다는 것입니다. 그래서 나는 많은 많은 반복과 검색을 할 수 있었다. 모든 단일 루프 및 배열을 (를) 저장하거나 더 나은 방법이 필요합니까?어쩌면 무한 루프 (나무)를 해결하는 방법을 모르겠다

편집 : DB 테이블에 대해 이야기하고 있습니다. 나는 두 개의 테이블을 가지고있다. table1의 모든 요소에 대해 children (table2의 데이터)을 확인하려고합니다. 그래서 저는 table1에서 Loop로 시작합니다. 표 1과 표 2의 요소는 좌표 xy로 연결됩니다. 그래서 iam table1_element1.xy == table2.xy 어디 table2의 모든 요소에 대한 검색. 결과적으로 n 명의 자녀가있을 수 있습니다. 이제 저는 그것들을 저장하고 그 자식들에게 좌표를 기반으로하는 모든 자식을 찾기위한 새로운 루프를 시작하겠습니다. 새로운 결과를 계속해서 저장하십시오. 더 명확한가요?

감사합니다.

+1

입력 내용이 명확하지 않으면 출력이 분명하지 않습니다. '어떤 식 으로든'을 입력 데이터에 대한 설명으로 대체하십시오 ... – opi

+0

Java, C++ 및 PL/SQL에 대해이를 태그했습니다. 나는 당신이 정말로이 문제를 해결하기 위해 3 개의 절차 언어를 사용하지 않고 있다고 생각합니다. 게시물을 편집하고 @opi의 요청에 따라 게시물을 개선하고 적용되지 않는 태그를 삭제하십시오. 감사. –

+0

잠재적으로 SQL을 사용하여이 작업을 수행 할 수 있습니다. "계층 적 쿼리"를 확인하십시오. 일반적으로 데이터는 부모 열과 함께 하나의 테이블에 있습니다. 하지만 두 테이블에 대한 뷰를 만든 다음 HQ를 사용하여 한 번에 모두 가져올 수도 있습니다. – opi

답변

1

이 문제는 재귀를 사용하면 쉽게 해결할 수 있습니다.

이 경우 귀하의 종료 조건은 노드가 목록에 아무런 관계가 없거나 자녀를 저장하고있는 목록의 끝에 도달했을 때입니다.

감사

+0

확인. 프로그램에 익숙하지 않은 사람을 위해. 재귀 란 무엇이며 어떻게 작동합니까? –

+1

유사 코드의 종류에서, 재귀는 다음과 같이 보일 수 있습니다 : void doStuff (T source) {T childs [] = source.getChilds(); for (child : childs) {doStuff (child); }}' 사실 자식을 다 떨어질 때까지 (같은 트리를 모두 사용) 동일한 코드를 사용합니다. http://en.wikipedia.org/wiki/Recursion – orion78fr

0

문제가 아니라 모든 개인 루프, 재귀를 통해 것이 글을 쓰는 좀 더 우아한 방법을 프로그래밍보다 조금 애매하지만. 관계가없는 상태에서 아이를 발견 할 때 휴식 조건을 설정하게됩니다.

스토리지 문제는 각 노드가 관계를 통해 연결된 모든 노드의 목록을 보유 할 수있는 토폴로지 데이터 구조 형태를 사용하는 것처럼 들릴 수 있습니다.

희망이 도움이됩니다.

+0

제 회 재귀 작업 방법을 설명해 주시겠습니까? –

+0

대답을 복제하는 대신, 나는 이미 존재하는 이것에 대한 [대답] (http://stackoverflow.com/questions/1949454/understanding-basic-recursion?rq=1)을 지적 할 것이고, 아마 방법보다 낫을 것입니다 나는 그것을 설명 할 것이다. 다른 질문이라도 알려주세요. – Aurora