Avatar ·

لماذا معالجة المصفوفة المرتبة أسرع من غير المرتبة؟

مرحبًا أيها الزملاء! أنا مطور 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; } } ```