2017-05-01 8 views
-3

私は現在、バイナリ検索を追加するコードをいくつか持っています。現在、私のコードはファイルを読み込み、組み込み関数を使って値を検索します。私はバイナリ検索を簡単に実装できる方法はありますか?私はバイナリ検索のコードを持っていますが、実際には理解できません。私はそれの原則を理解しているが、apply.Anyヘルプに感謝されるとは確信していません。組み込み関数ではなくバイナリ検索を適用する

現在のコード:

string fileResponse = "Data1/Region_1.txt"; 
Console.Write("please enter a word to search for in the file: (Case Sensitive) "); 
     string wordResponse = Console.ReadLine(); 
StreamReader myfile = File.OpenText(fileResponse); 

     using (StreamReader myFile = File.OpenText(fileResponse)) 
     { 
      int count = 0; //counts the number of times wordResponse is found. 
     int lineNumber = 0; 
      while (!myFile.EndOfStream) 
      { 
       string line = myFile.ReadLine(); 
        lineNumber++; 
       int position = line.IndexOf(wordResponse); 
       if (position != -1) 
       { 
        count++; 
        Console.WriteLine("Match #{0} {1}:{2}", count, lineNumber, line); 
       } 
      } 

      if (count == 0) 
      { 
       Console.WriteLine("your word was not found!"); 
      } 
      else 
      { 
       Console.WriteLine("Your word was found " + count + " times!"); 
      } 
      Console.ReadLine(); 
     } 

標準のバイナリ検索私が実装したい:

public static object BinarySearchIterative(int[] inputArray, int key, int min, int max) 
{ 
while (min <=max) 
{ 
    int mid = (min + max)/2; 

    if (key == inputArray[mid]) 
    { 
     return ++mid; 
    } 
    else if (key < inputArray[mid]) 
    { 
     max = mid - 1; 
    } 
    else 
    { 
     min = mid + 1; 
    } 
} 
return "0"; 
} 
+0

'Array.BinarySearch()'や 'List .BinarySearch()'を使うのはなぜですか?いずれにしても、あなたの質問はあまりにも広すぎます。バイナリ検索を理解すれば、実装は簡単です。したがって、バイナリ検索を簡単に実装できるようにするための最初のステップは、それがどのように機能するかを理解することです。スタックオーバーフローは、よく知られているアルゴリズムでパーソナライズされた指示を求める適切な場所ではありません。あなたが試したことを示す良い[mcve]と、あなたが持っているいくつかの問題に関する_specific_質問がある場合は、それを新しい質問として投稿してください。 –

+0

私は間違った言葉を言いました。私はそれが何をどのように理解します。私が助けが必要な部分は、これもまた読み込まれたファイルを適用してから、バイナリ検索を使ってこのファイルに対して検索する単語を入力することです。 – Duncher

+0

ファイルのスキーマとは何ですか?また、バイナリ検索を使ってライン内の単語や単語を探したいのですか? –

答えて

0

私はあなたが探している答えは "いいえ" だと思います

バイナリ検索は、並べ替えたフィールドでのみ行うことができます。例を挙げましょう:

  1. Abraham.Lincoln
  2. George.Washington
  3. John.Adams
  4. ミラード・フィルモア
  5. Thomas.Jefferson
  6. Zachary.Taylor

...これらのレコードはファーストネームでソートされています。ですから、「ミラード」のファーストネームのバイナリ検索をしましょう。途中から始め、「ジョン」を読んでください。ミラードはそれより大きいので、名前は下半分になければなりません。次に、その下半分を見て、それがトーマス・ジェファーソンのことを言ってみましょう。待つ、いや、遠すぎる - ミラードはそれらの間にある。 「John」と「Thomas」の間を読んで、Millardを見つけます。おめでとう!あなたはファイル全体を読む必要はありませんでした。あなたが探していたものを正確に見つけるために、上下にバウンスすることができました。

しかし、今では別の仕事が与えられたと思います。最初の名前が「ob」ののある社長を見つけてください。です。だからバイナリサーチを試みて、あなたは「ジョン」を読んでいます。あなたはどうした?アップ?ダウン?バイナリ検索はできません。上方向または下方向にスキップするかどうかを判断する方法がないためです。

短い物語です:あなたは、データのは、上のソートフィールド上の唯一のバイナリ検索(。とはその後も、あなたはフィールドの先頭からのみのバイナリ検索することができます)あなたはとても

を求めていることができるときファイル内の単語を検索する場合は、並べ替えられた列だけでなく、ファイル内のどこでもという単語を探しているようです。その場合、バイナリ検索は実際には使用できません。

関連する問題