2009-04-23 9 views
2

나는 현재 시각 장애인 인 것처럼 보입니다. 그래서 여기서 물어볼 필요가 있습니다. 나는 트리 노드의 목록의 flattend 목록으로 트리의 표현이다 그래서 그튜플 목록에서 트리 만들기

(id, parent_id, value) 

같이 튜플의 목록을 정렬 할 수 있습니다. 예를 들어

입력

(1, None, '...') 
(3, 2', '...') 
(2, 1, '...') 
(4, 1, '...') 
(5, 2, '...') 
(6, None, '...') 

이 모든 힌트가 높게 평가 될 것이다 그 이후

(1, None, '...') 
(2, 1, '...') 
(3, 2', '...') 
(5, 2, '...') 
(4, 1, '...') 
(6, None, '...') 

같이 분류합니다. 미리 감사드립니다.

+0

어떤 종류의 나무입니까? 지금까지 뭐 해봤 어? ... 현재 구현을 사용하지 않는 이유는 무엇입니까? –

+0

어떤 종류입니까? 두 개 이상의 루트 노드가있는 편평한 나무입니까? 나는 혼란스러워. –

+0

기본적으로, 나는 이것을 데이터베이스에서 얻는다. 어떤 종류의 나무가 종결 될 수 없으며, 균형 잡히거나 균형 잡힌 것이기 때문입니다. 이것은 파일 시스템 트리와 같습니다. 현재 구현에서 무엇을 의미합니까? –

답변

2

파이썬은 왼쪽에서 오른쪽으로 튜플을 정렬합니다. 따라서 첫 번째 정렬 키가 첫 번째 항목이되도록 튜플을 정렬하면 매우 효율적입니다.

튜플 목록에서 트리까지의 매핑이 사용자가 설명하는 내용에서 명확하지 않습니다. 그것을 꺼내거나 더 철저히 설명하십시오. 예를 들어, 예제로 나타납니다

tree diagram http://web.sabi.net/temp/tree.png

당신이 부모를 가지지 않는 두 개의 노드를 가지고있는 경우에, 그 많은 나무보다 숲 같다. 나무로 무엇을 표현하려고합니까? 이 문맥에서 "분류 된"무엇을 의미합니까?

+0

예, 본질적으로 나무 숲입니다. 목록의 모든 튜플은 하나의 항목이며 부모로 다른 튜플을 가질 수 있습니다. 귀하의 사진은 그것을 정확하게 모델링합니다. 파일 시스템 뷰와 비교할 수 있습니다. –

+0

좋아, 그럼 어떻게 숲을 정렬하고 싶어? 선주문을 순회하고 ID로 뿌리를 정렬하는 것처럼 보입니까? 그렇다면, 정렬이 더 쉬운 다른 표현 (예 : 키가 노드 ID 인 중첩 된 사전)을 사용하는 것이 좋습니다. 그런 다음 원하는 경우 사전을 튜플 표현의 목록으로 전개 할 수 있습니다. –

1

내가 정확히하고 싶은 것을 따라 갔는지 확신 할 수 없지만, 노드 목록으로 포리스트가 있다면, 그냥 읽고 트리 구조를 만든 다음 쓸 수는 없습니까? 모든 나무를 떡갈 나무로 가로 지르는 것? 이것을 피하는 특별한 이유는 무엇입니까? 내가 제대로 이해한다면

+0

아니, 내 생각에, 나는이 접근법을 취해야 할 것이다. 내가 건너 뛰고 싶었던 유일한 상황은 10.000 튜플 (데이터베이스 행이라고도 함)의 목록이있는 가능한 상황이었습니다.이 튜플은 사전 기본 포리스트에 넣었으며 다시 튜플 목록을 만듭니다. –

0

올리버, 난 당신이 중 하나를 (a)는 사전 또는 목록에 데이터베이스에서 모든 튜플을 검색 한 다음 트리를 구성, 또는 (b)는 절을 할 경우에 주문을 사용할 수있을 것 같아요 튜플을 검색하여 트리에 추가 할 순서대로 정렬하십시오.

응용 프로그램에서 트리를 변경 한 다음 데이터베이스에 전파 할 수있는 경우에는를 선택하지만 데이터베이스 삽입, 업데이트 또는 삭제와 같이 항상 변경 사항이 적용되고 트리는 읽히지 않으면 - 단, 옵션 b는 더 빠르며 리소스가 적어야합니다.

롤랜드