الفرق بين المراجعتين ل"Algorithms/arrays"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
سطر 23: سطر 23:
 
* تتمتّع المصفوفات بمواقع تخزين مؤقتة cache locality أفضل وهو أمر قد يؤدي إلى إحداث فارق كبير في أداء المصفوفات.
 
* تتمتّع المصفوفات بمواقع تخزين مؤقتة cache locality أفضل وهو أمر قد يؤدي إلى إحداث فارق كبير في أداء المصفوفات.
  
السلسلة النصية string هي مصفوفة من المحارف.
+
تجدر الإشارة إلى أن السلسلة النصية string هي مصفوفة من المحارف.
  
 
== عيوب المصفوفات ==
 
== عيوب المصفوفات ==
سطر 32: سطر 32:
 
# أن عملية إضافة عنصر جديد إلى المصفوفة مكلفة من ناحية الوقت وذلك لأن هذه العملية تتطلب إيجاد مكان للعنصر الجديد، وهذا بدوره يتطلب إزاحة العناصر عن مواقعها الأصلية.
 
# أن عملية إضافة عنصر جديد إلى المصفوفة مكلفة من ناحية الوقت وذلك لأن هذه العملية تتطلب إيجاد مكان للعنصر الجديد، وهذا بدوره يتطلب إزاحة العناصر عن مواقعها الأصلية.
  
== انظر أيضًا ==
+
== أمثلة ==
 +
<syntaxhighlight>
 +
// C/C++/Java مصفوفة محارف في
 +
char arr1[] = {'g', 'e', 'e', 'k', 's'};
 +
 
 +
// C/C++/Java مصفوفة أعداد صحيحة في
 +
int arr2[] = {10, 20, 30, 40, 50};
 +
 
 +
</syntaxhighlight>
  
 
== المصدر ==
 
== المصدر ==

مراجعة 13:11، 10 يونيو 2019


المصفوفات عبارة عن مجموعة من العناصر المخزّنة في مواقع متجاورة في الذاكرة، والهدف من المصفوفات هو تخزين عناصر متعددة من النوع ذاته في مكان واحد، وبهذا يسهل حساب موقع كل عنصر في المصفوفة وذلك بإضافة قيمة إزاحة معينة إلى قيمة أساسية تمثّل موقع عنصر المصفوفة الأول في الذاكرة (عادة ما يرمز له بواسطة اسم المصفوفة).

ولتبسيط الصورة أكثر، يمكن تخيل المصفوفة على أنّها سلّم يقف واحد من أصدقائك على كل درجة من درجاته، وهكذا يمكنك معرفة موقع أيّ صديق بمعرفة رقم الدرجة التي يقف عليها.

ولكن يجب الانتباه إلى أنّ موقع الفهرس اللاحق يعتمد على نوع البيانات المستخدمة.


يمكن القول أنّ الصورة في أعلاه تمثّل نظرة علويّة للسلّم الذي تقف في بدايته، ويمكن التعرّف على كل عنصر بواسطة الفهرس الخاص به في المصفوفة (بنفس الطريقة التي يمكنك بواسطتها التعرّف على أصدقائك في المثال السابق).

أنواع الفهرسة في المصفوفات:

لفهرسة المصفوفات ثلاثة أنواع:

  • (الفهرسة التي تبدأ من الصفر): يأخذ العنصر الأول في المصفوفة الرقم 0.
  • (الفهرسة التي تبدأ من واحد): يأخذ العنصر الأول في المصفوفة الرقم 1.
  • (الفهرسة التي تبدأ من n): يمكن اختيار العدد الذي سيأخذه العنصر الأول في المصفوفة. وعادة ما تسمح لغات البرمجة التي تعتمد هذا النوع من الفهرسة باستخدام الأرقام السالبة إضافة إلى أنواع البيانات العددية scalar مثل التعدادات enumerations أو المحارف characters.

فوائد استخدام المصفوفات

  • تتيح المصفوفات الوصول إلى العناصر بطريقة عشوائية، وهذا يسرّع عملية الوصول إلى العناصر بالاعتماد على مواقعها.
  • تتمتّع المصفوفات بمواقع تخزين مؤقتة cache locality أفضل وهو أمر قد يؤدي إلى إحداث فارق كبير في أداء المصفوفات.

تجدر الإشارة إلى أن السلسلة النصية string هي مصفوفة من المحارف.

عيوب المصفوفات

إن ما يعيب المصفوفات هو:

  1. أنّ حجم المصفوفات ثابت، وهذا يعني وجوب معرفة الحد الأقصى لعدد العناصر في المصفوفة قبل تعريفها، إلى جانب أنّ الذاكرة المحجوزة للمصفوفة تكون مساوية للحد الأقصى بصرف النظر عن عدد عناصر المصفوفة الحقيقي، وعادة ما لا يتم الوصول إلى الحد الأقصى عمليًا.
  2. أن عملية إضافة عنصر جديد إلى المصفوفة مكلفة من ناحية الوقت وذلك لأن هذه العملية تتطلب إيجاد مكان للعنصر الجديد، وهذا بدوره يتطلب إزاحة العناصر عن مواقعها الأصلية.

أمثلة

// C/C++/Java مصفوفة محارف في 
char arr1[] = {'g', 'e', 'e', 'k', 's'};

// C/C++/Java مصفوفة أعداد صحيحة في 
int arr2[] = {10, 20, 30, 40, 50};

المصدر