ジャンプ検索

コンピュータサイエンスにおいてジャンプ検索またはブロック検索は、順序付きリスト検索アルゴリズムを指します。このアルゴリズムは、まずL kmmブロックサイズ)のすべての項目を調べ、検索キーよりも大きい項目が見つかるまで繰り返します。リスト内の検索キーの正確な位置を見つけるために、サブリストL [( k -1) m , km ]に対して線形探索が実行されます {\displaystyle k\in \mathbb {N} }

mの最適値はnです。ここでnはリストLの長さです。アルゴリズムのどちらのステップも最大n個の項目を参照するため、アルゴリズムの実行時間は O( n ) です。これは線形探索よりも優れていますが、二分探索よりも劣っています。二分探索に対する利点は、ジャンプ探索では後方へのジャンプが1回だけであるのに対し、二分探索では最大 log n回後方にジャンプできることです。これは、後方へのジャンプが前方へのジャンプよりも大幅に時間がかかる場合に重要になります。

このアルゴリズムは、最終的に線形探索を実行する前に、サブリストに対して複数レベルのジャンプ探索を実行することで変更できます。k レベルのジャンプ探索の場合、l番目レベル(1 から数える)の最適なブロックサイズm lはn (kl)/kです。修正されたアルゴリズムはk回の後方ジャンプを実行し、実行時間は O( kn 1/( k +1) ) になります。

実装

アルゴリズムJumpSearch の入力
    順序付きリストL、その長さn、検索キーsです。
    出力は、L内のsの位置sがLにない場合は何も出力されません
    
    a ← 0
     b⌊√n 
    
     L min( b , n )-1 < s の間、ab bb + ⌊√ nを実行し、 
        anの場合何も返さない。
          
             
    
     L a < s の場合、aa + 1
        を実行し、 
        a = min( b , n )
            の場合は何も返さない。  
    
     L a = s の場合はaを返し、そうでない場合は
        何も返さない 
    
         

参照

参考文献

  • パブリックドメイン この記事には、Paul E. Blackのパブリックドメイン資料が含まれていますジャンプ検索」。アルゴリズムとデータ構造の辞書。NIST
  • Ben Shneiderman「ジャンプ検索:高速シーケンシャル検索テクニック」、CACM、21(10):831-834、1978年10月。
「https://en.wikipedia.org/w/index.php?title=Jump_search&oldid=1306453545」より取得