2

1からnまでの数字のすべての順列を辞書式順序で一覧表示するようにMatlabをプログラムしようとしています。私がこれまでに持っているものは以下の通りです。私は再帰を使用して、最初にn = 3で機能するプログラムを作成してから、任意のnでプログラムを作成するための洞察を得ることができるかどうかを確認しています。これまでのところ、n=3の6つの列のうち2つがありますP=[1 2 3;1 3 2]。1つと2つを単純に入れ替えるには、次の2つの列が必要です。どうやって始めたらいいのかわからない。

function [P] = shoes(n)

if n == 1
    P = 1;
elseif n == 2
    P = [1 2; 2 1];
else 
    T = shoes(n-1) + 1;
    G = ones(factorial(n-1),1);
    P(1:2,1:3) = [G T];               
end
4

2 に答える 2

2

まず、ドキュメントを参照してください。辞書式順序で英語名のアルファベット順を意味する場合は、入力に名前を入力し、並べ替えてから、それを並べ替えることができます。

私があなたが望んでいることを誤解した場合は、質問にコメントするか編集してください。後でもう一度確認します。

ヒント:

  • 空のリストの順列は簡単に見つけることができます。
  • 誘導は数学の重要な概念です。あなたはそれに精通している必要があります。
  • 作業している環境は再帰をサポートしています
  • より長いリストの順列は、再帰によって必要な順序で生成できます。最初に最初の要素をどのようにしたいかを理解し、次に残りを理解します。

再び行き詰まった場合は、これまでに得たものと、行き詰まっていると思う場所/理由を投稿する質問を編集してください。

コードを見た後のヒント。

  • コア関数はベクトルを並べ替えるので、整数ではなくベクトルを引数として取る必要があります
  • n=3の場合の解決を開始しないでください。n = 0の場合([])を試してから、n=20の場合に直接進みます。
  • コードを書く前に、n=20の場合について考えてください。最初の列はどのようになりますか?n=20の場合の答えに隠されているn=19の場合の例はありますか?(答えはイエスです、そしてそれらはすべて異なります)。
  • ヒントの最初のセットを読み直してください
于 2009-03-15T00:55:14.817 に答える
1

この質問を2 回行ったようです。質問を再投稿する代わりに、質問の下にある [編集] リンクをクリックして更新してください。他の質問に対する回答をここに再投稿しますが、そのうちの 1 つを削除する必要があります。


次のマトリックスがある場合:

A = [1 2 3; 1 3 2];

すべての 1 を 2 に、2 を 1 にするには、次の方法が最も簡単な方法です。

B = A;
B(A == 1) = 2;
B(A == 2) = 1;
于 2009-03-15T18:06:42.887 に答える