لماذا معالجة المصفوفة المرتبة أسرع من غير المرتبة؟
مرحبًا أيها الزملاء! أنا مطور Java مبتدئ وواجهت سلوكًا غريبًا في الكود الخاص بي. لدي اختبار أداء بسيط: أقوم بجمع كل عناصر المصفوفة التي تكون أكبر من حد معين. لكن لاحظت أنه إذا تم ترتيب المصفوفة مسبقًا، فإن الكود يعمل أسرع بمقدار 2-3 مرات! إليك الكود الخاص بي:
```java
public class BranchPredictionTest {
public static void main(String[] args) {
int size = 100000;
int[] data = new int[size];
Random rand = new Random();
for (int i = 0; i < size; i++) {
data[i] = rand.nextInt(256);
}
// نرتب المصفوفة
int[] sorted = data.clone();
Arrays.sort(sorted);
long start = System.nanoTime();
long sumSorted = processArray(sorted);
long end = System.nanoTime();
System.out.println("Sorted: " + (end - start) + " ns, sum=" + sumSorted);
start = System.nanoTime();
long sumUnsorted = processArray(data);
long endUnsorted = System.nanoTime();
System.out.println("Unsorted: " + (endUnsorted - start) + " ns, sum=" + sumUnsorted);
}
public static long processArray(int[] arr) {
long sum = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 128) {
sum += arr[i];
}
}
return sum;
}
}
```