実社会でのシステム設計でもこういう事があります.
プロジェクトのリーダー的な人がアルゴリズム設計でこういう間違いを
すると非常にやばい。
で、解法の修正は少し難しく、誰も手をつけていません.
次のような定理があります.
定理。 凸n角形Pに外接する最小面積のk角形として、 Pのk本の辺の延長からなるか,あるいは Pのk-1本の辺の延長と、Pの一つの頂点vで接する線分e からなるものが存在する. 後者の場合, vはeの中点で接する
この定理はDePanoという人の論文にあるのですが、
出版されていない。
の証明は私も試みたことがありますが,
解析的で結構ややこしいです。
これを用いるとk=4なら、3本の辺と、一つの頂点を決めると
全部試せば問題は解けます. でも非常に
効率が悪いし、kが大きくなると手に負えない。
ダイナミックプログラミングを用いると、
kが大きくても$O(n^3 \log k)$で出来ます〔考えてみてください)。
最速の方法は文献1の$O(n^2 \log n \log k)$ですが、もっと速い方法が
あるかもしれません.
なお、Pのk個の辺からなる多角形で面積最小のものは
もっと高速に計算できます〔文献2)。
文献 1 : A. Aggarwal, J.S. Chang, C. K. Yap,
Minimum area circumscribing polygons,
The Visual Computer 1 (1985), pp.112-117
文献2:A. Aggarwal, B. Schieber, T. Tokuyama,
Finding a minimum weight k-link path in graphs with
the concave Monge property and applications,
Discrete and Computational Geometry 12 (1994),
pp.263-280.
この解法である時刻tでPと半平面が交差していないとしましょう.
するとアルゴリズムは最初の衝突時間はtより後だと判定して
時刻2tでの衝突判定を行います. 結果として,
最初の衝突時間としてはtより後の時刻を報告します.
でも、tで交差していなくても tより前の時刻で既に
衝突している可能性があるのです。
Pとして、ヘリコプターのプロペラを考えてください.
プロペラが半平面(を決める水平線)と平行だと、
プロペラの中心が水平線にぶつかっていない限り交差はしません.
でも、その前にプロペラが垂直位置に近いときにぶつかっていますよね.
ですから、この解法は駄目です。 衝突回避を自動的に行う
ナビゲーションシステムで、高速性を追求するあまり、
こんなアルゴリズムを組んだら大変な惨事になります。