東北大学 / 大学院情報科学研究科
フロイドの循環検出アルゴリズムの形式的検証
今となっては少々昔のことですが,AtCoder Beginner Contest 167のD問題で数列の循環検出が必要になった事がありました(問題の制約的にはダブリングでも解けますが). 数列の循環検出はナイーブにに実装すると,循環している部分に至るまでの長さを,循環の長さをとするとのメモリが必要になってしまいますが,これをで計算するアルゴリズムとして,フロイドの循環検出法が知られています. 中々巧妙なアルゴリズムなもので,これを実装して本当に循環検出ができているのか少々不安に思うところもありますし,この際Coqで正当性を保証してやりましょう.