アルゴリズムとデータ構造まとめその2 サーチ

はじめに

この記事は著者が学習書の内容を備忘録としてまとめたものです。


第二回の今回はサーチについてまとめます。

サーチ概要

サーチとはデータの中から、ある値と一致する値を持つものを探すことであり、主な手法は以下の2つである。

リニアサーチ

概要

最もシンプルな手法で、データを先頭から一つずつ確認していく。O(N)。   実際には、次回の記事で説明する自己組織化探索にする。

コード

int linear_search(int x, int *a, int num){
  int n = 0, t;
  // 番人
  t = a[num - 1];
  a[num - 1] = x;
  while(n < num && a[n] != x){
    n++;
  }

  a[num - 1] = t;
  if(n < num - 1){
    return n;
  }
  if(x == t){
    return n;
  }

  return NOT_FOUND;
}

イナリサーチ

概要

クイックソートの逆バージョンのようなサーチ法。既にソートされているデータに対して、二分探索を繰り返してサーチを行う。O(logN)。

コード

int binary_search(int x, int *a, int left, int right){
  int mid;
  while(left < right){
    mid = (left + right) / 2;
    if(a[mid] < x){
      left = mid + 1;
    } else {
      right = mid;
    }
  }
  if(a[left] == x){
    return left;
  }

  return NOT_FOUND;
}