الانتقال إلى المحتوى

مجموعات البيانات

AP علوم الحاسوب A · الموضوع 4

درس فيديو لهذا الموضوع افتح صفحة الفيديو
13:32

مجموعات البيانات

خذ صورة واحدة بهاتفك. بالنسبة للحاسوب ليست صورة على الإطلاق — بل هي شبكة من الأرقام، رقم لكل بكسل، حوالي اثني عشر مليوناً منها. الآن حاول…

سرد باللغة الإنجليزية · ترجمة مدمجة بالإنجليزية + الصينية

4.1

أخلاقيات جمع البيانات

المنهج

الهدف التعليمي 4.1.A: شرح المخاطر على الخصوصية من جمع وتخزين البيانات الشخصية على الأنظمة الحاسوبية.

  • 4.1.A.1 عند استخدام جهاز حاسوبي، تكون الخصوصية الشخصية في خطر. عند تطوير برامج جديدة، يجب أن يحاول المبرمجون حماية الخصوصية الشخصية للمستخدم.

الهدف التعليمي 4.1.B: شرح أهمية التعرف على جودة البيانات والمشكلات المحتملة عند استخدام مجموعة بيانات.

  • 4.1.B.1 التحيز الخوارزمي يصف أخطاء منهجية ومتكررة في برنامج تنشئ نتائج غير عادلة لمجموعة معينة من المستخدمين.
  • 4.1.B.2 يجب أن يكون المبرمجون مدركين لطريقة جمع مجموعة البيانات والإمكانية الموجودة للتحيز عند استخدام هذه الطريقة قبل استخدام البيانات لاستخلاص معلومات جديدة أو استنتاج الاستنتاجات.
  • 4.1.B.3 بعض مجموعات البيانات غير مكتملة أو تحتوي على بيانات غير دقيقة. استخدام مثل هذه البيانات في تطوير أو استخدام برنامج قد يسبب عمل البرنامج بشكل خاطئ أو غير فعال.

الهدف التعليمي 4.1.C: تحديد مجموعة بيانات مناسبة للاستخدام لحل مشكلة أو الإجابة على سؤال محدد.

  • 4.1.C.1 قد تكون محتويات مجموعة البيانات ذات صلة بسؤال أو موضوع معين وقد لا تكون مناسبة لتقديم إجابات صحيحة أو استخلاص المعلومات لسؤال أو موضوع مختلف.

المصدر: وصف دورة وامتحان College Board AP

أرفف خوادم في مركز بيانات — مجموعات البيانات الكبيرة تثير أسئلة أخلاقية حول الجمع والاستخدام
أرفف خوادم في مركز بيانات — مجموعات البيانات الكبيرة تثير أسئلة أخلاقية حول الجمع والاستخدام

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

4.2

لماذا نحتاج هياكل البيانات

المنهج

هدف التعلم 4.2.A: تمثيل الأنماط والخوارزميات التي تتضمن مجموعات البيانات الموجودة في الحياة اليومية باستخدام اللغة المكتوبة أو المخططات.

  • 4.2.A.1 مجموعة البيانات هي مجموعة من قطع المعلومات أو البيانات المحددة.
  • 4.2.A.2 يمكن معالجة مجموعات البيانات وتحليلها لحل مشكلة أو الإجابة على سؤال. عند تحليل مجموعات البيانات، يتم الوصول إلى القيم داخل المجموعة واستخدامها واحدة تلو الأخرى ثم معالجتها وفقاً للنتيجة المرغوبة.
  • 4.2.A.3 يمكن تمثيل البيانات في مخطط باستخدام جدول أو رسم بياني. يمكن استخدام هذا الرسم التخطيطي لتخطيط الخوارزمية التي سيتم استخدامها لمعالجة البيانات.

المصدر: وصف دورة وامتحان College Board AP

خزانة ملفات: المجموعات تخزن قيماً عديدة تحت اسم واحد حتى تتمكن الخوارزميات من معالجتها
خزانة ملفات: المجموعات تخزن قيماً عديدة تحت اسم واحد حتى تتمكن الخوارزميات من معالجتها

المتغير الواحد يحمل قيمة واحدة؛ لكن المشاكل الحقيقية تحتاج لتخزين العديد من القيم المرتبطة — قائمة الطلاب، البكسلات، قراءات المستشعرات. الهيكل البياني للبيانات ينظم المجموعة لنتمكن من تخزين العناصر وإيجادها ومعالجتها بكفاءة. يستخدم منهج AP ثلاثة أنواع: المصفوفة، وArrayList، ومصفوفة 2D.

مفردات تدريب
English العربية
array/əˈreɪ/ المصفوفة (array)
Traverse/trəˈvɜːs/ المرور عبر
autoboxing/ˌɔːtəʊˈbɒksɪŋ/ التغليف التلقائي
ArrayList/əˈreɪ lɪst/ ArrayList
2D array/ˌtuː ˈdiː əˈreɪ/ مصفوفة 2D
row-major order/rəʊ ˈmeɪdʒə ˈɔːdə/ ترتيب الصفوف أولاً
4.3

إنشاء وقراءة مصفوفة

المنهج

هدف التعلم 4.3.A: تطوير الكود المستخدم لتمثيل مجموعات البيانات ذات الصلة باستخدام كائنات المصفوفات أحادية البعد (1D).

  • 4.3.A.1 المصفوفة تخزن عدة قيم من نفس النوع. يمكن أن تكون هذه القيم إما قيم أولية أو مرجعات لكائنات.
  • 4.3.A.2 يتم تحديد طول المصفوفة وقت الإنشاء ولا يمكن تغييره. يمكن الوصول إلى طول المصفوفة من خلال السمة length.
  • 4.3.A.3 عند إنشاء مصفوفة باستخدام الكلمة المفتاحية new، يتم تهيئة جميع عناصرها إلى القيم الافتراضية لنوع بيانات العنصر. القيمة الافتراضية لـ int هي 0، ولـ double هي 0.0، ولـ boolean هي false، ولنوع المرجع هي null.
  • 4.3.A.4 يمكن استخدام قوائم المبدئات لإنشاء المصفوفات وتهيئتها.
  • 4.3.A.5 تُستخدم الأقواس المربعة [ ] للوصول إلى عنصر في مصفوفة 1D وتعديله باستخدام مؤشر.
  • 4.3.A.6 قيم الفهارس الصالحة للمصفوفة تتراوح بين 0 وما قبل الطول مباشرة، شاملاً الطرفين. استخدام قيمة فهرس خارج هذا النطاق سيؤدي إلى حدوث ArrayIndexOutOfBoundsException.

المصدر: وصف دورة وامتحان College Board AP

المصفوفة هي مجموعة ثابتة الحجم مرتبة من قيم من نفس النوع. الفهارس تمتد من 0 إلى length - 1:

مصفوفة أحادية البعد (قائمة) بفهارسها وحدودها
مصفوفة أحادية البعد (قائمة) بفهارسها وحدودها
int[] nums = new int[5];        // five zeros
int[] vals = {3, 1, 4, 1, 5};   // initialized
int first = vals[0];            // 3
int n = vals.length;            // 5 (a field, not a method)

الوصول إلى فهرس خارج 0..length-1 يُطلق خطأ ArrayIndexOutOfBoundsException.

4.4

زيارة كل عنصر في مصفوفة

المنهج

هدف التعلم 4.4.A: تطوير كود يُستخدم لتجول العناصر في مصفوفة 1D وتحديد نتائج هذا التجول.

  • 4.4.A.1 تجول المصفوفة هو عندما يتم استخدام عبارات التكرار للوصول إلى جميع أو تسلسل مرتب من العناصر في مصفوفة.
  • 4.4.A.2 يتطلب تجول المصفوفة باستخدام حلقة for ذات فهرس أو حلقة while الوصول إلى العناصر باستخدام فهارسها.
  • 4.4.A.3 يتضمن ترويسة حلقة for المحسنة متغيراً، يُشار إليه باسم متغير حلقة for المحسنة. لكل تكرار من حلقة for المحسنة، يتم تعيين متغير حلقة for المحسنة نسخة من عنصر دون استخدام فهرسه.
  • 4.4.A.4 لا يؤدي تعيين قيمة جديدة لمتغير حلقة for المحسنة إلى تغيير القيمة المخزنة في المصفوفة.
  • 4.4.A.5 عندما تخزن المصفوفة مرجعات للكائنات، يمكن تعديل الخصائص عن طريق استدعاء دوال على متغير حلقة for المحسنة. لا يغير هذا مرجعات الكائنات المخزنة في المصفوفة.
  • 4.4.A.6 يمكن إعادة كتابة الكود المكتوب باستخدام حلقة for محسنة لتجول العناصر في مصفوفة باستخدام حلقة for ذات فهرس أو حلقة while.

المصدر: وصف دورة وامتحان College Board AP

مرر بمصفوفة باستخدام حلقة for (تعطي الفهرس) أو حلقة enhanced for / for-each (تعطي كل قيمة، قراءة فقط):

for (int i = 0; i < a.length; i++) { a[i] *= 2; }   // can modify
for (int v : a) { System.out.println(v); }          // read each value
4.5

خوارزميات المصفوفة القياسية

المنهج

هدف التعلم 4.5.A: تطوير كود لخوارزميات قياسية وأصلية لموقف أو مواصفة معينة تتضمن مصفوفات وتحديد نتيجة هذه الخوارزميات.

  • 4.5.A.1 توجد خوارزميات قياسية تستخدم تجوال المصفوفات لـ:
    • تحديد قيمة حد أدنى أو حد أعلى
    • حساب مجموع أو متوسط
    • تحديد ما إذا كان عنصر واحد على الأقل يمتلك خاصية معينة
    • تحديد ما إذا كانت جميع العناصر possesses خاصية معينة
    • تحديد عدد العناصر possessing خاصية معينة
    • الوصول إلى جميع الأزواج المتتالية من العناصر
    • تحديد وجود أو غياب عناصر مكررة
    • تحريك أو تدوير العناصر يسارًا أو يمينًا
    • عكس ترتيب العناصر

المصدر: وصف دورة وامتحان College Board AP

أتقن هذه الأنماط: حساب مجموع أو متوسط، إيجاد الأعلى/الأدنى، عدّ عناصر تحقق شرطاً، التحقق من وجود تكرار، وعكس أو إزاحة العناصر. كل منها هو مرور مع نتيجة متراكمة:

int sum = 0;
for (int v : a) sum += v;
double avg = (double) sum / a.length;
4.6

قراءة البيانات من ملف نصي

المنهج

هدف التعلم 4.6.A: تطوير كود لقراءة البيانات من ملف نصي.

  • 4.6.A.1 الملف هو مساحة تخزين للبيانات تستمر عند عدم تشغيل البرنامج. يمكن استرجاع البيانات الموجودة في الملف أثناء تنفيذ البرنامج.
  • 4.6.A.2 يمكن ربط الملف بالبرنامج باستخدام كلاسي File وكلاسي Scanner.
  • 4.6.A.3 يمكن فتح الملف بإنشاء كائن File، باستخدام اسم الملف作为 الحجة للمنشئ (constructor).
    • File(String str) هو المنشئ File الذي يقبل اسم ملف String لفتحه للقراءة، حيث str هو المسار الكامل للملف.
  • 4.6.A.4 عند استخدام كلاسي File، يجب تحديد ما يجب فعله إذا لم يتمكن الملف ذو الاسم المعطى من الفتح. إحدى الطرق لتحقيق ذلك هي إضافة throws IOException إلى ترويسة الدالة التي تستخدم الملف. إذا كان اسم الملف غير صالح، سينتهي البرنامج.
  • 4.6.A.5 كلاسي File وكلاسي IOException هما جزء من حزمة java.io. يجب استخدام جملة import لجعل هذين الكلاسين متاحين للاستخدام في البرنامج.
  • 4.6.A.6 الدوال والمنشئات التالية من Scanner - بما فيها وظيفتها ومتى تُستخدم - جزء من مرجع جافا السريع:
    • Scanner(File f) هو المنشئ Scanner الذي يقبل مصدر إدخال File للقراءة.
    • int nextInt() يعيد الـ int التالي المقروء من الملف أو مصدر الإدخال إذا كان متاحاً. إذا لم يكن الـ int التالي موجوداً أو كان خارج نطاق، فسيؤدي ذلك إلى حدوث InputMismatchException.
    • double nextDouble() يعيد الـ double التالي المقروء من الملف أو مصدر الإدخال. إذا لم يكن الـ double التالي موجوداً، فسيؤدي ذلك إلى حدوث InputMismatchException.
    • boolean nextBoolean() يعيد الـ boolean التالي المقروء من الملف أو مصدر الإدخال. إذا لم يكن الـ boolean التالي موجوداً، فسيؤدي ذلك إلى حدوث InputMismatchException.
    • String nextLine() يعيد السطر التالي كنص على شكل String مقروء من الملف أو مصدر الإدخال؛ يمكن أن يعيد السلسلة الفارغة إذا تم استدعاؤها مباشرة بعد دالة Scanner أخرى تقرأ من الملف أو مصدر الإدخال.
    • String next() يعيد الـ String التالي المقروء من الملف أو مصدر الإدخال.
    • boolean hasNext() يعيد true إذا كان هناك عنصر آخر للقراءة في الملف أو مصدر الإدخال؛ تعيد false بخلاف ذلك.
    • void close() يغلق هذا القارئ (scanner).
    • جملة الاستبعاد: استقبال المدخلات من لوحة المفاتيح خارج نطاق منهج وامتحان علوم الحاسوب AP A.
  • 4.6.A.7 استخدام nextLine والدوال الأخرى من Scanner معاً على نفس مصدر الإدخال يتطلب أحياناً كوداً للتكيف مع الطرق المختلفة التي تتعامل بها هذه الدوال مع المسافات البيضاء.
    • جملة الاستبعاد: كتابة أو تحليل كود يستخدم كل من nextLine ودوال Scanner الأخرى على نفس مصدر الإدخال خارج نطاق منهج وامتحان علوم الحاسوب AP A.
  • 4.6.A.8 الدالة الإضافية التالية من String - بما فيها وظيفتها ومتى تُستخدم - جزء من مرجع جافا السريع:
    • String[] split(String del) يعيد مصفوفة String يكون كل عنصر فيها قطعة فرعية (substring) من this String، والتي تم تقسيمها حول تطابقات التعبير المعطى del.
    • جملة الاستبعاد: المعامل del يستخدم تنسيقاً يسمى تعبيراً نظامياً (regular expression). كتابة أو تحليل كود يستخدم أياً من الخصائص الخاصة للتعبيرات النظامية (مثل \\*، \\.) خارج نطاق منهج وامتحان علوم الحاسوب AP A.
  • 4.6.A.9 يمكن استخدام حلقة while للكشف عما إذا كان الملف لا يزال يحتوي على عناصر للقراءة عن طريق استخدام الدالة hasNext كشرط للحلقة.
  • 4.6.A.10 يجب إغلاق الملف عندما ينتهي البرنامج من استخدامه. يتم استدعاء الدالة close من Scanner لإغلاق الملف.

المصدر: وصف دورة وامتحان College Board AP

File وIOException يعيشان داخل java.io، لذا فإن برنامجاً يقرأ ملفاً يحتاج import java.io.*;. فتح ملف قد يفشل (قد لا يوجد)، وجافا تجبرك على التعامل مع ذلك – أبسط طريقة هي إضافة throws IOException إلى ترويسة الطريقة. ثم يقرأ Scanner الملف سطرًا بسطر، مستخدماً hasNext... للاختبار قبل القراءة:

import java.io.*;
...
public static void readFile() throws IOException {
    Scanner f = new Scanner(new File("data.txt"));
    while (f.hasNextLine()) {
        String line = f.nextLine();
    }
}

قراءة رموز من نوع محدد باستخدام nextInt()، nextDouble()، أو nextBoolean() يُطلق خطأ InputMismatchException إذا كان الرمز التالي من النوع الخاطئ – على سبيل المثال استدعاء nextInt() عندما يكون الشيء التالي في الملف هو كلمة cat.

4.7

تغليف رقم في كائن

المنهج

هدف التعلم 4.7.A: تطوير كود لاستخدام كائنات Integer وكائنات Double من نظيراتها الأولية (primitive counterparts) وتحديد نتيجة استخدام هذه الكائنات.

  • 4.7.A.1 كلاسي Integer وكلاسي Double هما جزء من حزمة java.lang. كائن Integer غير متغير (immutable)، مما يعني أنه بمجرد إنشاء كائن Integer، لا يمكن تغيير خصائصه. كائن Double غير متغير، مما يعني أنه بمجرد إنشاء كائن Double، لا يمكن تغيير خصائصه.
  • 4.7.A.2 التعبئة التلقائية (Autoboxing) هي التحويل التلقائي الذي يقوم به مترجم جافا بين الأنواع الأولية وفئات التغليف (wrapper classes) المقابلة لها. يشمل ذلك تحويل int إلى Integer وتحويل double إلى Double. يطبق مترجم جافا التعبئة التلقائية عندما تكون القيمة الأولية:
    • مُمررة كمعامل لدالة تتوقع كائناً من فئة التغليف المقابلة
    • مخصصة لمتغير من فئة التغليف المقابلة
  • 4.7.A.3 الفك التلقائي (Unboxing) هو التحويل التلقائي الذي يقوم به مترجم جافا من فئة التغليف إلى النوع الأولي. يشمل ذلك تحويل Integer إلى int وتحويل Double إلى double. يطبق مترجم جافا الفك التلقائي عندما يكون كائن فئة التغليف:
    • مُمرر كمعامل لدالة تتوقع قيمة من النوع الأولي المقابل
    • مخصص لمتغير من النوع الأولي المقابل
  • 4.7.A.4 الدالة التالية من الفئة Integer - بما فيها وظيفتها ومتى تُستخدم - جزء من مرجع جافا السريع:
    • static int parseInt(String s) تعيد الحجة String على شكل int.
  • 4.7.A.5 الدالة التالية من الفئة Double - بما فيها وظيفتها ومتى تُستخدم - جزء من مرجع جافا السريع:
    • static double parseDouble(String s) تعيد الحجة String على شكل double.

المصدر: وصف دورة وامتحان College Board AP

ArrayList يخزن كائنات، وليس بدائيات، لذا يتم تغليف البدائي في كائن: Integer يغلف int، Double يغلف double. تفعل Java ذلك بـ التغليف التلقائي (int إلى Integer) والتفكيك التلقائي (العودة مرة أخرى) تلقائياً، بحيث يمكنك كتابة list.add(5) وint x = list.get(0).

4.8

أدوات Toolbox ArrayList

المنهج

هدف التعلم 4.8.A: تطوير كود لمجموعات من الكائنات ذات الصلة باستخدام كائنات ArrayList وتحديد نتيجة استدعاء الدوال على هذه الكائنات.

  • 4.8.A.1 ArrayList كائن قابل للتغيير في الحجم ويحتوي على مرجعات لأشياء.
  • 4.8.A.2 مُنشئ ArrayList ArrayList() يُنشئ قائمة فارغة.
  • 4.8.A.3 يسمح Java بنوع عام ArrayList<E>، حيث يحدد المعامل النوعي E نوع العناصر. عند تحديد ArrayList<E>، تكون أنواع معلمات المرجع ونوع الإرجاع عند استخدام ArrayList دوال هي نوع E. يُفضل ArrayList<E> على ArrayList. على سبيل المثال، ArrayList<String> names = new ArrayList<String>(); يسمح للمترجم باكتشاف الأخطاء التي قد تُكتشف عادةً وقت التشغيل.
  • 4.8.A.4 فئة ArrayList جزء من حزمة java.util. يجب استخدام جملة import لجعل هذه الفئة متاحة للاستخدام في البرنامج.
  • 4.8.A.5 الدوال ArrayList التالية - بما في ذلك ما تقوم به ومتى يتم استخدامها - جزء من مرجع Java السريع:
    • int size() يُرجع عدد العناصر في القائمة.
    • boolean add(E obj) يضيف ⟨⟩ obj إلى نهاية القائمة؛ يُرجع true.
    • void add(int index, E obj) يُدرج ⟨⟩ obj عند الموقع index (0 <= index <= size)، مُزيحًا العناصر الموجودة في الموقع index وما فوقه إلى اليمين (يضيف 1 إلى مؤشراتها) ويضيف 1 إلى الحجم.
    • E get(int index) يرجع العنصر الموجود عند الموضع index في القائمة.
    • E set(int index, E obj) يستبدل العنصر الموجود عند الموضع index بـ obj؛ يرجع العنصر الذي كان موجودًا سابقًا عند الموضع index.
    • E remove(int index) يزيل العنصر من الموقع index، مُزيحًا العناصر الموجودة في الموقع index + 1 وما فوقه إلى اليسار (يطرح 1 من مؤشراتها) ويطرح 1 من الحجم؛ يُرجع العنصر الذي كان سابقًا في الموقع index.
  • 4.8.A.6 تبدأ الفهارس لمصفوفة ArrayList من 0 وتنتهي عند عدد العناصر - 1.

المصدر: وصف دورة وامتحان College Board AP

ما هو(ArrayList حقاً

ArrayList ينمو وينكمش عند إضافة أو إزالة عناصر. أعلنه مع نوع العنصر في <>:

ArrayList<String> names = new ArrayList<String>();
names.add("Amy");           // append
names.add(0, "Bob");        // insert at index
names.get(0);               // read
names.set(1, "Cara");       // replace
names.remove(0);            // delete, shifts the rest left
names.size();               // count (a method, unlike array.length)
4.9

زيارة كل عنصر في ArrayList

المنهج

هدف التعلم 4.9.A: تطوير أكواد تُستخدم لتجول عناصر ArrayList وتحديد نتائج هذه التجولات.

  • 4.9.A.1 تجول ArrayList هو عندما تُستخدم عبارات التكرار أو العودية للوصول إلى جميع العناصر أو تسلسل مرتب منها في ArrayList.
  • 4.9.A.2 حذف العناصر أثناء تجول ArrayList يتطلب استخدام تقنيات خاصة لتجنب تخطي العناصر.
  • 4.9.A.3 محاولة الوصول إلى قيمة فهرس خارج نطاقها ستؤدي إلى IndexOutOfBoundsException.
  • 4.9.A.4 تغيير حجم مصفوفة ArrayList أثناء مرورها باستخدام حلقة for محسّنة قد يؤدي إلى ConcurrentModificationException. لذلك، عند استخدام حلقة for محسّنة للمرور على مصفوفة ArrayList، لا يجب إضافة أو إزالة عناصر.

المصدر: وصف دورة وامتحان College Board AP

مرر باستخدام حلقة فهارس أو حلقة for-each، تماماً مثل المصفوفات (استخدم size() وget(i)):

for (int i = 0; i < list.size(); i++) { ... list.get(i) ... }
for (String s : list) { ... }

مهارة الامتحان: عند إزالة عناصر في حلقة فهارس، إما مرر عكسياً أو لا تزداد i بعد الإزالة – وإلا فإن الإزالة تُزيح العناصر لليسار وتخطئك واحداً. ولا تضيف أو تزيل عناصر أبداً أثناء المرور في ArrayList باستخدام حلقة for-each: تغيير حجمه خلال الحلقة يُطلق خطأ ConcurrentModificationException، لذا استخدم حلقة فهارس (عكسياً، كما أعلاه) كلما لزم الأمر الإزالة.

4.10

خوارزميات ArrayList القياسية

المنهج

الهدف التعليمي 4.10.A: تطوير كود لخوارزميات قياسية وأصلية لسياق أو مواصفات معينة تتضمن كائنات ArrayList وتحديد نتيجة هذه الخوارزميات.

  • 4.10.A.1 هناك خوارزميات ArrayList قياسية تستخدم التنقلات لـ:
    • تحديد قيمة حد أدنى أو حد أعلى
    • حساب مجموع أو متوسط
    • تحديد ما إذا كان عنصر واحد على الأقل يمتلك خاصية معينة
    • تحديد ما إذا كانت جميع العناصر possesses خاصية معينة
    • تحديد عدد العناصر possessing خاصية معينة
    • الوصول إلى جميع الأزواج المتتالية من العناصر
    • تحديد وجود أو غياب عناصر مكررة
    • تحريك أو تدوير العناصر يسارًا أو يمينًا
    • عكس ترتيب العناصر
    • إدراج عناصر
    • حذف عناصر
  • 4.10.A.2 تتطلب بعض الخوارزميات تنقلًا متزامنًا لعدة String، مصفوفة، أو ArrayList كائنات.

المصدر: وصف دورة وامتحان College Board AP

نفس خوارزميات المصفوفات – الأعلى/الأدنى، عدّ، مجموع – بالإضافة إلى الإدراج والحذف التي لا تستطيع المصفوفات القيام بها بسهولة. مهمة شائعة هي إزالة جميع العناصر التي تطابق شرطاً، مع التعامل بحذر مع إزاحة الفهارس.

4.11

الشبكات: المصفوفات ثنائية الأبعاد

المنهج
Learning ObjectiveEssential Knowledge

4.11.A
Develop code used to represent collections of related data using two-dimensional (2D) array objects.

  • 4.11.A.1 A 2D array is stored as an array of arrays. Therefore, the way 2D arrays are created and indexed is similar to 1D array objects. The size of a 2D array is established at the time of creation and cannot be changed. 2D arrays can store either primitive data or object reference data.
    • Exclusion statement: Nonrectangular 2D array objects are outside the scope of the AP Computer Science A course and exam.
  • 4.11.A.2 When a 2D array is created using the keyword new, all of its elements are initialized to the default values for the element data type. The default value for int is 0, for double is 0.0, for boolean is false, and for a reference type is null.
  • 4.11.A.3 The initializer list used to create and initialize a 2D array consists of initializer lists that represent 1D arrays; for example, int[][] arr2D = { {1, 2, 3}, {4, 5, 6} };.
  • 4.11.A.4 The square brackets [row][col] are used to access and modify an element in a 2D array. For the purposes of the exam, when accessing the element at arr[first][second], the first index is used for rows, the second index is used for columns.
  • 4.11.A.5 A single array that is a row of a 2D array can be accessed using the 2D array name and a single set of square brackets containing the row index.
  • 4.11.A.6 The number of rows contained in a 2D array can be accessed through the length attribute. The valid row index values for a 2D array are 0 through one less than the number of rows or the length of the array, inclusive. The number of columns contained in a 2D array can be accessed through the length attribute of one of the rows. The valid column index values for a 2D array are 0 through one less than the number of columns or the length of any given row of the array, inclusive. For example, given a 2D array named values, the number of rows is values.length and the number of columns is values[0].length. Using an index value outside of these ranges will result in an ArrayIndexOutOfBoundsException.

المصدر: وصف دورة وامتحان College Board AP

مصفوفة ثنائية الأبعاد 2D هي شبكة (صفوف وأعمدة) – مصفوفة من المصفوفات:

مصفوفة ثنائية الأبعاد (جدول) بفهارس الصفوف والأعمدة
مصفوفة ثنائية الأبعاد (جدول) بفهارس الصفوف والأعمدة
int[][] grid = new int[3][4];   // 3 rows, 4 columns
grid[r][c] = 7;                 // row r, column c
int rows = grid.length;         // 3
int cols = grid[0].length;      // 4
استكشف

فهرسة مصفوفة 2D بالصف والعمود

المصفوفة 2D هي شبكة تُستند إلى [row][col]. حوِّع الفهارس وراقب الخلية التي يختارونها — الصف أولاً، ثم العمود، وكلاهما يبدأ العد من 0.

4.12

المرور عبر الشبكة

المنهج

هدف التعلم 4.12.A: تطوير كود يُستخدم لتجول العناصر في مصفوفة 2D وتحديد نتائج هذا التجول.

  • 4.12.A.1 تُستخدم جمل التكرار المتداخلة لتجول والوصول إلى جميع العناصر أو تسلسل مرتب من عناصر مصفوفة 2D. نظرًا لأن المصفوفات 2D تُخزن كمصفوفات من المصفوفات، فإن طريقة تجول المصفوفات 2D باستخدام حلقات for وحلقات for المعززة مشابهة لأشياء المصفوفات 1D. يمكن كتابة جمل تكرار متداخلة لتجول المصفوفة 2D بترتيب يعتمد على الصفوف (row-major) أو ترتيب يعتمد على الأعمدة (column-major)، أو بترتيب محدد فريدًا. يشير ترتيب الصفوف إلى ترتيب عناصر المصفوفة 2D حيث يتم التجول عبر كل صف، بينما يحدث تجول ترتيب الأعمدة لأسفل كل عمود.
  • 4.12.A.2 الحلقة الخارجية لحلقة متداخلة معززة for تستخدم لتجول مصفوفة 2D تجول الصفوف. لذلك، يجب أن تكون متغير الحلقة المعززة for هو نوع كل صف، وهو مصفوفة 1D. الحلقة الداخلية تجول صفًا واحدًا. لذلك، يجب أن يكون متغير الحلقة المعززة for الداخلية هو نفس نوع العناصر المخزنة في المصفوفة 1D. تعيين قيمة جديدة لمتغير الحلقة المعززة for لا يغير القيمة المخزنة في المصفوفة.

المصدر: وصف دورة وامتحان College Board AP

تجول مصفوفة ثنائية الأبعاد 2

زيارة كل خلية باستخدام حلقات متداخلة – الخارجية للصفوف، الداخلية للأعمدة (ترتيب الصف الرئيسي):

for (int r = 0; r < grid.length; r++)
    for (int c = 0; c < grid[0].length; c++)
        System.out.print(grid[r][c]);
4.13

خوارزميات المصفوفة القياسية 2D

المنهج

هدف التعلم 4.13.A: تطوير كود لخوارزميات قياسية وأصلية سياقية معينة أو مواصفة تتضمن مصفوفات 2D وتحديد نتائج هذه الخوارزميات.

  • 4.13.A.1 هناك خوارزميات قياسية تستغل تجول المصفوفات 2D لـ:
    • تحديد قيمة حد أدنى أو حد أعلى لجميع العناصر أو لصف أو عمود مخصص أو قسم فرعي آخر
    • حساب مجموع أو متوسط لجميع العناصر أو لصف أو عمود مخصص أو قسم فرعي آخر
    • تحديد ما إذا كان عنصر واحد على الأقل يمتلك خاصية معينة في المصفوفة 2D بأكملها أو لصف أو عمود مخصص أو جزء فرعي آخر
    • تحديد ما إذا كانت جميع عناصر المصفوفة 2D أو صف أو عمود مخصص أو جزء فرعي آخر possesses خاصية معينة
    • تحديد عدد العناصر في المصفوفة 2D أو في صف أو عمود مخصص أو جزء فرعي آخر possessing خاصية معينة
    • الوصول إلى جميع الأزواج المتتالية من العناصر
    • تحديد وجود أو عدم وجود عناصر مكررة في المصفوفة 2D أو في صف أو عمود مخصص أو جزء فرعي آخر
    • تحريك أو تدوير عناصر في صف يساراً أو يميناً أو في عمود فوق أو تحت
    • عكس ترتيب العناصر في صف أو عمود

المصدر: وصف دورة وامتحان College Board AP

مهام الشبكة النموذجية: مجموع صف أو عمود، إيجاد الأعلى في الشبكة، عدّ الخلايا المتطابقة، أو مجموع قطري (حيث r == c). كل منها هو مرور متداخل مع نتيجة متراكمة.

4.14

إيجاد قيمة: البحث الخطي والبحث الثنائي

المنهج

هدف التعلم 4.14.A: تطوير الكود المستخدم لخوارزميات البحث الخطي للبحث عن معلومات محددة في مجموعة وتحديد نتائج تنفيذ عملية البحث.

  • 4.14.A.1 خوارزميات البحث الخطي هي خوارزميات قياسية تفحص كل عنصر بالترتيب حتى يتم العثور على القيمة المطلوبة أو يتم فحص جميع عناصر المصفوفة أو ArrayList. يمكن لخوارزميات البحث الخطي بدء عملية البحث من أي طرف للمصفوفة أو ArrayList.
  • 4.14.A.2 عند تطبيق خوارزميات البحث الخطي على المصفوفات 2D، يجب الوصول إلى كل صف ثم تطبيق البحث الخطي على كل صف من مصفوفة 2D.

المصدر: وصف دورة وامتحان College Board AP

Binary search: halve and conquer
  • البحث الخطي يفحص كل عنصر على حدة – يعمل على أي قائمة، ويستغرق حتى $n$ خطوة.
  • البحث الثنائي يعمل فقط على قائمة مرتب: افحص العنصر الأوسط، ثم استبعد النصف الذي لا يمكن أن يحتوي على الهدف، وأعد العملية. يستغرق حوالي $\log_2 n$ خطوات – أسرع بكثير في البيانات الكبيرة.
البحث الثنائي يخفض نطاق البحث بنصفه في كل خطوة
البحث الثنائي يخفض نطاق البحث بنصفه في كل خطوة
البحث الخطي يفحص كل عنصر على حدة حتى يتم العثور على الهدف
البحث الخطي يفحص كل عنصر على حدة حتى يتم العثور على الهدف
int lo = 0, hi = a.length - 1;
while (lo <= hi) {
    int mid = (lo + hi) / 2;
    if (a[mid] == target) return mid;
    else if (a[mid] < target) lo = mid + 1;
    else hi = mid - 1;
}

مهارة الامتحان: البحث الثنائي يتطلب بيانات مرتبة؛ تعرف عدد المقارنات التي يقوم بها وكيف تتغير lo، hi، mid.

مثال محلول. ابحث عن target = 40 في المصفوفة المرتبة {3, 9, 14, 23, 31, 42, 55} (المؤشرات 0–6). ابدأ lo=0, hi=6:

  • mid = (0+6)/2 = 3، a[3]=23 < 40، لذا lo = 4;
  • mid = (4+6)/2 = 5، a[5]=42 > 40، لذا hi = 4;
  • mid = (4+4)/2 = 4، a[4]=31 < 40، لذا lo = 5;
  • الآن lo (5) > hi (4)، لذا ينتهي الحلقة – 40 غير موجود.

كل خطوة قلصت النطاق لنصفه، لذا حتى هذا الفشل استغرق ثلاث مقارنات فقط.

استكشف

قارن البحث الخطي والثانوي

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

مفردات تدريب
English العربية
Linear search/ˈlɪnɪə sɜːtʃ/ البحث الخطي
Binary search/ˈbaɪnəri sɜːtʃ/ البحث الثنائي
Selection sort/sɪˈlekʃn sɔːt/ فرز الاختيار
4.15

ترتيب البيانات: الفرز بالاختيار والفرز بالإدراج

المنهج

هدف التعلم 4.15.A: تحديد نتيجة تنفيذ كل خطوة من خطوات خوارزميات الفرز لترتيب عناصر المجموعة.

  • 4.15.A.1 فرز الاختيار وفرز الإدراج هي خوارزميات فرز تكرارية يمكن استخدامها لترتيب عناصر في مصفوفة أو ArrayList.
  • 4.15.A.2 فرز الاختيار يختار بشكل متكرر أصغر (أو أكبر) عنصر من الجزء غير المرتب من القائمة ويبدله في موقعه الصحيح (والنهائي) في الجزء المرتب من القائمة.
  • 4.15.A.3 الترتيب بالإدراج يقوم بإدراج عنصر من الجزء غير المرتب في قائمة إلى موقعه الصحيح (وليس بالضرورة النهائي) في الجزء المرتب من القائمة عن طريق إزاحة عناصر الجزء المرتب لتوفير مساحة للعنصر الجديد.

المصدر: وصف دورة وامتحان College Board AP

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

كلاهما بسيط ويستغرق حوالي $n^2$ خطوات في المتوسط – مناسب للمصفوفات الصغيرة. يجب أن تكون قادراً على تتبع المصفوفة بعد كل دورة.

استكشف

راقب خوارزمية فرز ترتب قائمة

الفرز يعيد ترتيب العناصر حسب الترتيب. مرّ باختيار/إدراج الفرز لرؤية المنطقة المرتبة تنمو عنصراً واحداً في كل مرة.

مفردات تدريب
English العربية
Insertion sort/ɪnˈsɜːʃn sɔːt/ ترتيب الإدراج
4.16

الطرق التي تستدعي نفسها: التراجع (Recursion)

المنهج

هدف التعلم 4.16.A: تحديد نتيجة استدعاء الدوال ذات الاستدعاء الذاتي.

  • 4.16.A.1 الدالة ذات الاستدعاء الذاتي هي دالة تستدعي نفسها. تحتوي الدوال ذات الاستدعاء الذاتي على حالة أساسية واحدة على الأقل، توقف عملية الاستدعاء الذاتي، ونداء ذاتي واحد على الأقل. يعد الاستدعاء الذاتي شكلًا آخر من أشكال التكرار.
  • 4.16.A.2 كل نداء ذاتي له مجموعة خاصة به من المتغيرات المحلية، بما في ذلك المعاملات. قيم المعاملات تلتقط تقدم العملية ذاتية الاستدعاء، تمامًا كما تلتقط قيم متحكم الحلقة تقدم الحلقة.
  • 4.16.A.3 يمكن تكرار أي حل ذاتي الاستدعاء باستخدام نهج تكراري والعكس صحيح.
    • بيان الاستبعاد: كتابة كود ذاتي الاستدعاء خارج نطاق منهج امتحان علوم الحاسوب AP A.

المصدر: وصف دورة وامتحان College Board AP

التراجع وراصة الاستدعاء

التراجع هو طريقة تستدعي نفسها على مدخل أصغر. تحتاج إلى حالة أساسية توقف الاستدعاءات، وحالة متراجعة تقربك من الحالة الأساسية:

public static int factorial(int n) {
    if (n <= 1) return 1;          // base case
    return n * factorial(n - 1);   // recursive case
}

بدون حالة أساسية يمكن الوصول إليها، لا يتوقف التراجع (_overflow للراصة).

التراجع والتكرار قابلان للتبديل. يمكن إعادة كتابة أي حل متراجع باستخدام حلقة تكرارية (نهج تكراري)، ويمكن إعادة كتابة أي حلقة تكرارية بالتراجع - فهما يحلان نفس المشاكل. الـ factorial أعلاه له نفس تأثير النسخة التكرارية:

public static int factorial(int n) {
    int result = 1;
    for (int i = 2; i <= n; i++) result *= i;   // same answer, no self-call
    return result;
}

لذا فإن الاختيار يتعلق بـالوضوح، وليس القدرة: التراجع يُقرأ بشكل طبيعي للمشاكل ذات البنية المتشابهة ذاتياً (الأشجار، فرز الدمج)، بينما يتجنب التكرار تكلفة الذاكرة لراصة استدعاء لكل خطوة. قد يسألك الامتحان عن تحويل واحد إلى الآخر.

استكشف

فك استدعاء تكراري

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

مفردات تدريب
English العربية
Recursion/rɪˈkɜːʃn/ العودية
base case/beɪs keɪs/ الحالة الأساسية
4.17

البحث المتراجع وفرز الدمج

المنهج

هدف التعلم 4.17.A: تحديد نتيجة تنفيذ الخوارزميات ذاتية الاستدعاء التي تستخدم السلاسل أو المجموعات.

  • 4.17.A.1 يمكن استخدام الاستدعاء الذاتي لتصفح String الكائنات والمصفوفات و ArrayList الكائنات.

هدف التعلم 4.17.B: تحديد نتيجة كل تكرار لخوارزمية البحث الثنائي المستخدمة للبحث عن معلومات في مجموعة.

  • 4.17.B.1 يجب أن تكون البيانات مرتبة لاستخدام خوارزمية البحث الثنائي. يبدأ البحث الثنائي من منتصف مصفوفة مرتبة أو ArrayList ويستبعد نصف المصفوفة أو ArrayList في كل نداء ذاتي حتى يتم العثور على القيمة المطلوبة أو تم استبعاد جميع العناصر.
  • 4.17.B.2 عادةً ما يكون البحث الثنائي أكثر كفاءة من البحث الخطي.
    • بيان الاستبعاد: خوارزميات البحث الأخرى غير البحث الخطي والثنائي خارج نطاق منهج امتحان علوم الحاسوب AP A.
  • 4.17.B.3 يمكن كتابة خوارزمية البحث الثنائي إما بطريقة تكرارية أو ذاتية الاستدعاء.

هدف التعلم 4.17.C: تحديد نتيجة كل تكرار لخوارزمية ترتيب الدمج عند استخدامها لترتيب مجموعة.

  • 4.17.C.1 ترتيب الدمج هو خوارزمية ترتيب ذاتية الاستدعاء يمكن استخدامها لترتيب عناصر في مصفوفة أو ArrayList.
    • بيان الاستبعاد: خوارزميات الترتيب الأخرى غير ترتيب التحديد والإدراج ودمج الترتيب خارج نطاق منهج امتحان علوم الحاسوب AP A.
  • 4.17.C.2 يقوم ترتيب الدمج بتقسيم المصفوفة بشكل متكرر إلى مصفوفات فرعية أصغر حتى تصبح كل مصفوفة فرعية عنصراً واحداً، ثم يدمج المصفوفات الفرعية المرتبة ذاتياً معاً بترتيب مرتب لتشكيل المصفوفة النهائية المرتبة.

المصدر: وصف دورة وامتحان College Board AP

ترتيب الدمج: تقسيم، ثم دمج

التداعية (Recursion) تمكّن الخوارزميات الفعّالة. يمكن كتابة البحث الثنائي بشكل متداعٍ (البحث في النصف الصحيح). فرز الدمج يقسم المصفوفة إلى نصفين، ويرتّب كل نصف بشكل متداعٍ، ثم يدمج نصفي المصفوفة المرتبين – مستهلكاً حوالي $n\log_2 n$ خطوات، وهو أسرع بكثير من فرز الاختيار أو الفرز بالإدراج على البيانات الكبيرة.

فرز الدمج يقسم المصفوفة لعناصر فردية، ثم يدمج نصفيها المرتبين صعوداً
فرز الدمج يقسم المصفوفة لعناصر فردية، ثم يدمج نصفيها المرتبين صعوداً

مثال محلول. تتبع factorial(4). كل استدعاء يحيل إلى أصغر منه: factorial(4) = 4 * factorial(3) = 4 * 3 * factorial(2) = 4 * 3 * 2 * factorial(1). factorial(1) يصل إلى الحالة الأساسية ويعيد 1، لذا تتراجع الاستدعاءات نحو الداخل: 2 * 1 = 2، ثم 3 * 2 = 6، ثم 4 * 6 = 24. كتابة كل استدعاء فوق قيمته المرجعة هو الطريقة الموثوقة لتتبع الاستدعاءات الذاتية.

مهارة الامتحان: اتبع طريقة متراجعة بكتابة كل استدعاء وقيمته المعادة، وعلماً بأن كفاءة فرز الدمج ($n\log n$) تفوق الفرز البسيط ($n^2$).

مفردات تدريب
English العربية
Merge sort/mɜːdʒ sɔːt/ فرز الدمج
4.17

نصائح للامتحان

  • قوّم فوائد وأضرار جمع البيانات – تُختبر هذه الوحدة عبر تبرير مكتوب قصير، وليس الكود.
  • احمِ المعلومات الشخصية القابلة للتعرف عليها (PII) واشرح مخاطر الخصوصية والأمان في السياق.
  • سمّ أضراراً حقيقية: اختراق البيانات، والمراقبة، وتحيز الخوارزميات (bias) الناتج عن بيانات غير ممثلة.
  • احترم الملكية الفكرية والتراخيص عند إعادة استخدام الكود أو البيانات.
  • قدم إجابة محددة ومبررة – "قد يكون سيئاً" غامض لا获 درجات.
مفردات تدريب
English العربية
privacy/ˈprɪvəsi/ الخصوصية
consent/kənˈsent/ موافقة
bias/ˈbaɪəs/ تحيزاً
data structure/ˈdeɪtə ˈstrʌktʃə/ هيكل البيانات

دروس تفاعلية حول هذا الموضوع

ا-working عليه خطوة بخطوة، مع تمارين تحقق فوري.

أوراق الامتحانات السابقة

المزيد من المواضيع في AP علوم الحاسوب A

تسجيل الدخول أو إنشاء حساب

IGCSE، A-Level & AP