لماذا معالجة المصفوفة المرتبة أسرع من غير المرتبة؟
مرحباً بالجميع. أدرس لغة C++ وقد صادفت سلوك أداء غريب. كتبت برنامجاً بسيطاً يجمع عناصر المصفوفة، ولكن فقط إذا كانت أكبر من حد معين (مثلاً 128). قمت بقياس وقت التنفيذ للمصفوفة المرتبة وغير المرتبة — وكانت النتائج صادمة.
إليكم الكود:
```cpp
#include
#include
#include
#include
int main() {
const int SIZE = 100000;
std::vector data(SIZE);
// نملأ بأرقام عشوائية
for (int i = 0; i < SIZE; ++i) {
data[i] = rand() % 256;
}
// نسخة للحالة غير المرتبة
std::vector unsorted = data;
std::vector sorted = data;
std::sort(sorted.begin(), sorted.end());
long long sum = 0;
auto start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < SIZE; ++i) {
if (sorted[i] >= 128) {
sum += sorted[i];
}
}
}