0

'<>'の特定のペアのすべての可能な組み合わせを出力するためのアルゴリズムを書き留めると思います。これを解決するためのアルゴリズムを開発しようとしましたが、この問題が関連していることを認識しているため、正しくないと思います。順列[nPr]に、5の与えられた入力に対して、120の組み合わせ(5P5 = 120)を作成する必要があるとしましょう。しかし、私のコードは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?

物事はおそらく「サブセット/組み合わせ/順列を作る」という本当の概念を理解することができないでしょう(理論的にはそれらが何であるか、そしてそれらを計算する方法を知っていますが)

完全な最終的な「スプーンフィードコード」を探しているわけではありませんが、「何をすべきか」を説明できるものを探しています。そこからステップを抽出し、概念を理解し、独自のコードを開発できます。

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=”&lt;><><>”;
    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;
        }
    }
}

私は自分が何をすべきかを理解しようとしてきましたが、私はまだ苦労しています。どんな助けやガイダンスも本当に役に立ちます。ありがとうございました


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: <><>,><<>,><<>,><><,<<>>,>><< ... ... ...

4

2 に答える 2

0

C ++はbool std::next_permutation(Iterator first, Iterator last)、(first、last)のコンテンツをシーケンス内の次の順列になるように変更し、さらに多くの順列がある場合はtrueを返し、これが最後の順列である場合はfalseを返すことを提供します。リストは最初に(を使用して)ソートする必要がstd::sort(Iterator first, Iterator last)あり、ソートされたリストは最初の順列を形成します。

str.begin()およびを使用して、これらのアルゴリズムを操作できますstr.end()

注:データセットには重複するアイテムが含まれているため、すべての順列が可能であるとは限りません(一部は他のエントリの重複になります)。あれは:

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

本当にすべての順列(重複を含む)が必要なint indices = { 0, 1, 2, 3, 4, 5 };場合は、順列を実行してから各順列について印刷する配列を作成できstr[indices[0]]ますstr[indices[5]]

これにより、アルゴリズムと何が問題になっているのかについての洞察が得られる可能性があります。つまり、アルゴリズムを比較するための参照として使用できます。

于 2012-10-22T12:58:27.453 に答える
0

私のテストによると、42のソリューションがあります。

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

///出力

((((()))))
(((()())))
(((())()))
(((()))())
(((())))()
((()(())))
((()()()))
((()())())
((()()))()
((())(()))
((())()())
((())())()
((()))(())
((()))()()
(()((())))
(()(()()))
(()(())())
(()(()))()
(()()(()))
(()()()())
(()()())()
(()())(())
(()())()()
(())((()))
(())(()())
(())(())()
(())()(())
(())()()()
()(((())))
()((()()))
()((())())
()((()))()
()(()(()))
()(()()())
()(()())()
()(())(())
()(())()()
()()((()))
()()(()())
()()(())()
()()()(())
()()()()()
于 2014-03-18T23:48:49.420 に答える