/ / Permutaciones y combinación de algoritmo - c ++, algoritmo, conjunto, permutación, combinaciones

Permutaciones y combinación de algoritmo - c ++, algoritmo, conjunto, permutación, combinaciones

Se supone que debo escribir un algoritmo paraimprimiendo todas las combinaciones posibles de pares dados de '<>', he intentado desarrollar un algoritmo para resolver esto, pero creo que no es correcto, porque me doy cuenta de que este problema está relacionado con las permutaciones [nPr] y digamos por un momento. con una entrada de 5 debería crear 120 combinaciones (5P5 = 120) pero mi código solo genera 81.

In my code have tried to generate all possible combinations by placing every element at every place one by one, but now I am little confused about how correct this approach is?

Lo más probable es que no sea capaz de comprender el concepto real de "hacer subconjuntos / combinaciones / permutaciones" (aunque en teoría sé qué son y cómo calcularlos)

No estoy buscando una cuchara final completa.código alimentado ", pero algo que podría explicarme" lo que debería estar haciendo ", del cual podría extraer los pasos, entender el concepto y desarrollar el mío.

If possible something extending or tweaking my current coding to achieve the right result would be easier for me to understand.

void permute()
{
string str=”<><><>”;
char buck=" ";
for(int a=0;a<str.length()-1;a++)
{
for(int b=0;b<str.length()-1;b++){
cout<<str<<endl;
buck=str[b];
str[b]=str[b+1];
str[b+1]=buck;
}
}
}

He estado tratando de entender lo que debería hacer, pero todavía estoy luchando, cualquier ayuda u orientación sería realmente útil. Gracias


From "all combinations" i mean printing out all the possible ways given set of characters can be arranged, lets say for 2 pairs "<><>" it should be like: <><>,><<>,><<>,><><,<<>>,>><< ... ... ...

Respuestas

0 para la respuesta № 1

C ++ proporciona bool std::next_permutation(Iterator first, Iterator last) que modifica el contenido de (primero, último) para serla siguiente permutación en la secuencia, devolviendo verdadero si hay más permutaciones, o falso si esta es la última permutación. La lista debe ser ordenada primero std::sort(Iterator first, Iterator last)), y la lista ordenada forma la primera permutación.

Puedes interactuar con estos algoritmos usando str.begin() y str.end().

NOTA: Debido a que su conjunto de datos contiene elementos duplicados, no todas las permutaciones son posibles (algunas serán duplicados de otras entradas). Es decir:

string : permutations
-------:-------------
abcd   : 24
<><>   : 6
abcdef : 720
<><><> : 20

Si realmente desea todas las permutaciones (incluidos los duplicados), puede tener un int indices = { 0, 1, 2, 3, 4, 5 }; matriz en la que se ejecutan las permutaciones y luego imprimir str[indices[0]] mediante str[indices[5]] para cada permutación.

Esto podría darle una idea de su algoritmo y lo que está mal. Es decir, puede servir como una referencia para comparar su algoritmo.


0 para la respuesta № 2

Según mi prueba tiene 42 soluciones:

    function placeBrackets(n)
{
var placeBracketsRecur = function(prefix, remainingOpen, remainingClosed)
{
if(remainingClosed == 0)
{
document.write(prefix + "<br/>");
return;
}

if(remainingOpen > 0)
{
placeBracketsRecur(prefix + "(",  remainingOpen - 1, remainingClosed);
}

if(remainingOpen < remainingClosed)
{
placeBracketsRecur(prefix + ")",  remainingOpen, remainingClosed - 1);
}
}

placeBracketsRecur("", n, n);
}

///salida

((((()))))
(((()())))
(((())()))
(((()))())
(((())))()
((()(())))
((()()()))
((()())())
((()()))()
((())(()))
((())()())
((())())()
((()))(())
((()))()()
(()((())))
(()(()()))
(()(())())
(()(()))()
(()()(()))
(()()()())
(()()())()
(()())(())
(()())()()
(())((()))
(())(()())
(())(())()
(())()(())
(())()()()
()(((())))
()((()()))
()((())())
()((()))()
()(()(()))
()(()()())
()(()())()
()(())(())
()(())()()
()()((()))
()()(()())
()()(())()
()()()(())
()()()()()