logo

خلط صفيف في جافا

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

خوارزمية خلط المصفوفة:

فيما يلي خوارزمية خلط المصفوفة،

الخطوة 1: يبدأ

الخطوة 2: ابدأ من العنصر الأخير في المصفوفة ثم عد إلى العنصر الأول.

الخطوه 3: لكل عنصر في الفهرس i، قم بإنشاء فهرس عشوائي j بحيث يكون j في النطاق [0، i].

الخطوة 4: قم بتبديل العناصر في الفهرسين i و j.

الخطوة 5: كرر الخطوتين 2 و3 لجميع العناصر الموجودة في المصفوفة، مع التحرك للخلف من العنصر الأخير إلى العنصر الأول.

الخطوة 6: نهاية

يمكننا خلط مصفوفة تحتوي على أنواع مختلفة من العناصر مثل الأعداد الصحيحة والأحرف وما إلى ذلك.

خوارزمية فيشر ييتس خلط ورق اللعب:

يتم استخدام برنامج Java التالي لخلط مصفوفة تتكون من أعداد صحيحة.

ArrayShuffle.java

 import java.util.Random; public class ArrayShuffler { public static void main(String[] args) { // Sample array of integers int[] array = {1, 2, 3, 4, 5}; // Shuffle the array shuffleArray(array); // Print the shuffled array for (int num : array) { System.out.print(num + ' '); } } public static void shuffleArray(int[] array) { Random rand = new Random(); for (int i = array.length - 1; i > 0; i--) { // Generate a random index between 0 and i (inclusive) int j = rand.nextInt(i + 1); // Swap the elements at indices i and j int temp = array[i]; array[i] = array[j]; array[j] = temp; } } } 

انتاج:

 1 3 2 4 5 

قد يختلف الإخراج إذا قمت بتنفيذه في نظامك لأنه يرتب العناصر بشكل عشوائي ويخرج المصفوفة المختلطة.

التعقيدات:

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

خلط المصفوفة باستخدام القوائم في Java:

ShuffleArray.java

 import java.util.Arrays; import java.util.Collections; import java.util.List; public class ShuffleArray { public static void main(String[] args) { Integer[] intArray = {1, 2, 3, 4, 5, 6, 7}; List intList = Arrays.asList(intArray); Collections.shuffle(intList); intList.toArray(intArray); // This line will not resize the array System.out.println(Arrays.toString(intArray)); } } 

انتاج:

 [4, 1, 7, 3, 6, 5, 2] 

قد يختلف الإخراج إذا قمت بتنفيذه في نظامك لأنه يرتب العناصر بشكل عشوائي ويخرج المصفوفة المختلطة.

التعقيدات:

أول كمبيوتر محمول

تعقيد الفضاء هو O(n) كذلك. وذلك لأن الأسلوب Collections.shuffle() يعدل القائمة الأصلية في مكانها ولا يستخدم أي بنيات بيانات إضافية. التعقيد الزمني لهذا الكود هو O(n)، حيث n هو عدد العناصر في المصفوفة.

خلط المصفوفة التي تحتوي على أحرف:

ShuffleCharacters.java

 import java.util.Arrays; import java.util.Random; public class ShuffleCharacters { public static void main(String[] args) { char[] charArray = {'a', 'b', 'c', 'd', 'e', 'f', 'g'}; shuffleArray(charArray); System.out.println('Shuffled Characters: ' + Arrays.toString(charArray)); } public static void shuffleArray(char[] array) { Random rand = new Random(); for (int i = array.length - 1; i > 0; i--) { int j = rand.nextInt(i + 1); // Swap characters at indices i and j char temp = array[i]; array[i] = array[j]; array[j] = temp; } } } 

انتاج:

 Shuffled Characters: [e, f, g, d, a, c, b] 

قد يختلف الإخراج إذا قمت بتنفيذه في نظامك لأنه يرتب العناصر بشكل عشوائي ويخرج المصفوفة المختلطة.

التعقيدات:

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

خاتمة:

يعد خلط المصفوفة في Java مهارة بالغة الأهمية تمكن المطورين من إنشاء ترتيبات عشوائية وغير متحيزة للبيانات. خلال هذا الاستكشاف، قمنا بتغطية طريقتين فعالتين: استخدام طريقة Collections.shuffle() للمصفوفات غير الأولية وتنفيذ خوارزمية Fisher-Yates للتبديل للمصفوفات البدائية. يعمل التابع Collections.shuffle() على تبسيط عملية الخلط للكائنات أو المصفوفات غير الأولية من خلال الاستفادة من الوظائف المضمنة. من ناحية أخرى، توفر خوارزمية فيشر ييتس طريقة فعالة وغير متحيزة لخلط المصفوفات البدائية، مما يضمن التوحيد في التباديل.