الانتقال إلى المحتوى الرئيسي

كيفية ملء صفيف في دوامة بشكل صحيح

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

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

خطوة مهمة في ملء المصفوفة في دوامة هي تحديد اتجاه الحركة بشكل صحيح عند التحرك عبر المصفوفة. يمكن القيام بذلك باستخدام عوامل التشغيل الشرطية والتحقق من حدود المصفوفة. سيسمح لك التحديد الصحيح لاتجاه الحركة بملء المصفوفة بعناصر بالترتيب الصحيح.

  1. كيفية إنشاء مجموعة دوامة
  2. تهيئة صفيف
  3. تحديد البعد من مجموعة
  4. ملء الصفيف في دوامة
  5. تحديد اتجاه الزحف
  6. ملء القيم في دوامة
  7. محاسبة الخلايا التي تم تمريرها
  8. التحقق من حدود المصفوفة
  9. استكمال ملء المصفوفة
  10. سؤال وجواب
  11. لماذا أحتاج لملء مجموعة في دوامة?
  12. أي لغة برمجة يجب أن أستخدمها لملء مصفوفة في دوامة?
  13. هل من الممكن لملء مجموعة في دوامة دون استخدام متغيرات إضافية?
  14. ماذا سيكون تعقيد الخوارزمية لملء المصفوفة في دوامة?
  15. هل من الممكن لملء مجموعة في دوامة إذا أبعادها ليست مربع?

كيفية إنشاء مجموعة دوامة

إنشاء مصفوفة في دوامة هو خوارزمية تستخدم لملء مصفوفة ثنائية الأبعاد بقيم بترتيب بحيث يتم ترتيب العناصر في دوامة حول مركز المصفوفة.

لإنشاء مصفوفة في دوامة ، يمكنك استخدام الخوارزمية التالية:

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

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

Пример реализации алгоритма на языке جافا سكريبت:

وظيفة كريتيسبيرالاراي (ن) {

نتيجة كونست = [];

إلى عن على (دعني = 0 ؛ أنا < ن ؛ أنا {) {

النتيجة [أنا] = [];

}

دع القيمة = 1;

دع ستارترو = 0;

دع إندرو = ن-1;

دعونا نبدأ العمود = 0;

دع عمود النهاية = ن-1;

في حين (ستارترو < = إندرو & & ستارتكولومن <= إندكولومن) {

// Вправо

ل (اسمحوا لي = ستارتكولومن ؛ أنا < = إندكولومن ؛ أنا++) {

النتيجة [البداية] [أنا] = القيمة;

قيمة++;

}

ستارترو++;

// Вниз

إلى عن على (دعني = ستارترو ؛ أنا <= إندرو ؛ أنا i) {

النتيجة [أنا] [نهاية العمود] = القيمة;

قيمة++;

}

إندكولومن--;

// Влево

ل (اسمحوا لي = إندكولومن; i >= startColumn; i--) {

result[endRow][i] = value;

value++;

}

endRow--;

// Вверх

for (let i = endRow; i >= startRow; i--) {

result[i][startColumn] = value;

value++;

}

startColumn++;

}

return result;

}

Этот код создает двумерный массив размером n × n и заполняет его значениями по спирали. ستكون نتيجة هذه الوظيفة مصفوفة ثنائية الأبعاد يتم فيها ترتيب العناصر في دوامة تبدأ من الزاوية العلوية اليسرى.

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

تهيئة صفيف

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

كثافة العمليات [] [] صفيف = كثافة العمليات الجديدة [ن] [ن];

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

أيضا ، في هذه المرحلة ، يمكنك تهيئة عناصر المصفوفة ببعض القيم الأولية ، والتي قد تكون ملائمة للتعبئة اللاحقة في دوامة.

يمكن أن تكون خيارات التهيئة كما يلي:

إلى عن على (كثافة العمليات أنا = 0 ؛ أنا < ن ؛ أنا i) {

إلى عن على (الباحث ي = 0 ؛ ي < ن ؛ ي {) {

    يجب إجراء تهيئة المصفوفة قبل البدء في ملئها بعناصر في دوامة. وبالتالي ، سيتم إنشاء مصفوفة فارغة ، والتي سيتم استخدامها لتخزين وكتابة القيم بالترتيب الصحيح.

    تحديد البعد من مجموعة

    قبل البدء في ملء المصفوفة في دوامة ، من الضروري تحديد أبعادها. يحدد بعد المصفوفة عدد الصفوف والأعمدة التي ستشغلها عناصر المصفوفة.

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

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

    1. ضبط البعد يدويا. إذا علمنا مسبقا عدد الصفوف والأعمدة التي يجب أن تكون موجودة في المصفوفة ، فيمكننا تعيين هذا البعد بشكل صريح في رمز البرنامج. على سبيل المثال:
    2. كثافة العمليات [] [] صفيف = كثافة العمليات الجديدة [3] [3];
    3. في هذا المثال ، نقوم بإنشاء مصفوفة ثنائية الأبعاد بأبعاد 3 3 3 ، أي أنها ستحتوي على 3 صفوف و 3 أعمدة.

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

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

    يمكن تمثيل خوارزمية ملء المصفوفة في دوامة على النحو التالي:

    1. تهيئة المتغيرات مثل البعد من مجموعة ، والموقف الحالي والاتجاه الحالي للحركة.
    2. قم بإنشاء مصفوفة ثنائية الأبعاد ذات بعد محدد.
    3. احسب النقطة المركزية للمصفوفة.
    4. املأ العنصر المركزي للمصفوفة بالقيمة الأولية.
    5. املأ العناصر المتبقية من المصفوفة تدريجيا ، متحركا في دوامة حول العنصر المركزي في اتجاه معين.
    6. عندما تصل إلى حدود المصفوفة أو تواجه عنصرا مملوءا بالفعل ، قم بتغيير اتجاه الحركة.
    7. كرر الخطوات من 5 إلى 6 حتى يتم ملء جميع عناصر المصفوفة.
    8. يمكن تقديم مثال لحل المشكلة في شكل الجدول التالي:
    9. 1

    2

    3

    8

    9

    4

    1. 5
    2. ستكون نتيجة الخوارزمية عبارة عن مجموعة مليئة بالأرقام مرتبة بشكل حلزوني ، بدءا من العنصر المركزي والتحرك في اتجاه عقارب الساعة:
    3. 1
    4. 2

    3

    • 4
    • 5
    • 6

    7

    8

    9

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

    1. تحديد اتجاه الزحف
    2. قبل ملء المصفوفة في دوامة ، من الضروري تحديد اتجاه العبور من أجل المرور بشكل صحيح عبر جميع العناصر.
    3. يمكن تقسيم العبور الحلزوني للصفيف إلى أربعة اتجاهات: اليمين والأسفل واليسار والأعلى. من الضروري تحديد الاتجاه الذي يجب التحرك فيه في كل خطوة.
    4. يمكن استخدام المنطق التالي لتحديد اتجاه الزحف:
    5. إنشاء المتغيرات التي ستكون مسؤولة عن الاتجاه الحالي: على سبيل المثال,
    6. الاتجاه = "صحيح"

    .

    في كل خطوة ، تحقق من الاتجاه الحالي وقم بتطبيق المنطق المناسب للتنقل عبر المصفوفة.لتغيير الاتجاه ، استخدم عوامل التشغيل الشرطية أو جدول مطابق.يمكن تغيير الاتجاه بعد اجتياز عدد معين من العناصر أو بعد الوصول إلى حدود المصفوفة.على سبيل المثال ، لاجتياز صفيف في اتجاه عقارب الساعة ، يمكنك استخدام الشروط التالية:
    إذا كان الاتجاه الحالي "صحيحا" ، فانتقل إلى اليمين. إذا تم الوصول إلى حدود المصفوفة أو تمت مصادفة عنصر مملوء بالفعل ، فقم بتغيير الاتجاه إلى "أسفل".إذا كان الاتجاه الحالي "لأسفل" ، تحرك لأسفل. إذا تم الوصول إلى حدود المصفوفة أو تمت مصادفة عنصر مملوء بالفعل ، فقم بتغيير الاتجاه إلى "اليسار".وبالمثل بالنسبة للاتجاهات" اليسار "و" أعلى".وبالتالي ، فإن تحديد اتجاه العبور هو خطوة مهمة عند ملء صفيف في دوامة. من الضروري اختيار الاتجاه الصحيح في كل خطوة من خطوات الزحف لملء المصفوفة بشكل صحيح.
    ملء القيم في دوامةالمصفوفة هي بنية بيانات تسمح لك بتخزين مجموعة من العناصر. يعد ملء مصفوفة في دوامة إحدى الطرق الشيقة والمفيدة لتنظيم البيانات في مصفوفة ثنائية الأبعاد.لملء القيم في دوامة ، يمكنك استخدام الخوارزمية التالية:قم بإنشاء مصفوفة ثنائية الأبعاد بالحجم المطلوب.
    تعيين القيم الأولية للمتغيرات: روستارت ، رويند ، كولستارت ، كولند. سوف يشيرون إلى الحدود الحالية للمنطقة المملوءة.تعيين قيمة متغير كيرنتفالو إلى 1.ملء القيم في دوامة حتى يصبح روستارت أكبر من أو يساوي رويند ، و كولستارت يصبح أكبر من أو يساوي كولند.في كل خطوة ، زيادة التيارقيمة القيمة وملء قيم الصفيف في دوامة: أولا من اليسار إلى اليمين ، ثم من أعلى إلى أسفل ، من اليمين إلى اليسار ومن أسفل إلى أعلى.

    بعد كل خطوة ، قم بتغيير حدود المنطقة المملوءة (روستارت ، رويند ، كولستارت ، كولند) بحيث تملأ الخطوة التالية منطقة جديدة.

    مثال على ملء صفيف 4 4 4 في دوامة:

    1

    2

    • 3
    • 4
    • 12

    13

    14

    5

    11

    16

    1. 15
    2. 6
    3. 10
    4. 9

    8

    7

    يمكن أن تكون طريقة ملء مصفوفة في دوامة مفيدة في حل المشكلات المتعلقة بالعبور والتكرار فوق عناصر مصفوفة ثنائية الأبعاد.

    محاسبة الخلايا التي تم تمريرها

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

    لحساب الخلايا التي تم تمريرها ، يمكنك استخدام الطرق التالية:

    مجموعة من الخلايا التي تمت زيارتها-قم بإنشاء مصفوفة إضافية يتم فيها تخزين المعلومات حول زيارة كل خلية. عند المرور عبر اللولب ، ضع علامة على الخلايا التي تمت زيارتها في هذه المصفوفة.

    علم المصفوفة-قم بإنشاء مصفوفة إضافية من نفس الحجم ، والتي ستخزن القيمتين 0 و 1. تعني القيمة 1 أن الخلية قد تمت زيارتها بالفعل ، والقيمة 0 تعني أن الخلية لم تتم زيارتها بعد. عند المرور عبر اللولب ، ضع علامة على الخلايا التي تمت زيارتها في هذه المصفوفة.وضع علامات على الخلايا-استخدم قيمة خاصة تحدد الخلايا التي تمت زيارتها. على سبيل المثال ، يمكنك استخدام القيمة -1. عند المرور عبر اللولب ، قم بتعيين قيمة ملحوظة للخلايا.في أي من هذه الحالات ، من الضروري التحقق مما إذا كانت الخلية قد تمت زيارتها بالفعل ، حتى لا تتكرر. إذا تمت زيارة الخلية بالفعل ، فأنت بحاجة إلى تغيير اتجاه الحركة أو إيقاف الزحف.مع الأخذ في الاعتبار الخلايا التي تم تمريرها يسمح لك لملء مجموعة في دوامة بشكل صحيح ، وضمان التغطية الكاملة لجميع العناصر وتجنب التكرار أو السهو.
    التحقق من حدود المصفوفةعند ملء مصفوفة في دوامة ، من الضروري التعامل مع حدود المصفوفة بشكل صحيح. هذا مهم لتجنب تجاوز المصفوفة والأخطاء عند تنفيذ الخوارزمية.يتضمن التحقق من حدود المصفوفة الخطوات التالية:التحقق من الحدود الصحيحة.
    التحقق من الحد الأدنى.التحقق من الحدود اليسرى.التحقق من الحد الأعلى.يتم فحص الحد الأيمن قبل ملء كل صف من المصفوفة. إذا تم الوصول إلى الحد الصحيح ، فهذا يعني أن العنصر التالي سيكون خارج المصفوفة ، وتتوقف دورة التعبئة.
    وبالمثل ، يتم فحص الحد الأدنى قبل ملء كل عمود من المصفوفة. إذا تم الوصول إلى الحد الأدنى ، فسيكون العنصر التالي خارج المصفوفة ، وتتوقف دورة التعبئة.يتم فحص الحد الأيسر قبل ملء كل صف من المصفوفة بترتيب عكسي. إذا تم الوصول إلى الحد الأيسر ، فسيكون العنصر التالي خارج المصفوفة ، وتتوقف دورة التعبئة.أخيرا ، يتم فحص الحد الأعلى قبل ملء كل عمود من المصفوفة بترتيب عكسي. إذا تم الوصول إلى الحد الأعلى ، فسيكون العنصر التالي خارج المصفوفة ، وتتوقف دورة التعبئة.وتجدر الإشارة إلى أنه عند التحقق من حدود المصفوفة ، من المهم مراعاة ليس فقط الوضع الحالي ، ولكن أيضا اتجاه الحركة. اعتمادا على الاتجاه الحالي للحركة ، من الضروري معالجة الحدود بشكل صحيح لتجنب تجاوز المصفوفة.

    استكمال ملء المصفوفة

    بعد الانتهاء من ملء خلايا المصفوفة بشكل حلزوني ووصلنا إلى نقطة ثابتة في الحقل ، قد تبدو نتيجة الملء كما يلي:

    1

    2

    3

    4

    12

    13

    14

    5

    11

    16