マップを折りたたみながら無限ループの例外を生成しようとしています。無限ループ例外
module X=Map.Make(Int)
問題は次のようになります。関数 "f"が無限ループにならない最大ランクを決定します。 (最初のペアのための
(1,2)=>(1)= 2今、私はみますF F:私たちは[(1,2);(2,3);(5,6);(6,7);(7,6)]
機能は、このようなマップのすべてのペアを通過するマップを持っています2)= 3(ペア(2,3)に存在するように)今私は試してみよう3 =>キーが見つからない= 3だからランクは関数fを呼び出すことができる回数です(5,6)=> f(5)= 6試してみるf(6)= 7(ペア(6,7)が存在する)試してみるf(7)= 6(ペア(7,6)が存在する)f(6)= 7はループに入ります。これは既にペアを使用していますので大文字小文字は0です。
結論:それは無限ループに入らない場合は、関数fの最大ランクは2
は、どのように私は私の例外を定義することができているだけでなく、私はこの問題を解決するために使用することができますどのような推論?
「2つのレーシングカー」のアプローチは、Floyd's * TortoiseとHare *アルゴリズムとして最もよく知られています。https://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare – coredump
ええ、私はそれを思い出すために努力していたが、私の記憶は不在の日だった))ありがとう、ポストを更新します。 – ivg