2010-07-15 2 views
1

이 질문은 전에 질문했던 Question과 비슷합니다.변수 항목/인수를 사용하여 목록 생성

라이브러리를 가정 해 보겠습니다.

라이브러리에는 많은 책 (예 : B (1 ~ n))이 있습니다. (n = 책 수)

각 책에는 여러 장 (예 : C (1 ~ k))이있을 수 있습니다. (제의 K = 횟수)

모든 챕터 수업 수 (예를 들어 일본에 L (1))를 가질 수있다 .. (레슨 J = 수)

모든 레슨 항목의 수를 가질 수있다 (T라고 주제의 (전 1)) ... (I = 수) ... ... 나는 그것이 갖도록 목록을 만들려면 이제

는 가정

Book 1 Chapter 1 Lesson 1 Topic 1 ...  

Book 1 Chapter 1 Lesson 1 Topic 2 ... 

Book 1 Chapter 1 Lesson 1 Topic 3 ... 

Book 2 Chapter 1 Lesson 1 Topic 1 ... 

Book 2 Chapter 1 Lesson 1 Topic 2 ... 

Book 2 Chapter 1 Lesson 1 Topic 3 ... 

Book 2 Chapter 1 Lesson 1 Topic 4 ... 

Book 2 Chapter 2 Lesson 1 Topic 1 ... 

Book 2 Chapter 2 Lesson 1 Topic 2 ... 

Book 2 Chapter 2 Lesson 1 Topic 3 ... 
..... 

Book (x1) Chapter (x2) Lesson (x3) Topic (x4) ... 


    where 1 <= x1 <= n, 1 <= x2 <= k, 1<= x3 <= j, 1< = x4 < = i 
등의 "모든"항목

(위의 예는 1 권의 1 권으로 1 권의 강의 3 개 주제를 보여주는 "제 1 권"을 보여줍니다. 및 2 권의 "1과"2 장, 1 장에있는 4 개의 주제는 이고 2 부에는 3 과목이 포함되어 있습니다. ) 어떻게이 목록을 효율적으로 생성 할 수 있습니까?

또한 "책 (x1) 챕터 (x3) 주제 (x4)"항목은 주제 (4 변수)로 제한되지 않습니다.
다를 수 있습니다. 성장 또는 수축.
예 : 주제에는 질문이 있고 질문에는 하위 질문이있을 수 있습니다. (사용자 선택에 따라.)

참고 :이 순전히 학문적 인

합니까 문제의 NP 클래스에서이 문제 가을?

모든 프로그래밍 언어 ..algorithm : 이것은 예를 들어, 관계형 DB 모델과, XML 모두 해결 매우 일반적인 상황이며, 모든

+0

이 질문과 관련하여 이전 질문과 다른 점은 무엇입니까? 가능한 모든 조합을 생성하려고합니까 (그렇다면 중복이 아님) 또는 단순히 객체 그래프에 존재하는 조합을 열거합니까? –

+0

나는 그다지 다르지는 않지만 같은 것의 변형이라고 생각한다. 이 문제는 b (j)를 모든 c (k) (여기서 c의 수는 모든 b마다 다름)와 결합한 결과 {a (i), b (j), c 'a (i)'(모든 a (i) b 및 c의 변경에 대해)와 유사합니다. – Amitd

+0

정말'code-golf'라면 Community-Wiki라는 질문을하십시오. 그렇지 않으면 해당 태그를 제거하십시오. – kennytm

답변

1

감사합니다.

Datastructures는 NP 문제 일 수는 없지만 라이브러리에 적용된 알고리즘 일 수 있습니다.

레벨 수를 가변으로 만들면 일부 메타 프로그래밍이 필요합니다.

1

이 문제가 NP 클래스 문제에 해당합니까?

아니요. 그러나 모든 조합을 생성하는 것은 섹션 시스템 (book-chapter-etc)의 깊이에 기하 급수적으로 시간 복잡성이 있습니다. 당신이 현재 구조 (예를 들어 장) 어린이가 있어야 여부를 결정하는 방법이있는 경우

, 당신은 다음과 같은 작업을 수행 할 수

// The int value is the number of children 
Tuple<string, int> GetChildStructure(string parentStructure) { 
    if(parentStructure == "Library") return new Tuple<string, int>("Book", 3); 
    if(parentStructure == "Book") return new Tuple<string, int>("Chapter", 2); 
    // ... 
    // You can get these from a config file/DB/etc 
    return null; 
} 

void BuildStructure(Structure parent) { 
    var childStruct = GetChildStructure(parent.StructName); 
    if(childStruct != null) { 
     for(int i=1; i <= childStruct.Item2; i++) { 
     Structure child = new Structure(childStruct.Item1, i); 
     BuildStructure(child); 
     } 
    } 
} 

void Main() { 
    var lib = new Structure("Library", 1); 
    BuildStructure(lib); 
} 

또한 this post 체크 아웃해야합니다.