二分探索アルゴリズム(Binary Search)

再帰が無ければ普通に読めるなあ

public boolean contains(int v, int[] vs){
    if (vs.length == 0)
      return false;
    
    int left = 0, right = vs.length;
    while( left + 1 < right){
      int mid = left + ( right -left ) / 2;
      
      if (v < vs[mid])
        right = mid;
      else
        left = mid;
    }
    return v == vs[left];
}

 

しかしO(N)とかO(logN)とかなんとなくしか理解していない。アルゴリズムから数学的に計算量を算出する、、ってことがこの先出来るようになる気がしない。