Генерация списка с переменными записями / аргументами - PullRequest
1 голос
/ 15 июля 2010

Этот вопрос похож на Вопрос , который я задавал ранее.

Предположим, есть библиотека.

В библиотеке много книг (скажем, от B (1 до n)).(n = количество книг)

Каждая книга может иметь много глав (скажем, C (от 1 до k)).(k = количество глав)

Каждая глава может иметь количество уроков (скажем, от L (1 до j)) .. (j = количество уроков)

Каждые уроки могут иметь количествоТемы (скажем, T (от 1 до i)) .. (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 темы и «Книгу 2» с 2 главами «Урок 1» и 4 темы в главе 1 и «Урок 1» и 3 темыв главе 2.) Как эффективно создать этот список?

Кроме того, запись "Книга (x1) Глава (x2) Урок (x3) Тема (x4)" не ограничивается темой (4 переменных).
Может варьироваться.Расти или уменьшайся.
Например: темы могут иметь вопросы, вопросы могут иметь дополнительные вопросы.(основано на выборе пользователя.)

Примечание. Это чисто академическое

Эта проблема относится к классу проблем NP ?

Любой язык программирования .. Алгоритм:)

Спасибо всем

Ответы [ 2 ]

1 голос
/ 15 июля 2010

Эта проблема относится к классу проблем NP?

Нет, но генерация всех комбинаций имеет экспоненциальную временную сложность в глубине системы секций (книга-глава и т. Д.).

Если у вас есть способ определить, должны ли текущая структура (например, глава) иметь детей, вы можете сделать следующее:

// 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);
}

Вы также должны проверить этот пост из.

1 голос
/ 15 июля 2010

Это очень распространенная ситуация, решаемая как моделью реляционной базы данных, так и, например, XML.

Структуры данных не могут быть проблемами NP, но алгоритм, применяемый к вашей библиотеке, может быть.

Если вы сделаете количество уровней переменным, это потребует некоторого метапрограммирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...