2011-08-18 3 views
9

나는 흥미로운 문제라고 생각하는 것을 가지고 있습니다.트리의 레벨을 뒤섞어 쓸 수있는 트리 구조 나 알고리즘이 있습니까?

기본적으로 각 항목에는 다른 값의 고정 된 메타 데이터 집합이있는 항목 목록이 있습니다.

  • 항목 1 : 예를 들어

    {유형 = "텍스트", 저자 = "사용자 A", 편집 날짜 = "2003년 3월 3일"}

  • 항목 2 : {유형 = 편집자 = "04/05/2006"
  • 항목 3 : {Type = "이미지", 작성자 = "사용자 B", 편집 날짜 = "05/05/2005 "}
  • 항목 4 : {유형 ="텍스트 ", 저자 ="사용자 B ", 편집 날짜 ="2007년 5월 7일 "}
,

이제는 그 항목 목록이 평평하게되어 테이블에 표시됩니다.

그러나 사용자가 트리에서 찾아 볼 수있는 방법을 찾고 싶지만 각 메타 데이터 태그의 순서를 '피벗 (pivot)'할 수있는 유연성이 추가되어 트리에 나타납니다.

그래서, 처음에는과 같습니다

Items 
+ User A 
    + Text 
    + Table 
    -> Item 1 
    -> Item 2 
+ User B 
    + Image 
    + Text 
    -> Item 3 
    -> Item 4 

그래서 대신 가정, 그러나

Items 
+ Table 
    + User A 
    + 04/05/2006 
     -> Item 2 
    -> Item 2 
    -> Item 2 
+ Text 
    + User A 
    + 03/03/2003 
     -> Item 1 
    -> Item 1 
    + User B 
    + 05/07/2007 
     -> Item 4 
    -> Item 4 
    -> Item 1 
    -> Item 4 
+ Image 
    .. 

, 사용자는 라운드를 뒤집어 특정 사용자와 관련된 모든 항목을 볼 싶어 에.

나는 그것이 의미가 있기를 바랍니다.

그럼 궁금한 점은 저비용으로이를 달성하기위한 최선의 방법이 있다면? 각 '뒤집기/뒤섞기/피벗'의 결과는 나무에서 멋지게 표현됩니다. 따라서 첫 번째 생각은 사용자가 표현을 변경하도록 요청하면 필요에 따라 항목 목록을 새 트리로 생성 할 수 있다는 것입니다. 그러나, 아마도 더 좋은 방법이 있을지도 모릅니다. 단순히 하나의 나무를 회전시키는 것뿐입니다.

백엔드가 단순히 반환하는 경우 사용자의 브라우저에서 JavaScript로 값싼 방식으로 계산할 수 있습니다. 품목의 편평한 명부?

많은 감사 & 종류와 관련,

제이미

+1

자바 또는 자바 스크립트입니까? 두 언어가 아주 다른 언어입니다. –

+0

@Reverend Gonzo - 자바 스크립트에서 서블릿에 대한 반복 요청없이 클라이언트 브라우저가 데이터의 표시를 변경할 수 있도록하는 것이 바람직합니다. 그러나 JS에서 수행하기에는 너무 집중적 인 경우 Java마다 매번 처리 할 수 ​​있습니다. – Jay

+0

모바일 장치에서 대용량 데이터 세트를 볼 수있는 방법으로 이것을 구현 한 사람을 알고 있습니다 (정확하게 알고있는 경우). 나는 그것이 javascript lib의 일종이라고 생각한다. 그는 우리 지역의 역동적 인 언어 그룹에서 두 번에 걸쳐 발표를했습니다. 관심이 있으시면 [email protected]로 이메일을 보내면 아마도 당신을 연결할 수 있습니다. –

답변

0

그들은 방법 I는이 같은 lookgs 목록 항목 정의하는 것입니다 해결하기 위해 주변에 갈 것 : 이것은 C#을가

public class Item 
{ 
    string NodeName {get; set;} 
    string Url {get; set;} 
    List<Item> Children {get; set;} 
} 

입니다 이 아이디어는 객체를 지원하는 모든 언어에서 적용 가능해야합니다. 이제 귀하의 목록은 한 유형의 목록 만 지원하면됩니다. 이것은 Item의 목록이므로 데이터를 그러한 목록으로 변환하는 방법을 찾으십시오.

1

요소를 트리 구조로 나타내지 만 변수 트리 깊이와 트리 분기 변경이 필요합니다. 원하는 트리 구조가 실제로 의심 스럽습니다.

나는 세상이 평평하다고 생각해야한다고 생각한다. 자바 스크립트 데이터베이스 (http://taffydb.com/가) 도움이 될 수

여전히 세계가 평평 고려

, 당신은 또한이를 사용하여 간단한 사전에 개체를 저장

separator="µ"; //TODO Find something better 
function signature() { 
    return item.Type + separator + item.Author + separator + item.EditedDate; 
} 


assert(item1.signature == "TextµUser Aµ03/03/2003") 

그런 다음 문자열을 반환 서명 기능을 만들 수 있습니다 서명을 키로 사용합니다.

그런 다음 키에 대해 정규식 일치를 수행하여 원하는 개체를 얻을 수 있습니다. 먼저 서명 함수를 편집하여 해당 항목 속성이 정의되지 않은 경우 "([^ separator] +)"를 반환합니다.

assert ({Type="Text"}.signature() == "Textµ[^µ]+µ[^µ]+") 

function find(filterItem) { 
    retval= = new generic.list(); 
    for (var k in dict.keys()) { 
    if (k.match(regexp)) { 
     retval.add(dcit[k]); 
    } 
    } 
} 

나는 이것이 모든 요소를 ​​탐색하는 것보다 빠르다는 것을 알지 못합니다.

+0

taffydb쪽으로 나를 가리켜 주셔서 고마워, 나는 자바 스크립트 사이드 데이터베이스 들었어요. 나는 taffydb에 점점 더 구체적인 '쿼리'를 활용하는 것이 효과가 있을지 생각할 것입니다. 고맙게도 반환되는 객체의 json 배열은 일관된 키를 가진 간단한 연관 배열입니다. 사용자가 다음에 분기 할 메타 데이터 유형을 결정할 때 taffydb의 성능이 서브 어레이에 대한 재귀 적 분할 방식에 비해 동적으로 어떻게 배열되는지 궁금합니다. – Jay