الفرق بين المراجعتين لصفحة: «Algorithms/arrays»

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:المصفوفات}}</noinclude> المصفوفات عبارة عن مجموعة من العناصر المخزّنة في مواقع متجا...'
 
طلا ملخص تعديل
 
(6 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:المصفوفات}}</noinclude>
<noinclude>{{DISPLAYTITLE:المصفوفات}}</noinclude>
المصفوفات عبارة عن مجموعة من العناصر المخزّنة في مواقع متجاورة في الذاكرة، والهدف من المصفوفات هو تخزين عناصر متعددة من النوع ذاته في مكان واحد، وبهذا يسهل حساب موقع كل عنصر في المصفوفة وذلك بإضافة قيمة إزاحة معينة إلى قيمة أساسية تمثّل موقع عنصر المصفوفة الأول في الذاكرة (عادة ما يرمز له بواسطة اسم المصفوفة).
المصفوفات عبارة عن مجموعة من العناصر المخزّنة في مواقع متجاورة في الذاكرة، والهدف من المصفوفات هو تخزين عناصر متعددة من النوع ذاته في مكان واحد، وبهذا يسهل حساب موقع كل عنصر في المصفوفة وذلك بإضافة قيمة إزاحة معينة إلى قيمة أساسية تمثّل موقع عنصر المصفوفة الأول في الذاكرة (عادة ما يرمز له بواسطة اسم المصفوفة).


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


ولكن يجب الانتباه إلى أنّ موقع الفهرس اللاحق يعتمد على نوع البيانات المستخدمة.
ولكن يجب الانتباه إلى أنّ موقع الفهرس اللاحق يعتمد على نوع البيانات المستخدمة.
 
[[ملف:arrays.png|مركز]]


يمكن القول أنّ الصورة في أعلاه تمثّل نظرة علويّة للسلّم الذي تقف في بدايته، ويمكن التعرّف على كل عنصر بواسطة الفهرس الخاص به في المصفوفة (بنفس الطريقة التي يمكنك بواسطتها التعرّف على أصدقائك في المثال السابق).
يمكن القول أنّ الصورة في أعلاه تمثّل نظرة علويّة للسلّم الذي تقف في بدايته، ويمكن التعرّف على كل عنصر بواسطة الفهرس الخاص به في المصفوفة (بنفس الطريقة التي يمكنك بواسطتها التعرّف على أصدقائك في المثال السابق).
سطر 16: سطر 15:
* (الفهرسة التي تبدأ من الصفر): يأخذ العنصر الأول في المصفوفة الرقم 0.
* (الفهرسة التي تبدأ من الصفر): يأخذ العنصر الأول في المصفوفة الرقم 0.
* (الفهرسة التي تبدأ من واحد): يأخذ العنصر الأول في المصفوفة الرقم 1.
* (الفهرسة التي تبدأ من واحد): يأخذ العنصر الأول في المصفوفة الرقم 1.
* (الفهرسة التي تبدأ من n): يمكن اختيار العدد الذي سيأخذه العنصر الأول في المصفوفة. وعادة ما تسمح لغات البرمجة التي تعتمد هذا النوع من الفهرسة باستخدام الأرقام السالبة إضافة إلى أنواع البيانات العددية scalar مثل التعدادات enumerations أو المحارف characters.
* (الفهرسة التي تبدأ من n): يمكن اختيار العدد الذي سيأخذه العنصر الأول في المصفوفة. وعادة ما تسمح [https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/ لغات البرمجة] التي تعتمد هذا النوع من الفهرسة باستخدام الأرقام السالبة إضافة إلى أنواع البيانات العددية scalar مثل التعدادات enumerations أو المحارف characters.


== فوائد استخدام المصفوفات ==
== فوائد استخدام المصفوفات ==
سطر 23: سطر 22:
* تتمتّع المصفوفات بمواقع تخزين مؤقتة cache locality أفضل وهو أمر قد يؤدي إلى إحداث فارق كبير في أداء المصفوفات.
* تتمتّع المصفوفات بمواقع تخزين مؤقتة cache locality أفضل وهو أمر قد يؤدي إلى إحداث فارق كبير في أداء المصفوفات.


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


== عيوب المصفوفات ==
== عيوب المصفوفات ==
سطر 31: سطر 30:
# أنّ حجم المصفوفات ثابت، وهذا يعني وجوب معرفة الحد الأقصى لعدد العناصر في المصفوفة قبل تعريفها، إلى جانب أنّ الذاكرة المحجوزة للمصفوفة تكون مساوية للحد الأقصى بصرف النظر عن عدد عناصر المصفوفة الحقيقي، وعادة ما لا يتم الوصول إلى الحد الأقصى عمليًا.
# أنّ حجم المصفوفات ثابت، وهذا يعني وجوب معرفة الحد الأقصى لعدد العناصر في المصفوفة قبل تعريفها، إلى جانب أنّ الذاكرة المحجوزة للمصفوفة تكون مساوية للحد الأقصى بصرف النظر عن عدد عناصر المصفوفة الحقيقي، وعادة ما لا يتم الوصول إلى الحد الأقصى عمليًا.
# أن عملية إضافة عنصر جديد إلى المصفوفة مكلفة من ناحية الوقت وذلك لأن هذه العملية تتطلب إيجاد مكان للعنصر الجديد، وهذا بدوره يتطلب إزاحة العناصر عن مواقعها الأصلية.
# أن عملية إضافة عنصر جديد إلى المصفوفة مكلفة من ناحية الوقت وذلك لأن هذه العملية تتطلب إيجاد مكان للعنصر الجديد، وهذا بدوره يتطلب إزاحة العناصر عن مواقعها الأصلية.
== أمثلة ==
تعرض الأمثلة التالية طريقة تعريف المصفوفات في عدد من لغات البرمجة:
* C/C++/Java
<syntaxhighlight lang="c++">
// C/C++/Java مصفوفة محارف في
char arr1[] = {'g', 'e', 'e', 'k', 's'};
// C/C++/Java مصفوفة أعداد صحيحة في
int arr2[] = {10, 20, 30, 40, 50};
</syntaxhighlight>
يمكن الوصول إلى العنصر عن طريق موقعه وذلك باستخدام التعبير <code>arr[i]‎</code> فمثلًا نحصل على الحرف <code>'g'</code> من التعبير <code>arr1[0]</code>‎ ونحصل على العدد <code>20</code> من التعبير <code>arr2[1]‎</code>.
* [[Python|بايثون]]
يمكن استخدام القوائم في بايثون لجمع مجموعة من العناصر في مكان واحد، ويمكن للقوائم في بايثون أن تضمّ أنواعًا مختلفة من البيانات:<syntaxhighlight lang="python3">
squares = [1, 4, 9, 16, 25]
</syntaxhighlight>كذلك تقدّم بايثون [[Python/array|الوحدة array]] التي تتيح استخدام المصفوفات، وتختلف هذه المصفوفات عن القوائم في أن أنواع الكائنات التي يمكن تخزينها في المصفوفات محدودة.<syntaxhighlight lang="python3">
‎‎from array import *
array1 = array('i', [10,20,30,40,50])
</syntaxhighlight>يجدر التنبيه هنا إلى أن مصفوفة المحارف تسمى بالسلسلة النصية string عادةً.


== المصدر ==
== المصدر ==


* صفحة Introduction to Arrays في توثيق بنى المعطيات في موقع [https://www.geeksforgeeks.org/introduction-to-arrays/ GeeksforGeeks]
* صفحة [https://www.geeksforgeeks.org/introduction-to-arrays/ Introduction to Arrays] في توثيق بنى المعطيات في موقع GeeksforGeeks.


[[تصنيف: الخوارزميات]]
[[تصنيف: الخوارزميات]]
[[تصنيف: بنى المعطيات]]
[[تصنيف: بنى المعطيات]]

المراجعة الحالية بتاريخ 10:10، 22 سبتمبر 2022

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

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

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

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

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

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

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

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

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

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

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

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

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

أمثلة

تعرض الأمثلة التالية طريقة تعريف المصفوفات في عدد من لغات البرمجة:

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

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

يمكن الوصول إلى العنصر عن طريق موقعه وذلك باستخدام التعبير arr[i]‎ فمثلًا نحصل على الحرف 'g' من التعبير arr1[0]‎ ونحصل على العدد 20 من التعبير arr2[1]‎.

يمكن استخدام القوائم في بايثون لجمع مجموعة من العناصر في مكان واحد، ويمكن للقوائم في بايثون أن تضمّ أنواعًا مختلفة من البيانات:

squares = [1, 4, 9, 16, 25]

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

‎‎from array import *

array1 = array('i', [10,20,30,40,50])

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

المصدر