C#で指定した個数の開き括弧・閉じ括弧のすべての有効な組み合わせを生成する方法
C#でバックトラッキング(バックトラック法)を利用すると、指定された個数の開き括弧「{」と閉じ括弧「}」からなるすべての有効な組み合わせを効率的に生成できます。
アルゴリズムの基本的な考え方
バックトラック用の再帰関数を作成し、次のルールに従って現在の文字列を更新していきます。
- 開き括弧を追加できる条件: まだ配置していない開き括弧が残っている場合(開き括弧の数がN未満)
- 閉じ括弧を追加できる条件: 閉じ括弧の数が開き括弧の数を上回らない場合(閉じ括弧の数が開き括弧の数より少ない)
- 終了条件: 現在の文字列の長さが2×Nに達した時点で、その文字列を1つの完成した組み合わせとして結果に出力する
このように、配置済みの括弧の数を記録しながら分岐をたどることで、「}{」のように閉じ括弧が先に来る無効な組み合わせを自動的に排除できます。
C#での実装例
以下は、N=2(括弧2組)の場合にすべての組み合わせを生成するC#のコード例です。
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace ConsoleApplication {
public class BackTracking {
public void Brackets() {
char[] arr = new char[4];
FindSequence(arr, 0, 2, 0, 0);
}
private static void FindSequence(char[] arr, int index, int N, int openBracket, int closeBracket) {
// 閉じ括弧がN個並んだら、1つの組み合わせが完成
if (closeBracket == N) {
StringBuilder s = new StringBuilder();
for (int i = 0; i < arr.Length; i++) {
s.Append(arr[i]);
}
Console.WriteLine(s);
s = null;
return;
}
else {
// 開き括弧の方が多い場合は閉じ括弧を追加できる
if (openBracket > closeBracket) {
arr[index] = '}';
FindSequence(arr, index + 1, N, openBracket, closeBracket + 1);
}
// 開き括弧がまだ残っている場合は開き括弧を追加できる
if (openBracket < N) {
arr[index] = '{';
FindSequence(arr, index + 1, N, openBracket + 1, closeBracket);
}
}
}
}
class Program {
static void Main(string[] args) {
BackTracking b = new BackTracking();
b.Brackets();
}
}
}
実行結果
{}{}
{{}}
N=2の場合、「{}{}」と「{{}}」の2通りの有効な組み合わせが出力されます。なお、N組の括弧に対して生成される組み合わせの総数はカタラン数 C(2N, N)/(N+1) で表され、この手法の計算量は出力される組み合わせの数に比例して増加します。
-
C++で与えられた点から作成できる四角形の数を求める方法
四角形とは? 四角形(クアドララテラル)とは、ユークリッド平面上で4つの頂点と4つの辺を持つ多角形のことを指します。「4-gon」という呼び方もあり、正方形や長方形なども四角形の一種に含まれます。 本記事では、与えられた点から作成できる四角形の数を求める手法について解説します。この問題では、直交座標系(XY平面)上に与えられた4つの点 (x, y) を用いて、いくつの四角形を構成できるかを求めます。まず、具体的な入力例と出力例を見てみましょう。 入力 : A( -2, 8 ), B( -2, 0 ), C( 6, -1 ), D( 0, 8 ) 出力 : 1 説明 : 作成できる四角形は1つだ
-
Excelで数値の立方(3乗)と立方根を求める方法
立方(3乗)や立方根の計算には、実生活において多くの活用場面があります。さまざまな数学的関数の基礎となるだけでなく、容器の体積を見積もる際にも欠かせない計算です。Excelで特定のセル、またはセル範囲に入力された数値の立方と立方根を求めたい場合は、この記事の手順を参考にしてください。 残念ながら、Excelには立方や立方根を直接求めるための専用関数は用意されていません。しかし、べき乗演算子「^」を使った指数計算を利用すれば、誰でも簡単に求めることができます。これが最も手軽な方法です。 Excelで立方(3乗)を求める方法 Excelである数値の立方を求める場合、数式の基本構文は次のとおりです。