فرز الأقزام

فرز جنوم (المعروف أيضًا باسم الفرز الغبي ) هو نوع من خوارزمية فرز الإدراج لا يستخدم الحلقات المتداخلة. عُرف فرز جنوم لفترة طويلة واستُخدم دون تسميته صراحةً. [ 1 ] ثم شاع استخدامه بفضل عالم الحاسوب الإيراني حامد سربازي آزاد (أستاذ علوم وهندسة الحاسوب في جامعة شريف للتكنولوجيا ) [ 2 ] في عام 2000. سُمي الفرز في البداية بالفرز الغبي [ 3 ] (لا يُخلط بينه وبين فرز بوغوس )، ثم وصفه لاحقًا ديك غرون وأطلق عليه اسم فرز جنوم . [ 4 ]

تُجري خوارزمية فرز جنوم عددًا من المقارنات لا يقل عن عدد مقارنات فرز الإدراج ، ولها نفس خصائص زمن التشغيل التقاربي . تعمل خوارزمية فرز جنوم عن طريق بناء قائمة مُرتبة عنصرًا تلو الآخر، ونقل كل عنصر إلى مكانه الصحيح عبر سلسلة من عمليات التبديل. يبلغ متوسط ​​زمن التشغيل O ( n² ) ، ولكنه يميل إلى O ( n ) إذا كانت القائمة مُرتبة تقريبًا في البداية. [ 5 ] [ ملاحظة 1 ]

وصف ديك غرون طريقة الفرز بالقصة التالية: [ 4 ]

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

"خوارزمية فرز الأقزام - أبسط خوارزمية فرز". Dickgrune.com

الشفرة الزائفة

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

الإجراء gnomeSort(a[]): pos := 1 بينما pos < طول(a): إذا (pos == 0 أو a[pos] >= a[pos-1]): pos := pos + 1 وإلا : قم بتبديل a[pos] و a[pos-1] pos := pos - 1

مثال

بافتراض وجود مصفوفة غير مرتبة، a = [5, 3, 2, 4]، فإن خوارزمية فرز جنوم تتخذ الخطوات التالية خلال حلقة while. يتم تمييز الموضع الحالي بخط غامق ويُشار إليه كقيمة للمتغير pos.

المصفوفة الحاليةposالشرط ساري المفعولالإجراء المطلوب اتخاذه
[ 5 , 3, 2, 4]0pos == 0زيادة الموضع
[5, 3 , 2, 4]1a[pos] < a[pos-1]تبديل، إنقاص الموضع
[ 3 , 5, 2, 4]0pos == 0زيادة الموضع
[3، 5 ، 2، 4]1a[pos] ≥ a[pos-1]زيادة الموضع
[3، 5، 2 ، 4]2a[pos] < a[pos-1]تبديل، إنقاص الموضع
[3، 2 ، 5، 4]1a[pos] < a[pos-1]تبديل، إنقاص الموضع
[ 2 , 3, 5, 4]0pos == 0زيادة الموضع
[2، 3 ، 5، 4]1a[pos] ≥ a[pos-1]زيادة الموضع
[2، 3، 5 ، 4]2a[pos] ≥ a[pos-1]زيادة الموضع:
[2، 3، 5، 4 ]3a[pos] < a[pos-1]تبديل، إنقاص الموضع
[2، 3، 4 ، 5]2a[pos] ≥ a[pos-1]زيادة الموضع
[2، 3، 4، 5 ]3a[pos] ≥ a[pos-1]زيادة الموضع
[2، 3، 4، 5]4pos == length(a)انتهى

ملحوظات

  1. تعني كلمة "مرتب تقريبًا" أن كل عنصر في القائمة ليس بعيدًا عن موضعه الصحيح (ليس أبعد من مسافة ثابتة صغيرة).

مراجع

  1. سينغر، مايكل (1980). "برمجة لغة التجميع PDP-11 وتنظيم الآلة" . نيويورك، الولايات المتحدة الأمريكية: جون وايلي وأولاده . ص  47.
  2. حامد سربازي آزاد. "صفحة تعريف حامد سربازي آزاد" . مؤرشفة من الأصل بتاريخ 16 أكتوبر 2018. تم الاطلاع عليها بتاريخ 16 أكتوبر 2018 .
  3. سربازي آزاد، حامد (2 أكتوبر 2000). "الفرز الغبي: خوارزمية فرز جديدة" (ملف PDF) . النشرة الإخبارية (599). قسم علوم الحاسوب، جامعة غلاسكو: 4. مؤرشف (ملف PDF) من الأصل في 7 مارس 2012. تم الاطلاع عليه في 25 نوفمبر 2014 .
  4. ١ ٢ "خوارزمية فرز جنوم - أبسط خوارزمية فرز" . Dickgrune.com . ٢٠٠٠-١٠-٠٢. مؤرشف من الأصل في ٢٠١٧-٠٨-٣١ . تم الاطلاع عليه في ٢٠١٧-٠٧-٢٠ .
  5. بول إي. بلاك. "فرز الأقزام" . قاموس الخوارزميات وهياكل البيانات . المعهد الوطني الأمريكي للمعايير والتكنولوجيا. مؤرشف من الأصل بتاريخ 11 أغسطس 2011. تم الاطلاع عليه بتاريخ 20 أغسطس 2011 .