2017-08-21 2 views
-1

Danke fürs schauen.Wie kann ich die Algorithmusleistung für ein längeres Zahlenfeld erhöhen?

Zählen Sie, wie viele Zahlen in einem geordneten Zahlenfeld weniger als 4 sind.

Wie kann ich die Algorithmusleistung für ein längeres Zahlenfeld erhöhen? Erhöhen Sie die Berechnungsgeschwindigkeit. Funktioniert die binäre Suche? Ausgaben?

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

Verwenden Binary –

+0

verwenden Was passiert, wenn Sie eine binäre Suche versucht? – Servy

+0

@SergeyBerezovskiy: Binäre Suche nach welcher Nummer? – Tigran

Antwort

0

sollten Sie 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

Ein guter Ansatz für ein Problem wie dieses ist Ihr Array in kleinere Teile und mit Hilfe eines ThreadPool (siehe https://msdn.microsoft.com/en-us/library/3dasc8as(v=vs.80).aspx) erhöhen die Rechengeschwindigkeit zu spalten.

+0

Binäre Suche ist nicht wirklich möglich, Multithread zu machen, da jede durchgeführte Operation von den Ergebnissen der vorherigen Operation abhängt. Sie könnten * n * -ary suchen, wobei * n * die Anzahl der Threads plus eins ist, aber die single-threaded binäre Suche ist so schnell und die * n * -ary-Suche würde so viel Inter-Thread-Kommunikation erfordern, dass ich kann Stellen Sie sich keine Fäden vor, die hier überhaupt nützlich sind. –

Verwandte Themen