المصفوفة (بنية البيانات)
في علم الحاسوب ، المصفوفة هي بنية بيانات تتكون من مجموعة من العناصر ( قيم أو متغيرات ) متساوية الحجم، يُحدد كل عنصر منها بفهرس أو مفتاح واحد على الأقل ، وقد تكون هذه المجموعة عبارة عن صف يُسمى صف الفهرس. بشكل عام، المصفوفة عبارة عن مجموعة خطية قابلة للتغيير من العناصر ذات نوع البيانات نفسه. تُخزن المصفوفة بحيث يمكن حساب موضع (عنوان الذاكرة) كل عنصر من صف الفهرس الخاص به باستخدام صيغة رياضية. [ 1 ] [ 2 ] [ 3 ] أبسط أنواع بنى البيانات هي المصفوفة الخطية، وتُسمى أيضًا المصفوفة أحادية البعد.
على سبيل المثال، يمكن تخزين مصفوفة من عشرة متغيرات عددية صحيحة 32 بت (4 بايت)، بمؤشرات من 0 إلى 9، على شكل عشر كلمات في عناوين الذاكرة 2000، 2004، 2008، ...، 2036 (بالنظام الست عشري : 0x7D02000، 2004 0x7D4، 0x7D82008، ...، 2036 0x7F4)، بحيث يكون عنوان العنصر ذي المؤشر i هو 2000 + ( i × 4). [ 4 ] يُسمى عنوان الذاكرة للعنصر الأول في المصفوفة بالعنوان الأول، أو عنوان الأساس، أو عنوان القاعدة.
نظرًا لإمكانية تمثيل المفهوم الرياضي للمصفوفة كشبكة ثنائية الأبعاد، تُسمى المصفوفات ثنائية الأبعاد أحيانًا "مصفوفات". في بعض الحالات، يُستخدم مصطلح "متجه" في الحوسبة للإشارة إلى المصفوفة، مع أن الصفوف هي المكافئ الرياضي الأدق. غالبًا ما تُنفذ الجداول على شكل مصفوفات، وخاصة جداول البحث ؛ ويُستخدم مصطلح "جدول" أحيانًا كمرادف لكلمة "مصفوفة".
تُعدّ المصفوفات من أقدم وأهم هياكل البيانات، وتستخدمها جميع البرامج تقريبًا. كما تُستخدم لتنفيذ العديد من هياكل البيانات الأخرى، مثل القوائم والسلاسل النصية . وتستغلّ المصفوفات منطق العنونة في الحواسيب بكفاءة عالية. في معظم الحواسيب الحديثة والعديد من أجهزة التخزين الخارجية ، تكون الذاكرة عبارة عن مصفوفة أحادية البُعد من الكلمات، حيث تمثل عناوينها مؤشراتها. غالبًا ما تُحسَّن المعالجات ، وخاصةً معالجات المتجهات ، لعمليات المصفوفات.
تُعدّ المصفوفات مفيدةً في المقام الأول لأنّ مؤشرات العناصر فيها يُمكن حسابها أثناء التشغيل . ومن بين مزاياها الأخرى، أنّ هذه الخاصية تسمح لعبارة تكرارية واحدة بمعالجة عدد غير محدود من عناصر المصفوفة. ولذلك، يجب أن تكون عناصر بنية بيانات المصفوفة متساوية الحجم وأن تستخدم نفس تمثيل البيانات. عادةً ما تكون مجموعة أزواج المؤشرات الصالحة وعناوين العناصر (وبالتالي صيغة عنونة العناصر) ثابتةً أثناء استخدام المصفوفة ، [ 3 ] [ 5 ] ولكن ليس دائمًا، [ 2 ] .
قد يشير مصطلح "المصفوفة" أيضًا إلى نوع بيانات المصفوفة ، وهو نوع بيانات توفره معظم لغات البرمجة عالية المستوى ، ويتكون من مجموعة من القيم أو المتغيرات التي يمكن تحديدها بواسطة فهرس واحد أو أكثر يتم حسابه أثناء التشغيل. غالبًا ما تُنفذ أنواع المصفوفات باستخدام هياكل المصفوفات؛ ومع ذلك، في بعض اللغات، قد تُنفذ باستخدام جداول التجزئة ، أو القوائم المتصلة ، أو أشجار البحث ، أو هياكل بيانات أخرى.
يُستخدم هذا المصطلح أيضًا، وخاصة في وصف الخوارزميات ، ليعني المصفوفة الترابطية أو "المصفوفة المجردة"، وهو نموذج نظري لعلوم الحاسوب ( نوع بيانات مجرد أو ADT) يهدف إلى التقاط الخصائص الأساسية للمصفوفات.
تاريخ
استخدمت الحواسيب الرقمية الأولى لغة الآلة لإنشاء هياكل المصفوفات والوصول إليها لجداول البيانات، وإجراء العمليات الحسابية على المتجهات والمصفوفات، ولأغراض أخرى كثيرة. كتب جون فون نيومان أول برنامج لفرز المصفوفات ( فرز الدمج ) عام ١٩٤٥، أثناء بناء أول حاسوب ذي برنامج مخزن . [ ٦ ] كان فهرسة المصفوفات تتم في الأصل باستخدام شيفرة ذاتية التعديل ، ثم لاحقًا باستخدام سجلات الفهرسة والعنونة غير المباشرة . استخدمت بعض الحواسيب المركزية المصممة في ستينيات القرن العشرين، مثل Burroughs B5000 وما تلاه، تجزئة الذاكرة لإجراء فحص حدود الفهرسة في المكونات المادية. [ ٧ ]
لا توفر لغات التجميع عمومًا دعمًا خاصًا للمصفوفات، باستثناء ما توفره الآلة نفسها. وقد دعمت لغات البرمجة عالية المستوى الأولى، بما في ذلك فورتران (1957)، وليسب (1958)، وكوبول (1960)، وألغول 60 (1960)، المصفوفات متعددة الأبعاد، وكذلك لغة سي (1972). وفي لغة سي++ (1983)، توجد قوالب فئات للمصفوفات متعددة الأبعاد التي يتم تحديد أبعادها أثناء التشغيل [ 3 ] [ 5 ] ، بالإضافة إلى قوالب للمصفوفات المرنة أثناء التشغيل. [ 2 ]
التطبيقات
تُستخدم المصفوفات لتنفيذ المتجهات والمصفوفات الرياضية ، بالإضافة إلى أنواع أخرى من الجداول المستطيلة. تتكون العديد من قواعد البيانات ، الصغيرة والكبيرة، من (أو تتضمن) مصفوفات أحادية البعد عناصرها عبارة عن سجلات .
تُستخدم المصفوفات لتنفيذ هياكل بيانات أخرى، مثل القوائم، والأكوام ، وجداول التجزئة ، وقوائم الانتظار المزدوجة ، وقوائم الانتظار ، والمكدسات ، والسلاسل النصية ، والقوائم الافتراضية. غالبًا ما تكون تطبيقات هياكل البيانات الأخرى القائمة على المصفوفات بسيطة وفعالة من حيث المساحة ( هياكل بيانات ضمنية )، وتتطلب مساحة إضافية قليلة ، ولكنها قد تكون ذات تعقيد مكاني مرتفع، خاصة عند تعديلها، مقارنةً بهياكل البيانات القائمة على الأشجار (قارن بين مصفوفة مرتبة وشجرة بحث ).
تُستخدم أحيانًا مصفوفة واحدة أو أكثر من المصفوفات الكبيرة لمحاكاة تخصيص الذاكرة الديناميكي داخل البرنامج ، وخاصة تخصيص مجمع الذاكرة . تاريخيًا، كانت هذه في بعض الأحيان الطريقة الوحيدة لتخصيص "الذاكرة الديناميكية" بشكل قابل للنقل.
يمكن استخدام المصفوفات لتحديد مسار التحكم الجزئي أو الكامل في البرامج، كبديل مختصر IFللعبارات المتعددة (التي قد تكون متكررة). في هذا السياق، تُعرف باسم جداول التحكم ، وتُستخدم بالتزامن مع مترجم مُصمم خصيصًا لهذا الغرض، حيث يتغير مسار التحكم فيه وفقًا للقيم الموجودة في المصفوفة. قد تحتوي المصفوفة على مؤشرات للبرامج الفرعية (أو أرقام برامج فرعية نسبية يمكن استخدامها بواسطة عبارات SWITCH ) التي تُوجه مسار تنفيذ البرنامج.
معرّف العنصر وصيغة العنونة
عند تخزين عناصر البيانات في مصفوفة، يتم اختيار كل عنصر على حدة بواسطة فهرس يكون عادةً عددًا صحيحًا غير سالب . تُسمى الفهارس أيضًا بالمؤشرات. يربط الفهرس قيمة المصفوفة بالعنصر المخزن.
توجد ثلاث طرق يمكن من خلالها فهرسة عناصر المصفوفة:
- 0 ( الفهرسة التي تبدأ من الصفر )
- يتم فهرسة العنصر الأول من المصفوفة بواسطة الفهرس السفلي 0. [ 8 ]
- 1 ( فهرسة تبدأ من واحد )
- يتم فهرسة العنصر الأول من المصفوفة بواسطة الرقم السفلي 1.
- n ( فهرسة قائمة على n )
- يمكن اختيار فهرس الأساس للمصفوفة بحرية. عادةً ما تسمح لغات البرمجة التي تدعم الفهرسة القائمة على n بقيم فهرس سالبة، كما يمكن استخدام أنواع بيانات عددية أخرى مثل التعدادات أو الأحرف كفهرس للمصفوفة.
يُعدّ استخدام الفهرسة التي تبدأ من الصفر خيارًا تصميميًا شائعًا في العديد من لغات البرمجة المؤثرة، بما في ذلك C و Java و Lisp . يؤدي هذا إلى تبسيط التنفيذ، حيث يشير الفهرس السفلي إلى إزاحة من موضع بداية المصفوفة، وبالتالي فإن العنصر الأول له إزاحة تساوي صفرًا.
يمكن أن تحتوي المصفوفات على أبعاد متعددة، لذا من الشائع الوصول إلى عناصرها باستخدام عدة مؤشرات. على سبيل المثال، Aقد توفر مصفوفة ثنائية الأبعاد بثلاثة صفوف وأربعة أعمدة إمكانية الوصول إلى العنصر الموجود في الصف الثاني والعمود الرابع باستخدام تعبير معين A[1][3]في حالة نظام الفهرسة الذي يبدأ من الصفر. وبالتالي، يُستخدم مؤشران للمصفوفة ثنائية الأبعاد، وثلاثة مؤشرات للمصفوفة ثلاثية الأبعاد، و n للمصفوفة ذات n بُعد.
يُطلق على عدد الفهارس اللازمة لتحديد عنصر ما اسم بُعد أو بُعدية أو رتبة المصفوفة.
في المصفوفات القياسية، يقتصر كل فهرس على نطاق معين من الأعداد الصحيحة المتتالية (أو القيم المتتالية من نوع معين )، ويتم حساب عنوان العنصر بواسطة صيغة "خطية" على الفهارس.
المصفوفات أحادية البعد

المصفوفة أحادية البعد (أو المصفوفة أحادية البعد) هي نوع من أنواع المصفوفات الخطية. يتطلب الوصول إلى عناصرها استخدام فهرس سفلي واحد يمكن أن يمثل إما فهرس الصف أو فهرس العمود.
كمثال، لنأخذ تعريفًا في لغة C يُعرّف مصفوفة أحادية البُعد تحتوي على عشرة أعداد صحيحة. يمكن لهذه المصفوفة تخزين عشرة عناصر من النوع . تبدأ فهارس هذه المصفوفة من صفر إلى تسعة. على سبيل المثال، يُمثل التعبيران و العنصر الأول والأخير على التوالي.inta[10];ainta[0]a[9]
بالنسبة للمتجه ذي العنونة الخطية، يقع العنصر ذو الفهرس i في العنوان B + c · i ، حيث B هو عنوان أساسي ثابت و c ثابت ثابت، ويسمى أحيانًا زيادة العنوان أو الخطوة .
إذا كانت فهارس العناصر الصالحة تبدأ من 0، فإن الثابت B هو ببساطة عنوان العنصر الأول في المصفوفة. لهذا السبب، تنص لغة البرمجة C على أن فهارس المصفوفة تبدأ دائمًا من 0؛ ويُطلق العديد من المبرمجين على هذا العنصر اسم " الصفر " بدلاً من "الأول".
مع ذلك، يمكن تحديد فهرس العنصر الأول باختيار مناسب للعنوان الأساسي B. على سبيل المثال، إذا كانت المصفوفة تحتوي على خمسة عناصر، مُفهرسة من 1 إلى 5، وتم استبدال العنوان الأساسي B بـ B + 30 c ، فإن فهارس هذه العناصر ستكون من 31 إلى 35. إذا لم يبدأ الترقيم من 0، فقد لا يكون الثابت B عنوانًا لأي عنصر.

المصفوفات متعددة الأبعاد

بالنسبة للمصفوفة متعددة الأبعاد، سيكون للعنصر ذي الفهرسين i و j عنوان B + c · i + d · j ، حيث المعاملات c و d هي زيادات عنوان الصف والعمود ، على التوالي.
بشكل عام، في مصفوفة ذات أبعاد k ، يكون عنوان العنصر ذي الفهارس i1 ، i2 ، ...، ik هو
- B + c 1 · i 1 + c 2 · i 2 + … + c k · i k .
على سبيل المثال: int a[2][3];
هذا يعني أن المصفوفة a تتكون من صفين وثلاثة أعمدة، وهي من نوع عدد صحيح. يمكننا تخزين ستة عناصر فيها، وسيتم تخزينها بشكل خطي بدءًا من الصف الأول ثم الصف الثاني. وبالتالي، سيتم تخزين المصفوفة a على النحو التالي: a 11 ، a 12 ، a 13 ، a 21 ، a 22 ، a 23 .
لا تتطلب هذه الصيغة سوى k عملية ضرب و k عملية جمع، لأي مصفوفة يمكن تخزينها في الذاكرة. علاوة على ذلك، إذا كان أي معامل قوة ثابتة للعدد 2، فيمكن استبدال عملية الضرب بعملية إزاحة بتية .
يجب اختيار المعاملات c k بحيث يتم تعيين كل صف فهرس صالح إلى عنوان عنصر مميز.
إذا كانت القيمة القانونية الدنيا لكل فهرس هي صفر، فإن B هو عنوان العنصر الذي تكون جميع فهارسه أصفارًا. وكما هو الحال في المصفوفات أحادية البعد، يمكن تغيير فهارس العناصر بتغيير العنوان الأساسي B. وبالتالي، إذا كانت المصفوفة ثنائية الأبعاد تحتوي على صفوف وأعمدة مفهرسة من 1 إلى 10 ومن 1 إلى 20 على التوالي، فإن استبدال B بـ B + c 1 − 3 c 2 سيؤدي إلى إعادة ترقيمها من 0 إلى 9 ومن 4 إلى 23 على التوالي. واستغلالًا لهذه الميزة، تحدد بعض اللغات (مثل FORTRAN 77) أن فهارس المصفوفة تبدأ من 1، كما هو متعارف عليه في الرياضيات، بينما تسمح لغات أخرى (مثل Fortran 90 وPascal وAlgol) للمستخدم باختيار القيمة الدنيا لكل فهرس.
متجهات رائعة
تُحدد صيغة العنونة بالكامل بواسطة البُعد d ، والعنوان الأساسي B ، والزيادات c1 ، c2 ، ...، ck . من المفيد غالبًا تجميع هذه المعلمات في سجل يُسمى مُعرِّف المصفوفة، أو متجه الخطوة، أو متجه التحسين . [ 2 ] [ 3 ] قد يتضمن متجه التحسين أيضًا حجم كل عنصر، والقيم الدنيا والقصوى المسموح بها لكل فهرس. يُعد متجه التحسين بمثابة مُعالج كامل للمصفوفة، وهو طريقة ملائمة لتمرير المصفوفات كوسائط للإجراءات . يمكن تنفيذ العديد من عمليات تقطيع المصفوفات المفيدة (مثل تحديد مصفوفة فرعية، أو تبديل الفهارس، أو عكس اتجاهها) بكفاءة عالية من خلال معالجة متجه التحسين. [ 2 ]
تصميمات مدمجة
غالباً ما تُختار المعاملات بحيث تشغل العناصر مساحة متجاورة من الذاكرة. مع ذلك، ليس هذا شرطاً. فحتى لو كانت المصفوفات تُنشأ دائماً بعناصر متجاورة، فإن بعض عمليات تقطيع المصفوفات قد تُنشئ مصفوفات فرعية غير متجاورة منها.

يوجد تصميمان مضغوطان ومنهجيان لمصفوفة ثنائية الأبعاد. على سبيل المثال، لنأخذ المصفوفة
في تخطيط ترتيب الصفوف (الذي اعتمدته لغة C للمصفوفات المعلنة بشكل ثابت)، يتم تخزين العناصر في كل صف في مواضع متتالية، وجميع عناصر الصف لها عنوان أقل من أي من عناصر الصف التالي:
1 2 3 4 5 6 7 8 9
في ترتيب الأعمدة (المستخدم تقليديًا بواسطة لغة فورتران)، تكون العناصر في كل عمود متتالية في الذاكرة، وجميع عناصر العمود لها عنوان أقل من أي من عناصر العمود المتتالي:
1 4 7 2 5 8 3 6 9
بالنسبة للمصفوفات التي تحتوي على ثلاثة فهارس أو أكثر، يضع "ترتيب الصفوف" أي عنصرين متتاليين يختلف فهرساهما بمقدار واحد فقط في الفهرس الأخير . أما "ترتيب الأعمدة" فهو مماثل بالنسبة للفهرس الأول .
في الأنظمة التي تستخدم ذاكرة التخزين المؤقت للمعالج أو الذاكرة الافتراضية ، يكون مسح المصفوفة أسرع بكثير إذا تم تخزين العناصر المتتالية في مواقع متتالية في الذاكرة، بدلاً من توزيعها بشكل متفرق. يُعرف هذا باسم "الموقع المكاني"، وهو نوع من أنواع " موقعية المرجع" . تقوم العديد من الخوارزميات التي تستخدم المصفوفات متعددة الأبعاد بمسحها بترتيب يمكن التنبؤ به. يمكن للمبرمج (أو المترجم المتطور) استخدام هذه المعلومات لاختيار ترتيب الصفوف أو الأعمدة لكل مصفوفة. على سبيل المثال، عند حساب حاصل ضرب مصفوفتين A × B ، يُفضل تخزين A بترتيب الصفوف، و B بترتيب الأعمدة.
تغيير الحجم
تتميز المصفوفات الثابتة بحجم ثابت عند إنشائها، وبالتالي لا تسمح بإضافة عناصر إليها أو حذفها. مع ذلك، من خلال تخصيص مصفوفة جديدة ونسخ محتويات المصفوفة القديمة إليها، يُمكن إنشاء نسخة ديناميكية من المصفوفة؛ انظر المصفوفة الديناميكية . إذا نُفذت هذه العملية على فترات متباعدة، فإن عمليات الإضافة في نهاية المصفوفة لا تتطلب سوى وقت ثابت مُستهلك.
بعض هياكل بيانات المصفوفات لا تعيد تخصيص مساحة التخزين، ولكنها تخزن عدد عناصر المصفوفة المستخدمة، ويُسمى هذا العدد أو الحجم. وهذا يجعل المصفوفة فعليًا مصفوفة ديناميكية ذات حجم أو سعة قصوى ثابتة؛ وسلاسل باسكال مثال على ذلك.
الصيغ غير الخطية
تُستخدم أحيانًا صيغ أكثر تعقيدًا (غير خطية). فعلى سبيل المثال، بالنسبة لمصفوفة مثلثية ثنائية الأبعاد مضغوطة ، تكون صيغة العنونة متعددة حدود من الدرجة الثانية.
كفاءة
تستغرق كل من عمليتي التخزين والاختيار (في أسوأ الحالات المحددة) وقتًا ثابتًا . وتستهلك المصفوفات مساحة خطية ( O ( n )) بعدد العناصر n التي تحتويها.
في مصفوفة بحجم عنصر k وعلى جهاز بحجم سطر ذاكرة تخزين مؤقت B بايت، يتطلب المرور على مصفوفة من n عنصرًا الحد الأدنى من أخطاء ذاكرة التخزين المؤقت ( k /B)، لأن عناصرها تشغل مواقع ذاكرة متجاورة. وهذا أفضل بمعامل B/ k تقريبًا من عدد أخطاء ذاكرة التخزين المؤقت اللازمة للوصول إلى n عنصرًا في مواقع ذاكرة عشوائية. ونتيجة لذلك، يكون المرور التسلسلي على مصفوفة أسرع بشكل ملحوظ عمليًا من المرور على العديد من هياكل البيانات الأخرى، وهي خاصية تُسمى موضعية المرجع (مع ذلك، هذا لا يعني أن استخدام دالة تجزئة مثالية أو دالة تجزئة بسيطة داخل نفس المصفوفة (المحلية) لن يكون أسرع - ويمكن تحقيقه في وقت ثابت ). توفر المكتبات إمكانيات مُحسَّنة منخفضة المستوى لنسخ نطاقات من الذاكرة (مثل memcpy ) والتي يمكن استخدامها لنقل كتل متجاورة من عناصر المصفوفة بشكل أسرع بكثير مما يمكن تحقيقه من خلال الوصول إلى العناصر الفردية. يختلف تسريع هذه الإجراءات المُحسَّنة باختلاف حجم عنصر المصفوفة، وبنية الجهاز، والتنفيذ.
من حيث الذاكرة، تُعدّ المصفوفات هياكل بيانات مُدمجة لا تتطلب مساحة تخزين إضافية لكل عنصر . قد توجد مساحة تخزين إضافية لكل عنصر في المصفوفة (مثلاً، لتخزين حدود الفهرس)، لكن هذا يعتمد على لغة البرمجة. قد يحدث أيضاً أن تتطلب العناصر المخزنة في مصفوفة ذاكرة أقل من نفس العناصر المخزنة في متغيرات فردية، لأن عدة عناصر من المصفوفة يمكن تخزينها في كلمة واحدة ؛ تُسمى هذه المصفوفات غالباً بالمصفوفات المُعبأة . من الحالات المتطرفة (لكنها شائعة الاستخدام) مصفوفة البتات ، حيث يُمثل كل بت عنصراً واحداً. بالتالي، يمكن لثمانية بتات واحدة أن تحتوي على ما يصل إلى 256 تركيبة مختلفة لما يصل إلى 8 شروط مختلفة، في أكثر أشكالها إحكاماً.
تعد عمليات الوصول إلى المصفوفات ذات أنماط الوصول التي يمكن التنبؤ بها بشكل ثابت مصدراً رئيسياً لتوازي البيانات .
مقارنة مع هياكل البيانات الأخرى
| نظرة خاطفة (فهرس) | قم بالتعديل (الإدراج أو الحذف) في … | مساحة زائدة، متوسط | |||
|---|---|---|---|---|---|
| بداية | نهاية | وسط | |||
| قائمة مرتبطة | Θ( n ) | Θ(1) | Θ(1)، العنصر النهائي المعروف؛ Θ( n )، عنصر نهائي غير معروف | Θ( n ) | Θ( n ) |
| المصفوفة | Θ(1) | غير متوفر | غير متوفر | غير متوفر | 0 |
| مصفوفة ديناميكية | Θ(1) | Θ( n ) | Θ(1) المستهلكة | Θ( n ) | Θ( n ) [ 9 ] |
| شجرة متوازنة | Θ(log n) | Θ(log n) | Θ(log n ) | Θ(log n ) | Θ( n ) |
| قائمة الوصول العشوائي | Θ(log n) [ 10 ] | Θ(1) | غير متوفر [ 10 ] | غير متوفر [ 10 ] | Θ( n ) |
| شجرة المصفوفة المجزأة | Θ(1) | Θ( n ) | Θ(1) المستهلكة | Θ( n ) | Θ(√ n ) |
تُشبه المصفوفات الديناميكية أو المصفوفات القابلة للتوسيع المصفوفات العادية، لكنها تتميز بإمكانية إدراج وحذف العناصر؛ وتُعدّ عمليات الإضافة والحذف في النهاية فعّالة للغاية. مع ذلك، فهي تحجز مساحة تخزين إضافية خطية ( Θ ( n ))، بينما لا تحجز المصفوفات العادية مساحة تخزين إضافية.
توفر المصفوفات الترابطية آليةً لوظائف شبيهة بالمصفوفات دون الحاجة إلى مساحة تخزين كبيرة عندما تكون قيم الفهرس متفرقة. على سبيل المثال، قد تستفيد مصفوفة تحتوي على قيم عند الفهرسين 1 و2 مليار فقط من استخدام هذا النوع من البنية. تشمل المصفوفات الترابطية المتخصصة ذات المفاتيح العددية أشجار باتريشيا ، ومصفوفات جودي ، وأشجار فان إمدي بواس .
تتطلب الأشجار المتوازنة وقتًا قدره O(log n ) للوصول المفهرس، ولكنها تسمح أيضًا بإدراج أو حذف العناصر في وقت O(log n )، [ 11 ] في حين أن المصفوفات القابلة للنمو تتطلب وقتًا خطيًا (Θ( n )) لإدراج أو حذف العناصر في موضع عشوائي.
تسمح القوائم المتصلة بإزالة العناصر وإدراجها في المنتصف في وقت ثابت، لكنها تستغرق وقتًا خطيًا للوصول إلى العناصر المفهرسة. عادةً ما يكون استهلاكها للذاكرة أسوأ من المصفوفات، ولكنه لا يزال خطيًا.

يُعدّ متجه إيليف بديلاً لبنية المصفوفة متعددة الأبعاد. فهو يستخدم مصفوفة أحادية البعد من المراجع إلى مصفوفات ذات بُعد أقل. بالنسبة للبعدين، على وجه الخصوص، ستكون هذه البنية البديلة عبارة عن متجه من المؤشرات إلى متجهات، مؤشر واحد لكل صف (مؤشر في لغة C أو C++). وبالتالي، يُمكن الوصول إلى عنصر في الصف i والعمود j من المصفوفة A عن طريق الفهرسة المزدوجة ( A [ i ][ j ] في التدوين الشائع). تسمح هذه البنية البديلة بإنشاء مصفوفات غير منتظمة ، حيث قد يكون لكل صف حجم مختلف، أو بشكل عام، حيث يعتمد النطاق الصالح لكل فهرس على قيم جميع الفهارس السابقة. كما أنها توفر عملية ضرب واحدة (بزيادة عنوان العمود) باستبدالها بإزاحة بتية (لفهرسة متجه مؤشرات الصفوف) وعملية وصول إضافية واحدة إلى الذاكرة (لجلب عنوان الصف)، وهو ما قد يكون مفيدًا في بعض البنى.
الأبعاد
بُعد المصفوفة هو عدد الفهارس اللازمة لاختيار عنصر. وبالتالي، إذا نُظر إلى المصفوفة كدالة على مجموعة من تركيبات الفهارس الممكنة، فإن بُعدها هو بُعد الفضاء الذي يُمثل نطاقها مجموعة فرعية منفصلة منه. لذا، فإن المصفوفة أحادية البُعد هي قائمة بيانات، والمصفوفة ثنائية البُعد هي مستطيل بيانات، [ 12 ] والمصفوفة ثلاثية البُعد هي كتلة بيانات، وهكذا.
لا ينبغي الخلط بين هذا وبين بُعد مجموعة جميع المصفوفات ذات مجال مُحدد، أي عدد عناصر المصفوفة. على سبيل المثال، المصفوفة ذات 5 صفوف و4 أعمدة ثنائية الأبعاد، لكن مثل هذه المصفوفات تُشكل فضاءً ذا 20 بُعدًا. وبالمثل، يمكن تمثيل متجه ثلاثي الأبعاد بمصفوفة أحادية البعد ذات ثلاثة عناصر.
انظر أيضاً
مراجع
- ↑ بلاك، بول إي. (13 نوفمبر 2008). "المصفوفة" . قاموس الخوارزميات وهياكل البيانات . المعهد الوطني للمعايير والتكنولوجيا . تم الاسترجاع في 22 أغسطس 2010 .
- 1 2 3 4 5 بيورن أندريس؛ أولريش كويث؛ ثوربن كروجر؛ هامبريشت (2010). "مصفوفات وعروض متعددة الأبعاد مرنة في وقت التشغيل للغة C++98 وC++0x". arXiv : 1008.2909 [ cs.DS ].
- 1 2 3 4 غارسيا، رونالد؛ لومسدين، أندرو (2005). "MultiArray: مكتبة C++ للبرمجة العامة باستخدام المصفوفات". البرمجيات: الممارسة والخبرة . 35 (2): 159-188 . doi : 10.1002/spe.630 . ISSN 0038-0644 . S2CID 10890293 .
- ↑ ديفيد ر. ريتشاردسون (2002)، كتاب هياكل البيانات. دار نشر iUniverse، 1112 صفحة. رقم ISBN 0-595-24039-9، ISBN 978-0-595-24039-5.
- 1 2 فيلدهويزن، تود ل. (ديسمبر 1998). المصفوفات في Blitz++ . الحوسبة في بيئات متوازية كائنية التوجه. سلسلة محاضرات في علوم الحاسوب. المجلد 1505. برلين: سبرينغر. الصفحات 223-230 . doi : 10.1007/3-540-49372-7_24 . ISBN 978-3-540-65387-5.
- ↑ كنوت، دونالد (1998). الفرز والبحث . فن برمجة الحاسوب . المجلد 3. ريدينغ، ماساتشوستس: أديسون-ويسلي بروفيشنال. ص 159.
- ↑ ليفي، هنري م. (1984)، أنظمة الحاسوب القائمة على القدرات ، دار النشر الرقمية، ص 22، رقم ISBN 9780932376220.
- ↑ "أمثلة على أكواد المصفوفات - دوال المصفوفات في PHP - أكواد PHP" . نصائح في برمجة الحاسوب وبرمجة الويب. مؤرشف من الأصل بتاريخ 13 أبريل 2011. تم الاطلاع عليه بتاريخ 8 أبريل 2011. في معظم لغات البرمجة ،
يبدأ ترقيم عناصر المصفوفات من 0، وليس من 1. فهرس العنصر الأول في المصفوفة هو 0، وفهرس العنصر الثاني هو 1، وهكذا. في مصفوفة الأسماء أدناه، يمكنك رؤية الفهارس والقيم.
- ↑ برودنيك، أندريه؛ كارلسون، سفانتي؛ سيدجويك، روبرت ؛ مونرو، جي آي؛ ديمين، إي دي (1999)، المصفوفات القابلة لتغيير الحجم في الوقت والمساحة الأمثلين (تقرير فني CS-99-09) (PDF) ، قسم علوم الحاسوب، جامعة واترلو
- 1 2 3 كريس أوكازاكي (1995). "قوائم الوصول العشوائي الوظيفية البحتة". وقائع المؤتمر الدولي السابع حول لغات البرمجة الوظيفية وهندسة الحاسوب : 86-95 . doi : 10.1145/224164.224187 .
- ↑ "أشجار الفئة ب المعدودة" .
- ↑ "المصفوفات ثنائية الأبعاد \ Processing.org" . processing.org . تم الاطلاع عليه في 1 مايو 2020 .
روابط خارجية
هياكل/مصفوفات البيانات في ويكي الكتب
- المصفوفات
