再帰的分割と制約探索:逆数ペア計算と N 皇后問題の実装詳細

分割統治法の核心と逆数対カウント 問題解決の効率性は、基本となる論理構成に基づいています。特に、時間計算量を低下させるための重要な手法として、分割統治法(Divide and Conquer)が挙げられます。このアプローチでは、大規模な問題を独立した小さなサブプロブレムへと分割し、それぞれを再帰的に処理した後に結果を結合します。 この考え方の具体的な適用例の一つが ...

7月9日 22:25 投稿

電話番号からアルファベット組み合わせを生成するアルゴリズム

問題概要: 数字文字列(2〜9のみ)を入力として、該当するすべてのアルファベット組み合わせを返す。結果は任意の順序で出力可能。 電話ボタンの数字とアルファベットの対応関係は以下の通り(1は対応なし): 2 -> "abc" 3 -> "def" 4 -> "ghi" 5 -> "jkl" 6 -> "mno" 7 -> "pqrs" 8 -&g ...

7月8日 21:49 投稿

グラフ理論における極大および最大クリークの探索アルゴリズム

グラフ理論において、クリーク(clique)とは、頂点集合のうち、任意の2頂点間に辺が存在する部分グラフを指します。言い換えると、その集合内のすべての頂点が互いに隣接している完全なサブグラフです。 基本概念の整理 クリーク:頂点集合 \(C \subseteq V\) で、\(\forall u,v \in C,\ (u,v) \in E\) を満たすもの。 極大クリーク(maximal clique):自身を真部 ...

6月27日 16:33 投稿

十字形グリッドにおける数値配置の全探索と制約検証

問題概要 特定形状を持つ 10 マスの格子(図参照)に、0 から 9 の各数字を重複なく 1 つずつ配置する必要があります。配置には以下の制約が課されます。 上下左右および斜め方向のどちらでも、隣り合うマスの数字の絶対値の差が「1」であってはならない。 ┌─┬─┬─┐ │0│1│2│ ├─┼─┼─┼─┤ │3│4│5│6│7│ ├─┼─┼─┤ │ │ │ └─┴─┴─┘ 8│9│ ※位置インデックス ...

6月6日 17:44 投稿

AtCoder Beginner Contest 310 各問題のアルゴリズム解説とC++実装例

A: 別の注文方法 料理とセットで購入する場合、特定のドリンクが定価 \(P\) から割引価格 \(Q\) へ変更される。セット購入しない場合は、別のドリンクリストから任意の価格のものを選ぶことができる。支払い額を最小化する問題である。 実装方針は単純である。セット割引適用時の支払い額 \(Q + \min(A)\) と、割引なしの定価 \(P\) を比較し、小さい方を出力すればよい。\ ...

5月22日 01:48 投稿

Juliaによるバックトラッキングアルゴリズムの実装例

バックトラッキングアルゴリズムは、組み合わせ最適化問題を解決するための基本的な手法です。Julia言語を活用することで、明確で効率的な実装が可能です。以下、具体的な問題例を通じて実装方法を解説します。function solve_queens(n::Int) board = zeros(Int, n, n) solutions = Vector{Matrix{Int}}() place_queens(board, 1, n, solutions) return so ...

5月16日 13:35 投稿