例えば、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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Excel(エクセル) DATEDIFで作成した勤務年数の並べ替えがうまくいかない 3 2023/07/31 17:09
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
n個の要素で出来る順列組み合わせを全て出力するアルゴリズム
C言語・C++・C#
-
C言語再帰アルゴリズム
C言語・C++・C#
-
順列生成アルゴリズムについて仕組みを教えてください
JavaScript
-
-
4
C言語についてです。 再帰を使わないでnCrの組み合わせを求める関数を作りたいのですが、ここから全く
C言語・C++・C#
-
5
関数から配列を返すには?
C言語・C++・C#
-
6
困ってます…nCrを求めるC言語プログラミング
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語、C+、C++、C#の違い
-
C言語とhtmlの違いを どな...
-
COBOLで文字タイプを数字...
-
プログラムに書かれる"%"記号の...
-
C for Linuxでの設定ファイル読...
-
UNITY Float型の接尾辞fって
-
vbaとc言語の関連性について
-
TO_CHARで小数点以下がある場合...
-
VBSでDim、Private、Publicの違い
-
パスカルケースの由来。
-
順列の内容をすべて表示するプ...
-
COBOLでのNOT = の AND条件
-
Windows(デスクトップ)上で動く...
-
変数などの名前のつけ方の「_...
-
信号機の動作には、プログラミ...
-
趣味でプログラミングをしたい...
-
C言語って古いですか?
-
C++における継続行
-
LOGO言語って何ですか?教えて...
-
HTMLとC++で、どんなホームペー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語、C+、C++、C#の違い
-
プログラムに書かれる"%"記号の...
-
C言語とhtmlの違いを どな...
-
COBOLでのNOT = の AND条件
-
楽しくて最高のプログラミング...
-
Pythonって何を意識した言語な...
-
C#とC++とJavaが学べる書籍につ...
-
rpa化する言語としてら何があり...
-
最新のプログラム言語を学ぶに...
-
COBOLで文字タイプを数字...
-
質問失礼します。 プログラム言...
-
UNITY Float型の接尾辞fって
-
C++における継続行
-
TO_CHARで小数点以下がある場合...
-
C++ ってなんて読む?
-
VBSでDim、Private、Publicの違い
-
VBScriptで引数を省略したい場合
-
vbaとc言語の関連性について
-
VCとVC++
-
Excel VBAで文字化けする (英語...
おすすめ情報