المصفوفة في بنية البيانات (Opera(الحالات)

⚡ ملخص ذكي

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

  • 📦 التعريف الأساسي: تحتوي المصفوفة على عدة عناصر من نفس النوع في ذاكرة متجاورة، ويتم الوصول إليها عن طريق الفهرس.
  • ⚡ الوصول السريع: يتم استرجاع أي عنصر في وقت ثابت باستخدام فهرسه.
  • 🛠️ خمسة Operaنشوئها: يمكنك إدراج وحذف وبحث وتحديث واستعراض عناصر مجموعة أدوات المصفوفة.
  • 🌐 متعدد اللغات: Python يستخدم وحدة المصفوفة؛ C++ و Java قم بتعريف المصفوفات بشكل أصلي باستخدام منطق يدوي.
  • 🤖 أهمية الذكاء الاصطناعي: تُشكل المصفوفات أساسًا للموترات والمصفوفات التي تدعم حسابات التعلم الآلي.

المصفوفة في بنية البيانات (Opera(الحالات)

ما هو المصفوفة في بنية البيانات؟

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

يتم الوصول إلى كل عنصر من خلال موقعه، ويسمى هذا المرجع بـ مؤشر or منخفض.

مفهوم المصفوفة

مخطط مفهوم المصفوفات

مخطط مفهوم المصفوفات

يوضح الرسم البياني أعلاه ما يلي:

  1. المصفوفة عبارة عن حاوية من العناصر.
  2. للعناصر قيمة ونوع بيانات محددين، مثل "ABC" أو TRUE أو FALSE.
  3. لكل عنصر فهرسه الخاص، والذي يُستخدم للوصول إليه.

ملاحظة:

  • يتم تخزين العناصر في مواقع ذاكرة متجاورة.
  • يكون الفهرس دائمًا أقل من إجمالي عدد عناصر المصفوفة.
  • يمكن لأي متغير مُعلن عنه كمصفوفة أن يخزن قيمًا متعددة.
  • تشترك جميع اللغات تقريبًا في نفس مفهوم المصفوفات ولكنها تختلف في كيفية تعريفها وتهيئتها.
  • ثلاثة أجزاء تبقى مشتركة في جميع عمليات التهيئة: اسم المصفوفة، والعناصر، ونوع بيانات العناصر.

يوضح الرسم التخطيطي التالي صيغة تعريف مصفوفة في Python و C++مما يدل على أن المفهوم يبقى كما هو على الرغم من اختلاف بناء الجملة قليلاً بين اللغات.

فهم بناء جملة المصفوفات

فهم بناء جملة المصفوفات

  • اسم الصفيف: مطلوب لتسهيل الرجوع إلى مجموعة العناصر.
  • نوع البيانات: ضروري للتحقق من نوع البيانات وسلامتها.
  • عناصر: قيم البيانات الموجودة في المصفوفة.

لماذا نحتاج إلى المصفوفات؟

  • تُعد المصفوفات مثالية لتخزين قيم متعددة في متغير واحد.
  • إنها تعالج العديد من القيم بسهولة وسرعة.
  • تُصبح عملية فرز القيم والبحث عنها أسهل باستخدام المصفوفات.

إنشاء مصفوفة في Python

In Pythonتختلف المصفوفات عن القوائم: يمكن للقائمة أن تحتوي على عناصر من أنواع بيانات مختلفة، بينما لا يمكن للمصفوفة أن تحتوي إلا على عناصر من نفس نوع البيانات. Python يحتوي على وحدة منفصلة للتعامل مع المصفوفات، تسمى array، والتي يجب عليك استيرادها قبل استخدامها.

ملاحظة: يجب أن تحتوي المصفوفة على أعداد حقيقية مثل الأعداد الصحيحة والأعداد العشرية؛ لا يُسمح باستخدام السلاسل النصية.

الكود التالي ينشئ مصفوفة أعداد صحيحة في Python لتخزين أرصدة الحسابات:

import array
balance = array.array('i', [300, 200, 100])
print(balance)

طرق للإعلان عن مصفوفة في Python

يمكنك الإعلان عن مصفوفة في Python أثناء تهيئته باستخدام الصيغة التالية:

arrayName = array.array(typecode, [array_items])

بناء جملة المصفوفة في Python

بناء جملة المصفوفة في Python

  1. معرف: حدد اسمًا كما تفعل عادةً مع المتغيرات.
  2. وحدة نمطية: Python يحتوي على وحدة خاصة تسمى "array" يجب عليك استيرادها أولاً.
  3. الطريقة: تحتوي وحدة المصفوفة على طريقة لتهيئة المصفوفة، تأخذ وسيطين - رمز النوع والعناصر.
  4. كود نوع: حدد نوع البيانات باستخدام رموز الأنواع المتاحة (انظر الجدول أدناه).
  5. عناصر: حدد عناصر المصفوفة داخل الأقواس المربعة، على سبيل المثال [130، 450، 103].

يسرد الجدول أدناه رموز الأنواع المتاحة لأنواع البيانات المدعومة.

كود نوع نوع C Python النوع الحد الأدنى للحجم (بايت)
'ب' علامة موقعة مادبا 1
'ب' شار غير موقعة مادبا 1
'u' Py_UNICOD حرف Unicode 2
"ح" وقعت قصيرة مادبا 2
"ح" قصيرة غير موقعة مادبا 2
'أنا' وقعت كثافة العمليات مادبا 2
'أنا' كثافة العمليات غير الموقعة مادبا 2
'l' وقعت طويلة مادبا 4
"L" غير موقعة طويلة مادبا 4
'F' الطفو الطفو 4
'د' مضاعفة الطفو 8

كيفية الوصول إلى قيمة محددة في المصفوفة؟

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

بناء الجملة:

arrayName[indexNum]

على سبيل المثال:

balance[1]

الوصول إلى عنصر صفيف

الوصول إلى عنصر صفيف

هنا، قمنا بالوصول إلى القيمة الثانية للمصفوفة باستخدام الفهرس 1. الناتج هو 200، وهي القيمة الثانية لمصفوفة الرصيد.

import array
balance = array.array('i', [300, 200, 100])
print(balance[1])

الإخراج:

200

مجموعة Operaفي Python

استخدم Python توفر وحدة المصفوفات وظائف منفصلة لإجراء عمليات على المصفوفات. هذه طرق تدميرية، أي أن التعديل يُحفظ في متغير المصفوفة.

إدراج

تُدرج هذه العملية عنصرًا واحدًا أو أكثر في مصفوفة في البداية أو النهاية أو أي فهرس مُحدد. وتتوقع وسيطين: الفهرس والقيمة.

arrayName.insert(index, value)

على سبيل المثال: لإدراج قيمة جديدة مباشرة بعد الفهرس 1 (القيمة 200)، قم بالإشارة إلى الفهرس 2 في طريقة الإدراج.

import array
balance = array.array('i', [300, 200, 100])
balance.insert(2, 150)
print(balance)

الإخراج:

array('i', [300, 200, 150, 100])

حذف

تقوم هذه العملية بحذف عنصر واحد من مصفوفة بالقيمة، وتقبل وسيطًا واحدًا. بعد تنفيذها، يُعاد ترتيب العناصر وتُعاد تعيين الفهارس.

arrayName.remove(value)

على سبيل المثال:

import array
balance = array.array('i', [300, 200, 150, 100])
balance.remove(150)
print(balance)

الإخراج:

array('i', [300, 200, 100])

البحث

تبحث هذه العملية عن عنصر ما باستخدام قيمته، ثم تُعيد فهرسه. وهي طريقة غير مُتلفة، لذا فهي لا تُغير قيم المصفوفة.

arrayName.index(value)

على سبيل المثال:

import array
balance = array.array('i', [300, 200, 150, 100])
print(balance.index(150))

الإخراج:

2

تحديث

يؤدي التحديث إلى استبدال القيمة الحالية عند فهرس معين باستخدام عامل إسناد بسيط.Python لا تحتوي المصفوفات على update() طريقة.)

arrayName[index] = value

على سبيل المثال: لاستبدال الرقم 150 (في الفهرس 2) بالرقم 145:

import array
balance = array.array('i', [300, 200, 150, 100])
balance[2] = 145
print(balance)

الإخراج:

array('i', [300, 200, 145, 100])

ترافيرس

يمكنك عبور Python المصفوفة باستخدام حلقة تكرارية:

import array
balance = array.array('i', [300, 200, 100])
for x in balance:
    print(x)

الإخراج:

300
200
100

إنشاء مصفوفة في C++

C++ أكثر مرونة من Python عند إنشاء المصفوفات، يمكنك إنشاء C++ المصفوفات بثلاث طرق. يقوم الكود التالي بإنشاء مصفوفة أعداد صحيحة في C++ لتخزين أرصدة الحسابات:

#include <iostream>
using namespace std;

int main()
{
  int balance[3] = { 300, 200, 100 };
  for (int i = 0; i < 3; i++)
    {
      cout << "value of i: " << balance[i] << endl;
    }
  return 0;
}

طرق للإعلان عن مصفوفة في C++

يمكنك تعريف مصفوفة بثلاث طرق، حسب متطلبات برنامجك.

بيان حسب المقاس:

dataType arrayName[arraySize];   // e.g. int balance[3];

إعلان يحتوي على عناصر مصفوفة فقط:

dataType arrayName[] = {array_items};   // e.g. int balance[] = { 300, 200, 100 };

بيان حسب المقاسات والمنتجات:

dataType arrayName[arraySize] = {array_items};   // e.g. int balance[3] = { 300, 200, 100 };

كيفية الوصول إلى قيمة محددة في مصفوفة C++?

الوصول إلى عنصر المصفوفة

الوصول إلى عنصر المصفوفة

#include <iostream>
using namespace std;

int main()
{
  int balance[3] = { 300, 200, 100 };
  cout << balance[1];
  return 0;
}

الإخراج:

200

مجموعة Operaفي C++

الغاء الاعجاب Python، في C++ يجب عليك برمجة المنطق بنفسك لعمليات الإدراج والحذف والبحث والتحديث والتنقل.

إدراج

تتلخص آلية الإضافة في: المرور على عناصر المصفوفة، ونقلها إلى فهرس أكبر، ثم إضافة عنصر جديد في الفهرس المحدد. يحتوي المثال أدناه على خمسة عناصر، ويُضيف القيمة 150 مباشرةً بعد القيمة 200.

#include <iostream>
#include <stdio.h>

main() {
   int pos = 2;
   int size = 4;
   int balance[] = {300, 200, 100, 50, 0};

   printf("BEFORE INSERT:\n");
   for(int i = 0; i < 5; i++) {
      printf("%d\n", balance[i]);
   }

   /* SHIFT ITEMS TO A GREATER INDEX */
   for(int i = size; i >= pos; i--) {
       balance[i+1] = balance[i];
   }

   /* INSERT VALUE AT THE DESIRED INDEX */
   balance[pos] = 150;

   printf("AFTER INSERT:\n");
   for(int i = 0; i < 6; i++) {
      printf("%d\n", balance[i]);
   }
}

مجموعة Operaفي Java

لنقم بإنشاء برنامج في Java التي تقبل حجم وقيم عناصر المصفوفة من المستخدم.

import java.util.Scanner;

public class AddElements {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("Enter the size of the array");
        int n = sc.nextInt();

        int arr[] = new int[n];

        System.out.println("Enter Elements in the array");
        for(int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        System.out.println("Elements in the array");
        for(int j = 0; j < n; j++) {
            System.out.print(arr[j] + " ");
        }
    }
}

تعديل عنصر في Java مجموعة

قم بتحديث عنصر باستخدام فهرسه.

import java.util.Scanner;

public class ModifyElement {
    public static void main(String[] args) {
        int arr[] = {1, 2, 3, 4, 5};
        int length = arr.length;
        Scanner sc = new Scanner(System.in);

        System.out.println("Array Elements Before modify");
        for(int i = 0; i < length; i++) {
            System.out.print(arr[i] + " ");
        }

        System.out.println("\nEnter the position to change");
        int pos = sc.nextInt();
        System.out.println("Enter the value");
        int val = sc.nextInt();

        arr[pos] = val;

        System.out.println("Array Elements After modify");
        for(int j = 0; j < length; j++) {
            System.out.print(arr[j] + " ");
        }
    }
}

عناصر الوصول في Java مجموعة

اطبع جميع عناصر المصفوفة عن طريق المرور على عناصرها.

public class AccessElements {
    public static void main(String[] args) {
        int arr[] = {1, 2, 3, 4, 5};
        int length = arr.length;

        System.out.println("Array Elements are:-");
        for(int i = 0; i < length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

الأسئلة الشائعة

المصفوفة هي مجموعة من العناصر من نفس نوع البيانات المخزنة في مواقع ذاكرة متجاورة. يتم الوصول إلى كل عنصر بواسطة فهرس، مما يجعل المصفوفات فعالة في تخزين واسترجاع قيم متعددة ذات صلة.

A Python يمكن للقائمة أن تحتوي على عناصر من أنواع بيانات مختلفة، بينما تحتوي المصفوفة (من وحدة المصفوفات) على عناصر من نوع بيانات واحد. وتُعد المصفوفات أكثر كفاءة في استخدام الذاكرة لمجموعات البيانات الرقمية الكبيرة.

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

يستغرق الوصول إلى عنصر باستخدام الفهرس وقتًا ثابتًا (O(1))، لأن عنوان الذاكرة يُحسب مباشرةً من العنوان الأساسي والفهرس. أما الإضافة والحذف فيمكن أن يستغرقا وقتًا ثابتًا (O(n)) بسبب الإزاحة.

يُمكّن التخزين المتجاور البرنامج من حساب عنوان أي عنصر فورًا انطلاقًا من العنوان الأساسي مضافًا إليه فهرس العنصر مضروبًا في حجمه. وهذا ما يمنح المصفوفات سرعة الوصول العشوائي الثابتة.

Python يحتاج إلى وحدة المصفوفة ويوفر طرق تشغيل مدمجة. C++ و Java تتيح لك هذه الخاصية تعريف المصفوفات بشكل أصلي، ولكنها تتطلب منك كتابة منطق الإدراج والحذف والبحث بنفسك. Java كما توفر المصفوفات خاصية الطول.

تُعد المصفوفات أساس المتجهات والمصفوفات والموترات المستخدمة في الذكاء الاصطناعي. تقوم مكتبات مثل NumPy وTensorFlow بتخزين بيانات التدريب وأوزان النموذج كمصفوفات متعددة الأبعاد لإجراء حسابات عددية سريعة.

نعم. تكتشف برامج الذكاء الاصطناعي المساعدة في البرمجة أخطاء الفهرسة الناتجة عن تجاوز الفهرس بمقدار واحد أو تجاوزه لحدود المصفوفة، وتقترح حلولاً، وتشرح سبب تجاوز الفهرس لطول المصفوفة، وتساعد في حل المشكلات.ping يستطيع المبتدئون حل أخطاء المصفوفات الشائعة بسرعة.

تلخيص هذه التدوينة بـ: