割り当て問題の解法(ハンガリアン法)
Web処理はすべてブラウザ内で完結します。データは送信されません
コスト行列(誰がどの作業をするとどれだけかかるか)を与えると、合計コストが最小(または最大)になる一対一の組み合わせを求めます。O(n³) のハンガリアン法(Kuhn–Munkres / Jonker–Volgenant)を使い、階乗の総当たりはしません。10×10 でも 360 万通りになるからです。入力は数字のみの行列(行・列は R1…、C1… と自動命名)と、ラベル付き形式(1 行目が列名、以降の各行の先頭が行名)に対応します。行数と列数が異なっても処理できます。余った行は割り当てずに残し、余った作業は未実施のまま、それぞれ結果に明示します。最適な割り当て(1 件ずつコピー可能な行)と合計を表示します。すべてブラウザ内で完結します。
機能
- ハンガリアン法で最適解を算出(順列の総当たりはしない)
- 最小化・最大化の両方に対応
- 行数と列数が異なる場合も自動処理し、未割り当ての行・作業を表示
- 数字のみとラベル付きの 2 形式を自動判別
- 割り当てを 1 件 1 行で表示し、個別にコピー可能
- 合計コストを表示(最大化時は総利得として表示)
- 正方行列を要求する設定も可能(非正方なら明確にエラー)
- 最適性が証明された結果。既知の最適解によるテストで担保
使い方
- コスト行列を入力欄に貼り付けます(数字のみでもラベル付きでも可)
- 問題の種類を選びます:最小化 / 最大化
- 非正方行列の場合は自動処理か正方要求を選びます
- 結果がすぐに表示されるので、必要な割り当てをコピーします
よくある質問
- 入力できる行列の形式は?
- 2 通りあります。① 数字のみ:各行がその行のコスト列で、空白かカンマ区切り。行・列は R1…、C1… と命名されます。② ラベル付き:1 行目が列名、以降の各行は先頭が行名で、残りがその行のコストです。判定は「1 行目に数字でない項目が 1 つでもあればラベル付き」なので、数字のみの表を誤判定しません。
- 行数と列数が違う場合はどうなりますか?
- 自動処理モードでは、行が多いときはコスト 0 の仮想列を補い、最後に割り当てられなかった行を示します。列が多いときも同様に仮想行を補い、実施されない作業を示します。すべての行・列の制約を満たしつつ、合計は最適のままです。厳密に正方行列を求める場合は「正方行列を要求」に切り替えてください。
- この最適解は信頼できますか?
- 信頼できます。標準的な最短増加路のハンガリアン法(O(n³))を使い、任意の実数コスト行列で大域最適解を求めます。リポジトリには、既知の最適解を持つ 5×5 行列(最適 13)で結果を固定するテストと、4×4 を総当たりで検算するテストがあります。
- 最大化はどのように扱われますか?
- コストを負にして最小化します。数学的に最大化と等価です。結果には元の利得の合計を表示し、「総利得」と表記するので、負の数の並びを見せられることはありません。
関連ツール
行列と JSON
変換行列テキストと JSON の二次元配列を相互変換します。数値は数値のまま、行の長さが揃わない場合は行番号を指して報告します。
分数の計算
変換分数の約分、最大公約数と最小公倍数、小数から分数への変換、分数の四則演算。すべて BigInt で計算し、大きな整数でも桁を失いません。
数式の計算
Web1 行に 1 式を評価します。優先順位と括弧、べき乗と平方根、三角関数と対数、変数の再利用に対応。eval は使いません。
URL 解析
WebURL を解析し、スキーム・ホスト・ポート・パス・クエリパラメータ・アンカーに分解します。パラメータは元の値とデコード値を並記。すべてブラウザ内で処理します。
UA 解析
WebUser-Agent を解析し、ブラウザ・バージョン・OS・デバイス種別・エンジンを判定します。判定はパターン照合による概算です。すべてブラウザ内で処理します。
HTTP ステータスコード
WebHTTP ステータスコードの検索。番号から意味を、キーワードから番号を引けます。1xx〜5xx の分類・利用場面・確認のポイント付き。すべてブラウザ内で処理します。