質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1498閲覧

数字の組み合わせを遠い順に並べた結果を順番のみで取得する計算方法(不可能? )を教えてください。

siroharu

総合スコア9

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2017/10/19 11:01

編集2017/10/19 12:57

ABCがそれぞれ以下値を持っていたとします。

A=1,2,3,4
B=1,2
C=1,2,3

ABCそれぞれから1つの値を取り出して組み合わせを作った場合

A1,B1,C1
A1,B1,C2
A1,B1,C3


となり、組み合わせは24パターンとなります。
この24パターンでできる限りABCの組み合わせの遠い順で並び替えてみたものが下記の「組み合わせ並び順結果」になります。

----組み合わせ並び順結果----
1番目 = A1,B1,C1
2番目 = A2,B2,C2
3番目 = A1,B2,C3
4番目 = A2,B1,C3
5番目 = A3,B1,C2
6番目 = A3,B2,C1
7番目 = A1,B1,C2
8番目 = A1,B1,C3
9番目 = A1,B2,C1
10番目 = A1,B2,C2
11番目 = A2,B1,C1
12番目 = A2,B1,C2
13番目 = A2,B2,C1
14番目 = A2,B2,C3
15番目 = A3,B1,C1
16番目 = A3,B1,C3
17番目 = A3,B2,C2
18番目 = A3,B2,C3
19番目 = A4,B1,C1
20番目 = A4,B1,C2
21番目 = A4,B1,C3
22番目 = A4,B2,C1
23番目 = A4,B2,C2
24番目 = A4,B2,C3

例えば2番目の組み合わせ(A2,B2,C2)が出現した時点では既出の1番目の組み合わせ(1,B1,C1)と比較してABCどれもカブっていないのでカブり数は0となります。

4番目の組み合わせ(A2,B1,C3)が出現した時点では、
4番目の組み合わせは、1番目の組み合わせ(A1,B1,C1)のBと、2番目の組み合わせ(A2,B2,C2)のAと、3番目の組み合わせ(A1,B2,C3)のCがカブっています。
1〜3番目の組み合わせでそれぞれカブり数が1となります。
この場合各番目での最大カブり数は1となります。

7番目の組み合わせ(A1,B1,C2)が出現した時点では、
7番目の組み合わせは、1番〜4番と6番の組み合わせと比較してそれぞれ1つずつカブっていて、5番の組み合わせ(A3,B1,C2)はBとCの2つがカブっています。
この場合最大カブり数は2となります。

このように出来るだけ組み合わせが遠い順に並び変えたものが「組み合わせ並び順結果」となります。
ただこの「組み合わせ並び順結果」は私が一つずつ考えて並べたもので、この順番で無くても組み合わせが遠い順ならどんな並びでも構いません。

以上を踏まえて、例えば11番目の組み合わせを求める計算式があれば教えていただきたいと思います。
プログラムで全ての「組み合わせ並び順結果」を計算することはできるのですが、組み合わせ数が多いとリソースが追いつかないので順番のみでリアルタイムに割り出す方法を探しています。
言語はPHPで書いていますが、プログラムでなくても計算式でも構いません。

散々考えてみても実現できたかったのですが、実現可能でしょうか?
それだけでもわかればと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

コメントでやりとりした結果、質問が正しくない気がしてきました。
正しい問題の把握をして再質問してほうがよいかと思います。

例えば11番目の組み合わせを求める計算式があれば
この順番で無くても組み合わせが遠い順ならどんな並びでも構いません。

ご期待の回答でないことは十分わかっていますが・・・

必ず固定値で、A1B1C1を返すことが可能です。
理由は、前回の回答にもありますが、順序を作る明確なルール仕様がないので、
A1B1C1 を、すきな番目に返すような、「組み合わせ並び順結果」が作成できます。


で、この問題は、カブリの少ないようにデータを生成するアルゴリズムを考える。
ということだと思いますので、これができればn番目の組み合わせは求められるかと。

カブりの少ない組み合わせは自体はプログラムで導き出すことができる

ので、剰余と公約数を使えば、求められそうな気がします。

10万パターンを使いたいので、100万のパターンを用意して上から10万パターンを使用し出来るだけカブを少なくしたい

意味が理解できませんでした。
当初の24パターンを例にすると、どう組み合わせても総数が24を超えることはありません。
※24パターンを使いたいので、240パターンを用意する???
100万パターンを用意するとは、どういう意味?

最小要素が10万要素以上で作成すれば、総数に関係なく、カブリ0のデータを10万パターン以上作れます。

投稿2017/10/20 01:51

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

siroharu

2017/10/20 01:55 編集

100万パターンというのは A=1〜10 B=1〜10 ・ ・ ・ F=1〜10 の組み合わせで100万パターンになるのでこの中からできるだけかぶらないパターンで10万パターンを使用するイメージになります。
guest

0

A=1,2
B=1,2
C=1,2

だと組み合わせは8パターンで、ABCの順(111,112,121,122,211,212,221,222)
並び順の組み合わせは、8の階乗(40320)の並べ方になります。(数字の遠い順に並べない前提)

この8パターンの場合、1番目が決まれば、2番目が決まる(カブリ0)。
3番目以降は不定(カブリ3)

という仕様の理解でよいですか?

上記の8パターンの場合は、

この順番で無くても組み合わせが遠い順ならどんな並びでも構いません

といってる時点で、1番目から8番目どこを選んでも不定というか、好きに並べられます
1番目が111なら2番目は222、3番目以降は自由
1番目が112なら2番目は221、3番目以降は自由

※組み合わせが遠い順っていうのが理解が足りないかも・・・

基本的には要素数が少ないところの組み合わせ+1がカブリが発生しますよね?
元の24パターンの話だと、Bが2つなので、3番目以降からかぶり1、Bが2つ、Cが3つなので、
7番目からカブリが2みたいな・・・

っていうので、あとは好きに並べられそうなきがする。

投稿2017/10/19 13:11

編集2017/10/19 13:36
momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

siroharu

2017/10/19 13:44

momon-ga様ありがとうございます。 > Bが2つなので、3番目以降からかぶり1、Bが2つ、Cが3つなので、 おっしゃる通り質問の24パターンの場合3番目移行からカブりが発生します。 最終的には10万パターンほどを使いたいので、全てのパターン100万ほどを用意してカブりの少ない順で使っていきたいと思っています。 質問の内容だと24パターンなのですが、10万パターンを使いたいので、100万のパターンを用意して上から10万パターンを使用し出来るだけカブを少なくしたいと考えています。 カブりの少ない組み合わせは自体はプログラムで導き出すことができるのですが100万となると計算に時間がかかるのとメモリの問題で組み合わせの番号(1〜10万)から組み合わせ結果が取得する事が可能かどうか(できるか出来ないかだけでも)を知りたいと思います。
momon-ga

2017/10/19 13:53 編集

パターン数というより、要素数で考えれば、そんなに難しくないと思います。 えっと、カブリが0の範囲は、1番目からN番目、カブリが1の範囲は、N+1番目~Z番目 みたいに決められるので、あとは並び順が自由という前提なので、適当な値返せるのでは?
siroharu

2017/10/19 15:29 編集

確かにそういう風に考えればよさそうな気がします。 N+1番目〜Z番目の並びは自由と言うことは分かりましたが、その範囲の組み合わせがどの値になるのかが難しいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問