2017-08-21 4 views
-1

ありがとうございます。もっと長い配列のアルゴリズムのパフォーマンスを上げるにはどうすればよいですか?

数字の並んでいる配列の中で、いくつの数字が4未満であるかを数えます。

もっと長い配列のアルゴリズムのパフォーマンスを向上させるにはどうすればよいですか?計算速度を上げます。バイナリ検索は役に立ちますか?アウトプット?このような問題のための良いアプローチは小さな部分でとThreadPoolの助けを借りて、あなたの配列を分割することです

public static int CountNumbers(int[] sortedArray, int lessThan) 
    { 
     int count = 0; 

     for (int i = 0, len = sortedArray.Length; i < len; i++) 
      if (sortedArray[i] < lessThan) 
       count++; 
      else return count; 

     return count; 
    } 

Assert.AreEqual(SortedSearch.CountNumbers(new int[] { 1, 3, 5, 7 }, 4), 2); 
+4

使用BinarySearch –

+0

を使用する必要がありますか? – Servy

+0

@SergeyBerezovskiy:何番号のバイナリ検索ですか? – Tigran

答えて

0

あなたは、バイナリ検索を使用しようとしたときに何が起こったArray.BinarySearch

static int CountNumbers(int[] sortedArray, int lessThan) 
{ 
    if (sortedArray[0] >= lessThan) return 0; 

    int lengthOfArray = sortedArray.Length; 
    if (lengthOfArray == 0) return 0; 
    if (sortedArray[lengthOfArray - 1] < lessThan) return lengthOfArray; 

    int index = Array.BinarySearch(sortedArray, lessThan); 
    if (index < 0) 
     return ~index; 
    // Find first occurrence in case of duplicate 
    for (; index > 0 && sortedArray[index - 1] == lessThan; index--) ; 
    return index; 
} 
-1

https://msdn.microsoft.com/en-us/library/3dasc8as(v=vs.80).aspxを参照)の計算速度を向上させます。

+0

実行される各操作は前の操作の結果によって異なるため、バイナリ検索は実際にはマルチスレッド化できません。 * n *はスレッドの数に1を加えたものですが、シングルスレッドのバイナリ検索は高速で、* n * -aryの検索にはスレッド間の通信が多く必要ですスレッドはここでは役に立たないと想像してはいけません。 –

関連する問題