У меня есть список объектов N, и я задаюсь вопросом, как я могу циклично выполниться через список для получения каждой комбинации. Существуют, не удваивается, таким образом, я должен получить весь N! упорядочивания. Дополнительная память не является никакой проблемой, я пытаюсь думать о самом простом алгоритме, но я испытываю затруднения.
Расширение ответов на другие, вот пример std :: next_permution адаптирован из cplusplus.com
#include <iostream>
#include <algorithm>
using namespace std;
void outputArray(int* array, int size)
{
for (int i = 0; i < size; ++i) { cout << array[i] << " "; }
}
int main ()
{
int myints[] = { 1, 2, 3, 4, 5 };
const int size = sizeof(myints);
cout << "The 5! possible permutations with 5 elements:\n";
sort (myints, myints + size);
bool hasMorePermutations = true;
do
{
outputArray(myints, size);
hasMorePermutations = next_permutation(myints, myints + size);
}
while (hasMorePermutations);
return 0;
}
Простой алгоритм с использованием рекурсии:
псевдокод
getPermutations(CurItemList , CurPermList)
if CurItemList.isempty()
return CurPermList
else
Permutations = {}
for i = 1 to CurItemList.size()
CurPermList.addLast(CurItemList.get(i))
NextItemList = CurItemList.copy()
NextItemList.remove(i)
Permutations.add(getPermutations(NextItemList, CurPermList))
CurPermList.removeLast()
return Permutations
// To make it look better
Permutations(ItemList)
return getPermutations(ItemList, {})
Я не проверил его, но должен работать. Может быть, это не самый умный способ сделать это, но это простой способ. Если что-то не так, пожалуйста, дайте мне знать!
Для Java не забудьте взять на изменение GroupUnit и ().
-121--3926441- Tomahawk имеет расширенные компоненты, такие как < t: inputText >
, которые имеют атрибут forureId
. Там вам придется установить его как < t: inputText ForureId = «levelone-leveltwo »/>
- т.е. вы не сможете использовать автоматически созданные имена контейнеров.
Я бы посоветовал против такого - я не вижу веской причины, почему :
следует изменить на -
Попробуйте создать набор комбинаций рекурсивно с фиксированным количеством возможных элементов. Набор всех возможных комбинаций будет объединением наборов комбинаций из 1 элемента, 2 элементов,... до N элементов.
Затем можно атаковать каждую комбинацию фиксированного размера по отдельности.