- ベストアンサー
乗積 Π のアルゴリズムとは?
- 乗積 Π のアルゴリズムとは、与えられた数式に基づいて、ペアの組み合わせを生成するプログラムのことです。
- 具体的には、数式 Π(2x-1) を用いて、指定された範囲内のペアを作成し、総数を求めます。
- このアルゴリズムを実装するためには、数式の理解とプログラミングの知識が必要です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、エクセルのVBAで作ってみました。 結果グループをシートに書き出しでますけど、それを配列にしまうことで普通のVBとして処理できると思います。 countifについても、既に登録した配列から検索するようなのを書けばいいですしね。 あと、正規化については、リストのサイズが変わっても汎用的に使えるようにしようかと思いましたが私にとってはニーズがないので止めました。それ以外の部分については、リストのサイズが変わっても大丈夫だと思います。 ---------------------------------------------------------------- '示されたリストから2つずつペアのグループ分けをする Dim c 'グループを作るメインルーチン Public Sub MakeGroup() c = 0 Call MakeGroupAux("", "ABCDEF") End Sub '実際に作業する下請け Public Sub MakeGroupAux(ByVal result As String, ByVal list As String) Dim i As Integer, j As Integer, strLen As Integer Dim choice As String, rest As String, c1 As String, c2 As String, 正規化済 As String strLen = Len(list) If strLen = 2 Then '残りのペアになったら登録処理 正規化済 = 正規化(result & list)'ペアの正規化を行う If Application.WorksheetFunction.CountIf(Range("A:A"), 正規化済) = 0 Then 'まだ出現していないパターンである Range("A1").Offset(c).Value = 正規化済 '登録 c = c + 1 End If Else For i = 1 To strLen - 1 For j = i + 1 To strLen c1 = Mid(list, i, 1) c2 = Mid(list, j, 1) choice = c1 & c2 'ペアを作る rest = Replace(list, c1, "") rest = Replace(rest, c2, "") '使われなかったリスト Call MakeGroupAux(result & choice, rest) Next Next End If End Sub Function 正規化(list As String) As String'ペア毎のソートをする Dim pair(3) As String, wk As String Dim i As Integer, j As Integer For i = 0 To 2 pair(i) = Mid(list, 1 + i * 2, 2) Next '並び替え For i = 0 To 2 - 1 For j = i + 1 To 2 If pair(i) > pair(j) Then wk = pair(i) pair(i) = pair(j) pair(j) = wk End If Next Next wk = "" For i = 0 To 2 wk = wk & pair(i) Next 正規化 = wk End Function
補足
早急な御返事どうもありがとうございます。 説明が言葉足らずで申し訳ありません。 組み合わせと記述すると混乱を招くと思ったので ペアとグループという記述をしました。 仰る通り 6個から2個を選ぶペアの組み方は15通りです。 **************************************** ペアが決まった時点で上から並べます。 今回は3ペア決まった時点で1グループです。 グループ内での順序は考慮しません。 そのグループが15個できるというわけです。 <例2> 1,2,3,4の4つだと、ペアは2つ、グループは3つ になります。 (1) 1-2、 3-4 (2) 1-3、 2-4 (3) 1-4、 2-3 **************************************** 総数60通りというのはどういう事でしょうか? ご説明して頂けると幸いです。 言語はVBです。 ですが考え方の時点で詰まっています。