
例えば、1,2,3というのは3つの数字であり、順列の数は3!=6となり、
123
132
213
231
312
321
となります(重複なしのシャッフルだけということです)。数字を全部使うと、0123456789の10個であり個数は10!です。(自然数という意味だったら先頭が0だとダメとかありますがそれは考えないとして)。またアルファベット26文字を並び替えると26!通りになります。それを全部表示するアルゴリズムはどのようなものがあるでしょうか。ちょっと考えてみましたが、思いつきません。
pythonだと1000!とか10000!の数を表示してくれます。しかし例えば11だと0~10までの数字を並び変えるので二けただと変則的かなと思いますが。とにかく、N!個の順列を全部表示してくれるアルゴリズムはどうなるでしょうか。
できれば言語の仕様に特化したものでない方がいいのですが。あるいはそのような機能がライブラリに含まれているような言語でない方がいいです。
よろしくお願いします。
A 回答 (11件中1~10件)
- 最新から表示
- 回答順に表示
No.11
- 回答日時:
正方行列のデターミネントを定義通りに計算する時に用いる関数で、n個の数値をすべての順列をある順番に並べた場合、k番目(k <= n!)の順列を返すものがありましたが、今、行方不明です。
この関数は、順列の符号(偶置換?奇置換?)も返してくれるので、デターミネントを計算する時に浮動小数点を使う必要がなくなるので便利ですので、探しておきます。これを読めば、知っている人がいると思うので、期待できるでしょう。内部のロジックとしては、何種類かあるみたいで、高速のものが見つかれば幸いです。
No.9
- 回答日時:
たとえば C++ では「次の順列を求める」関数 std::next_permutation があるので, これの実装を流用すれば
再帰を使わないで全ての順列を列挙する
ことは可能です.
No.8
- 回答日時:
> できれば言語の仕様に特化したものでない方がいいのですが。
あるいはそのような機能がライブラリに含まれているような言語でない方がいいです。これは利用するプログラミング言語に例えばマッピングに類する機能が無いと非常に面倒くさい問題ですよ。
そもそも、このテの問題は元々、PrologとかLisp向きの問題であってCには向いていない。
Pythonは結構「丁度良い」ですが、それは現代的で内包表記を持ってるから、です。
Cでは解けなくはないだろうけど、恐らくC++のSTLを利用した方が「解きやすい」。C#ならもっとラクかも。
そういう性質の問題です。
def perm(lst):
def loop(lst, remain):
if remain == []:
return []
elif lst[1:] == []:
return [lst]
else:
return [[lst[0]] + l for l in perm(lst[1:])]\
+\
loop(lst[1:] + [lst[0]], remain[1:])
return loop(lst, lst)

No.7
- 回答日時:
A,B,C,Dの順列のケースです。
python3です。
再帰呼び出しをする方法
https://ideone.com/2ClmMo
再帰呼び出しをしない方法
https://ideone.com/kyq6kM
上記URLを参照ください。
尚、再帰呼び出しをする方法の場合は
arr = ["A","B","C","D"]の箇所を
arr = ["A","B","C","D","E"]
のようにすれば、A,B,C,D,Eの順列が求められます。
arr = ["A","B","C","D","E"・・・途中省略・・・,"Z"]
とすれば、アルファベット26文字も可能です。(完了までに莫大な時間がかかると思いますが・・・)

No.6
- 回答日時:
よこから失礼します。
No5の方へ
よろしければ、そのソースをこちらに張り付けていただけませんでしょうか。
こちらは、インデントが乱れませんので、そのままのソースが保たれます。
https://ideone.com/
1.添付図の左側の赤線で囲んだところで、言語を選択してください。
2.次に青線で囲んだところにソースを張り付けてください。(your code goes hereの文字を削除してからです)
3.Run(右側の赤線で囲んだところ)をクリックしてください。
4.実行結果表示され、ソースが登録されるので、そのURLをこのサイトに投稿してください。
そうすると、質問者の方も、そのソースをコピペできるので、確認がしやくすなるかと。

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
教えて!gooグレードポイントがdポイントに変わります!
dアカウント連携を行っていただくと、グレードに応じて「dポイント」が進呈されるようになります。
-
n個の要素で出来る順列組み合わせを全て出力するアルゴリズム
C言語・C++・C#
-
C言語で重複組合せを全列挙
C言語・C++・C#
-
C言語についてです。 再帰を使わないでnCrの組み合わせを求める関数を作りたいのですが、ここから全く
C言語・C++・C#
-
4
プログラミング
C言語・C++・C#
-
5
リスト構造のソートで悩んでます。。。
C言語・C++・C#
-
6
C言語 配列の長さの上限
C言語・C++・C#
-
7
関数から配列を返すには?
C言語・C++・C#
-
8
C言語 exitの使い方
C言語・C++・C#
-
9
数字並び替え全パターン取得のアルゴリズム
数学
-
10
16進数を10進数に簡単に変換する関数は?
C言語・C++・C#
-
11
MIPSアセンブリ言語で配列を宣言するには?
その他(プログラミング・Web制作)
-
12
アルゴリズムです!四つの数字の順列
その他(プログラミング・Web制作)
-
13
c言語8クイーン問題が分かりません
C言語・C++・C#
-
14
複数桁10進数の*桁目だけを抽出したい
C言語・C++・C#
-
15
重複しない組み合わせのプログラム
その他(パソコン・スマホ・電化製品)
-
16
極座標から直交座標に変換
C言語・C++・C#
-
17
2分探索木の高さを求めるプログラムの質問です。
C言語・C++・C#
-
18
順列生成アルゴリズムについて仕組みを教えてください
JavaScript
-
19
C言語で文字列の中の文字列のカウント
C言語・C++・C#
-
20
迷路を脱出する経路探索プログラムをC言語で作成するには?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
VBSでDim、Private、Publicの違い
-
5
VCとVC++
-
6
C言語、C+、C++、C#の違い
-
7
C言語とhtmlの違いを どな...
-
8
順列の内容をすべて表示するプ...
-
9
vbaがプログラマとして人気...
-
10
C#とC++のざっくりとした違いを...
-
11
COBOLでのNOT = の AND条件
-
12
HTMLとC++で、どんなホームペー...
-
13
vbaとc言語の関連性について
-
14
プログラミング言語
-
15
adobe のillustrator とかphoto...
-
16
VC++とVC++.NETその違いと...
-
17
VB6からVB.NETへの移行
-
18
HTMLは、プログラミング言語じ...
-
19
RPG等のゲームの作り方を紹介し...
-
20
Cのプログラム上でDiffを使いたい
おすすめ情報
公式facebook
公式twitter