トップ | puarts.com
ロゴ
「matlab」に関連する記事一覧
0  

MATLAB で2分探索

2009/01/10
(2018/11/13 最終更新)

MATLABを使用して2分探索をするプログラムを書いたのでソースコードと使用方法を載せます。指定した配列の中から、指定した数値にもっとも近い数値を格納している配列番号を返しますプログラムです。

ソースコード


function[ans] = binarySearch(src,key)
  left = 1;
  right = length(src);
  while 1
      center = int16((left + right)/2);
      if(left>=right)
          break;
      elseif(key>src(center))
          left = center+1;
      else
          right = center-1;
      end
  end
  if(left ~= right)
      if(abs(src(left)-key)>=abs(src(right)-key))
          ans=right;
      else
          ans=left;
      end
  else
      if(left<length(src) && left>1)
          if(abs(src(left)-key)>=abs(src(left+1)-key))
              ans=left+1;
          elseif(abs(src(left)-key)>=abs(src(left-1)-key))
              ans=left-1;
          else
              ans=left;
          end
      elseif(left==length(src))
          if(abs(src(left)-key)>=abs(src(left-1)-key))
              ans=left-1;
          else
              ans=left;
          end
      else
          if(abs(src(left)-key)>=abs(src(left+1)-key))
              ans=left+1;
          else
              ans=left;
          end
      end  
  end  
end

使用方法


binarySearch(探索する配列, 探索する数値);

使用例


>x=[1 8 13 25 31 38 47 55 64 71];
>v=53;
>binarySearch(x,v);
ans=
        8
>x(binarySearch(x,v));
ans=
        55
0  

0.037 sec
にほんブログ村 ゲームブログ ファイアーエムブレムへ にほんブログ村 デザインブログ コンピュータグラフィックスへ

Copyright(C)2006-2018 wsp All Rights Reserved