シーケンシャル検索
あまりにも簡単で、説明していません。
二分法(単調)
バイナリ検索:
小規模から大規模まで
以上の検索\(K \)左端の要素を。
while(left<right)
{
mid=(left+right)>>1;
if(x[mid]<k)left=mid+1;
else right=mid;
}
以下の検索\(k個\)右端の要素を。
while(left<right)
{
mid=(left+right+1)>>1;
if(x[mid]>k)right=mid-1;
else left=mid;
}
下行
以上の検索\(k個\)右端の要素を。
while(left<right)
{
mid=(left+right+1)>>1;
if(x[mid]<k)right=mid-1;
else left=mid;
}
以下の検索\(k個\)左端の要素を。
while(left<right)
{
mid=(left+right)>>1;
if(x[mid]>k)left=mid+1;
else right=mid;
}
二値の答え:
最小最大
while(left<right)
{
mid=(left+right+1)>>1;
if(check(mid))left=mid;
else right=mid-1;
}
最大最小
while(left<right)
{
mid=(left+right)>>1;
if(check(mid))right=mid;
else left=mid+1;
}
原理の詳細は:確かではないとの放棄は、潜在的に有用なままに、いくつかの状況を追加する必要があり、無限ループを防ぐために切り捨て。
注:数学的帰納証明可能な最後の\(左=右\) 、それは、いずれかの出力です。
私より上ではないものの反対のようですので、等しいがあるので\(1 + \)または( - 1 \)\交換可能。
サーズのルール
完了するためにピットを出ます。