割当問題とは? 割当問題という問題をご存知でしょうか? $n$ 人に $n$ 個の仕事を割り当てるとき、最も効率の良い割り当て方は何かを考える問題を「割当問題」といいます。 行列で考えるとわかりやすいです。下記の行列の行が人、列が仕事を表し、各成分は各人がそれぞれの仕事を終えるのにかかるコストととらえます。 各仕事に人は1人しか割り当てることができない状態で、全ての仕事に人を割り当てるとき、一番低コストな組み合わせを考えます。 このような問題を考える上で有名なアルゴリズムに「ハンガリアン法」(ハンガリー法)というものがあります。 step1 各行の各要素からその行の最小値を引き、その後さらに各列の各要素からその列の最小値を引く。 step2 $0$ を各行各列から1つずつ選ぶことができるかどうか判定する。もし選ぶことができれば、その $0$ の座標の組みが割当案となる。選ぶことができなれけ
![割当問題のハンガリアン法をpythonで実装してみた - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/761d6bc9717826582916cb254cd157c9c13bad32/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUU1JTg5JUIyJUU1JUJEJTkzJUU1JTk1JThGJUU5JUExJThDJUUzJTgxJUFFJUUzJTgzJThGJUUzJTgzJUIzJUUzJTgyJUFDJUUzJTgzJUFBJUUzJTgyJUEyJUUzJTgzJUIzJUU2JUIzJTk1JUUzJTgyJTkycHl0aG9uJUUzJTgxJUE3JUU1JUFFJTlGJUU4JUEzJTg1JUUzJTgxJTk3JUUzJTgxJUE2JUUzJTgxJUJGJUUzJTgxJTlGJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz0wODBkODdmYjMyMTNkNTU5ZjkzNWVjNTdmOWUwY2QwZA%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBtX19rJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1jMDQ1ZWQ4MTg0NDg4ZDExNjBjZmFlYTE4YjlkNDM0YQ%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3Db8eaf82f64477bd463a9d5f506e4ffca)