循環参照検知:考察3
動くコードはできたが、このコードの計算量はいくらだろうか?
- 循環がない場合
- m = 1 ですべてのノードの隣が検査されて終端を発見するため、計算量は n である。
- 循環が k 番目から (k - p) 番目に向けて発生している場合
- m が p になるまでの計算量は (p-1)n であり、m = p における計算量は k であるから、全体の計算量は (p - 1)n + k になる。
ということは、O(n) である。
本当に?
HasLoop(node) の計算量は上記の通り O(n) だが、リンクリストに対する操作は HasLoop(node,int) で行われていて、その計算量は終端または引数の m である。よって、計算量はとなるから、上記のコードは全体として つまり となる。ザンネーン。