2017-10-11 5 views
0

バイナリ検索特定ワードを私たちが読んだファイルに使用するように頼まれました。数字ではなく単語だけを使用してバイナリ検索を使用するにはどうすればよいですか?

私には分かりませんが、という単語ではなく、という単語を検索するときにバイナリ検索を使用する方法があります。

+0

がどのように数字のためにそれを使うのですかCで実装しますか?あなたは言葉のために同じことをするのを防ぐ何ですか? – Oleg

+0

デモの実装では、簡単なGoogleの検索結果が表示されます:[GitHub Gist:BinarySearch.java](https://gist.github.com/aviraldg/2195495)。これは、通常のアルゴリズムで、 '<'のような比較は '' String'sのようなオブジェクトを処理するためにcompareToによって交換されます。 – Zabuza

+0

@Nevoxinユーザーがあなたの質問に答えた場合は、彼の答えも受け入れてください([回答を受け入れる:どのように動作しますか?](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-作業))。そうでない場合は未回答のものを指定してください。これはStackOverflowの重要な部分です。ありがとうございます。 – Zabuza

答えて

4

バイナリ検索は、ソート入力で動作します。値だけでなく、単語にもorderを定義することができます。

たとえば、lexicographical orderです。 Javaでは、これは自然順序Stringsとして実装されています。したがって、"text1".compareTo("text2")を実行して注文を返します。バイナリサーチの


小さなイラスト:

Binary search illustration

ご覧のとおり、アルゴリズムで決定する唯一のものは、2つのオブジェクト間の順序です。たとえば、画像からは7 < 147 > 6です。このように、Stringの場合も同様です。確かにのすべてあなたのためにを定義します。 (150以上)は、Javaで

実際には多くのクラス自然順序を実装するが、これらはインターフェースComparabledocumentation)の下に一覧表示され、それらはすべて意味のある順序compareTo方法を提供します。

+0

テキスト文書を検索するために文字列で文字列を使用する方法の例を私に示す方法はありますか?私はまだそれについて少し混乱しています! – Nervoxin

+0

値のバイナリ検索アルゴリズムを取り、 'String'でそれを交換します。残っているのは '<' or '>'と 'String#compareTo'メソッドとの比較を交換することだけです。あなたのコードを私に見せたら、あなたのためにそれを編集し、変更を説明します。 – Zabuza

0

辞書で単語を検索すると思います。これはバイナリ検索の例です。

は例えば、「eunoia」を調べることができます:

  1. あなたが約「E」セクションに辞書を開く反転が、多分あなたはあまりにも遠くに少し行くと「M」で終わります。
  2. あなたは約半分のところを裏返しにして、 "E"セクションに入っています(運がよければ)
  3. 単語の次の文字に移動して繰り返します。

このすべての作品辞書は整ったであるため、我々はすべてのAが第一の手紙であることに同意し、B等、第二であることを見てもう一つの方法は、アルファベットが同じものであるということです数字[0 - 25]とちょうど異なる名前である。 文字列ため

+0

テキスト文書を検索するために文字列で文字列を使用する方法の例を私に示す方法はありますか?私はまだそれについて少し混乱しています! – Nervoxin

0

バイナリ検索は

char *lineptr[MAXLINE] //Array of char pointers stores the address of string 
    int binsrch(char srch[],int low,int high) 
    { 
     int mid; 

     if(high>=low){ 
      mid=(low+high)/2; 
      if(strcmp(srch,lineptr[mid])<0) //compare string stored in srch and lineptr[mid] 
       return binsrch(srch,low,mid-1,count); 
      else if(strncmp(srch,lineptr[mid],count)>0) 
       return binsrch(srch,mid+1,high,count);              
      else 
       return mid; // Found 
     } 
    return -1; //Not found 
    }            
関連する問題