2013-11-15 3 views
-1

Моя проблема заключается в создании алгоритма для получения n-элементной комбинации значений атрибутов, которые я позже сравниваю с записями в файле. Я код в Java и таблица значений атрибутов представлена ​​как LinkedList < LinkedList < String [2]>> (конечно, я мог бы изменить это представление). Пример таблица может выглядеть следующим образом:Получение комбинации n-элементов из таблицы значений атрибутов

(Link) Sample Table

Для комбинации одного элемента этого достаточно, чтобы код три вложенных для петель, но как справиться с комбинацией п = элементы? Комбинации одних и тех же атрибутов и одинаковых значений атрибутов не допускаются.

ответ

0

Если вы хотите n вложенные циклы, вы можете использовать рекурсию.

Однако более простой способ справиться с этим может быть просто перекручивание так:

LinkedList<LinkedList<String>> L; 
// Init L 

// begin looping 
int N = 1; 
for(LinkedList<String> l in L) 
    N *= l.length; 
for(int i = 0; i < N; i++){ 
    int[] chooseWhich = new int[L.length]; 
    for(int j = 0; j < L.length; j++){ 
     chooseWhich[j] = i % L[j].length; 
     i /= L[j].length; 
    } 
    // at this stage, you have the i-th column chosen to be chooseWhich[i] 
    // do whatever you want just as you have nested n loops 
} 

Кстати, я только что понял, что LinkedList не имеет длину, но вы много изменений использовать массив , Или вы можете сохранить длину связанного списка где-то самостоятельно.

Смежные вопросы