فرز الدمج والإدراج

في علم الحاسوب ، تُعدّ خوارزمية فرز الدمج والإدراج، أو خوارزمية فورد-جونسون، خوارزمية فرز مقارنة نُشرت عام 1959 على يد إل آر فورد الابن وسيلمر إم جونسون . [ 1 ] [ 2 ] [ 3 ] [ 4 ] تستخدم هذه الخوارزمية عددًا أقل من المقارنات في أسوأ الحالات مقارنةً بأفضل الخوارزميات المعروفة سابقًا، وهما فرز الإدراج الثنائي وفرز الدمج . [ 1 ] ولعشرين عامًا، كانت خوارزمية الفرز الأقل استخدامًا للمقارنات. [ 5 ] وعلى الرغم من عدم أهميتها العملية، إلا أنها لا تزال ذات أهمية نظرية فيما يتعلق بمشكلة الفرز بأقل عدد ممكن من المقارنات. [ 3 ] ويُحتمل أن يكون ستانيسواف تريبولا وتشين بينغ قد اكتشفا هذه الخوارزمية بشكل مستقل . [ 4 ]

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

الخوارزمية

تُنفّذ خوارزمية فرز الدمج والإدراج الخطوات التالية على المدخلاتX{\displaystyle X}لن{\displaystyle n}العناصر: [ 6 ]

  1. قم بتجميع عناصرX{\displaystyle X}داخلن/2{\displaystyle \lfloor n/2\rfloor }أزواج من العناصر، بشكل عشوائي، مع ترك عنصر واحد غير مقترن إذا كان هناك عدد فردي من العناصر.
  2. يؤدين/2{\displaystyle \lfloor n/2\rfloor }إجراء مقارنات، واحدة لكل زوج، لتحديد العنصر الأكبر من بين العنصرين في كل زوج.
  3. فرز بشكل متكررن/2{\displaystyle \lfloor n/2\rfloor }العناصر الأكبر من كل زوج، مما يؤدي إلى إنشاء تسلسل مُرتبS{\displaystyle S}لن/2{\displaystyle \lfloor n/2\rfloor }من عناصر الإدخال، بترتيب تصاعدي، باستخدام فرز الدمج والإدراج.
  4. أدرج في بدايةS{\displaystyle S}العنصر الذي تم إقرانه بالعنصر الأول والأصغر منS{\displaystyle S}.
  5. أدخل المتبقين/2-1{\displaystyle \lceil n/2\rceil -1}عناصر منXS{\displaystyle X\setminus S}داخلS{\displaystyle S}، واحدة تلو الأخرى، مع ترتيب إدخال مُختار خصيصًا وموصوف أدناه. استخدم البحث الثنائي في التسلسلات الفرعية منS{\displaystyle S}(كما هو موضح أدناه) لتحديد الموضع الذي يجب إدخال كل عنصر فيه.

تم تصميم الخوارزمية للاستفادة من حقيقة أن عمليات البحث الثنائي المستخدمة لإدراج العناصر فيS{\displaystyle S}تكون هذه الطريقة أكثر كفاءة (من منظور تحليل أسوأ الحالات) عندما يكون طول التسلسل الفرعي الذي يتم البحث فيه أقل بواحد من قوة العدد اثنين . وذلك لأنه، بالنسبة لهذه الأطوال، تستخدم جميع نتائج البحث نفس عدد المقارنات. [ 1 ] لاختيار ترتيب إدخال يُنتج هذه الأطوال، ضع في اعتبارك التسلسل المُرتب.S{\displaystyle S}بعد الخطوة الرابعة من المخطط أعلاه (قبل إدراج العناصر المتبقية)، ودعxأنا{\displaystyle x_{i}}يشير إلىأنا{\displaystyle i}العنصر رقم n من هذه المتسلسلة المرتبة. وبالتالي،

S=(x1،x2،x3،...)،{\displaystyle S=(x_{1},x_{2},x_{3},\dots ),}

حيث كل عنصرxأنا{\displaystyle x_{i}}معأنا3{\displaystyle i\geq 3}يقترن بعنصرyأنا<xأنا{\displaystyle y_{i}<x_{i}}لم يتم إدراجها بعد. (لا توجد عناصر)y1{\displaystyle y_{1}}أوy2{\displaystyle y_{2}}لأنx1{\displaystyle x_{1}}وx2{\displaystyle x_{2}}(تم إقرانهم مع بعضهم البعض.) إذان{\displaystyle n}إذا كان العدد فرديًا، فيجب ترقيم العنصر المتبقي غير المزدوج أيضًا على النحو التالي:yأنا{\displaystyle y_{i}}معأنا{\displaystyle i}أكبر من مؤشرات العناصر المزدوجة. بعد ذلك، يمكن توسيع الخطوة الأخيرة من المخطط أعلاه إلى الخطوات التالية: [ 1 ] [ 2 ] [ 3 ] [ 4 ]

  • قسّم العناصر غير المدرجةyأنا{\displaystyle y_{i}}إلى مجموعات ذات مؤشرات متجاورة. هناك عنصرانy3{\displaystyle y_{3}}وy4{\displaystyle y_{4}}في المجموعة الأولى، ومجموع أحجام كل مجموعتين متجاورتين يُشكّل متتالية من قوى العدد اثنين. وبالتالي، فإن أحجام المجموعات هي: ٢، ٢، ٦، ١٠، ٢٢، ٤٢، ...
  • رتب العناصر غير المُدرجة حسب مجموعاتها (من الفهارس الأصغر إلى الفهارس الأكبر)، ولكن داخل كل مجموعة، رتبها من الفهارس الأكبر إلى الفهارس الأصغر. وهكذا، يصبح الترتيب
y4،y3،y6،y5،y12،y11،y10،y9،y8،y7،y22،y21...{\displaystyle y_{4},y_{3},y_{6},y_{5},y_{12},y_{11},y_{10},y_{9},y_{8},y_{7},y_{22},y_{21}\dots }
  • استخدم هذا الترتيب لإدراج العناصرyأنا{\displaystyle y_{i}}داخلS{\displaystyle S}لكل عنصرyأنا{\displaystyle y_{i}}استخدم البحث الثنائي منذ البدايةS{\displaystyle S}حتى (ولكن ليس شاملاً)xأنا{\displaystyle x_{i}}لتحديد مكان الإدخالyأنا{\displaystyle y_{i}}.

تحليل

يتركج(ن){\displaystyle C(n)}يشير إلى عدد المقارنات التي يجريها فرز الدمج والإدراج، في أسوأ الحالات، عند الفرز.ن{\displaystyle n}العناصر. يمكن تقسيم هذا العدد من المقارنات إلى مجموع ثلاثة حدود:

  • ن/2{\displaystyle \lfloor n/2\rfloor }المقارنات بين أزواج العناصر،
  • ج(ن/2){\displaystyle C(\lfloor n/2\rfloor )}المقارنات الخاصة بالاستدعاء التكراري، و
  • عدد من المقارنات لعمليات الإدخال الثنائية المستخدمة لإدخال العناصر المتبقية.

في الحد الثالث، يكون أسوأ عدد للمقارنات لعناصر المجموعة الأولى هو اثنان، لأن كل عنصر يُدرج في سلسلة فرعية منS{\displaystyle S}بطول لا يتجاوز ثلاثة. أولاً،y4{\displaystyle y_{4}}يتم إدراجها في التسلسل الفرعي المكون من ثلاثة عناصر(x1،x2،x3){\displaystyle (x_{1},x_{2},x_{3})}. ثم،y3{\displaystyle y_{3}}يتم إدخالها في أحد التبديلات لتسلسل العناصر الثلاثة(x1،x2،y4){\displaystyle (x_{1},x_{2},y_{4})}أو في بعض الحالات إلى التسلسل الفرعي المكون من عنصرين(x1،x2){\displaystyle (x_{1},x_{2})}وبالمثل، العناصرy6{\displaystyle y_{6}}وy5{\displaystyle y_{5}}يتم إدخال كل عنصر من المجموعة الثانية في سلسلة فرعية لا يزيد طولها عن سبعة، باستخدام ثلاث مقارنات. وبشكل عام، فإن أسوأ عدد للمقارنات للعناصر فيأنا{\displaystyle i}المجموعة هيأنا+1{\displaystyle i+1}لأن كل منها يُدرج في سلسلة فرعية طولها على الأكثر2أنا+1-1{\displaystyle 2^{i+1}-1}[ 1 ] [ 2 ] [ 3 ] [ 4 ] من خلال جمع عدد المقارنات المستخدمة لجميع العناصر وحل علاقة التكرار الناتجة ، يمكن استخدام هذا التحليل لحساب قيمج(ن){\displaystyle C(n)}، مما يعطي الصيغة [ 7 ]

ج(ن)=أنا=1نسجل23أنا4نسجل2ن-1.415ن{\displaystyle C(n)=\sum _{i=1}^{n}\left\lceil \log _{2}{\frac {3i}{4}}\right\rceil \approx n\log _{2}n-1.415n}

أو، بصيغة مغلقة ، [ 8 ]

ج(ن)=نسجل23ن4-2سجل26ن3+سجل26ن2.{\displaystyle C(n)=n{\biggl \lceil }\log _{2}{\frac {3n}{4}}{\biggr \rceil }-{\biggl \lfloor }{\frac {2^{\lfloor \log _{2}6n\rfloor }}{3}}{\biggr \rfloor }+{\biggl \lfloor }{\frac {\log _{2}6n}{2}}{\biggr \rfloor }.}

لن=1،2،...{\displaystyle n=1,2,\dots }عدد المقارنات هو [ 1 ]

0، 1، 3، 5، 7، 10، 13، 16، 19، 22، 26، 30، 34، ... (التسلسل A001768 في OEIS )

العلاقة بأنواع المقارنة الأخرى

تُسمى هذه الخوارزمية فرز الدمج والإدراج لأن المقارنات الأولية التي تُجريها قبل استدعائها التكراري (مُزاوجة العناصر العشوائية ومقارنة كل زوج) تُشابه المقارنات الأولية لفرز الدمج ، بينما تتبع المقارنات التي تُجريها بعد الاستدعاء التكراري (باستخدام البحث الثنائي لإدراج العناصر واحدًا تلو الآخر في قائمة مُرتبة) نفس مبدأ فرز الإدراج . وبهذا المعنى، فهي خوارزمية هجينة تجمع بين فرز الدمج وفرز الإدراج. [ 9 ]

للمدخلات الصغيرة (حتىن=11{\displaystyle n=11}) عدد مقارناتها يساوي الحد الأدنى لترتيب المقارنة لـسجل2ن!نسجل2ن-1.443ن{\displaystyle \lceil \log _{2}n!\rceil \approx n\log _{2}n-1.443n}مع ذلك، بالنسبة للمدخلات الأكبر حجمًا، يكون عدد المقارنات التي تُجريها خوارزمية الدمج والإدراج أكبر من هذا الحد الأدنى. كما أن فرز الدمج والإدراج يُجري عددًا أقل من المقارنات مقارنةً بأعداد الفرز ، التي تحسب المقارنات التي يُجريها فرز الإدراج الثنائي أو فرز الدمج في أسوأ الحالات. وتتراوح أعداد الفرز بيننسجل2ن-0.915ن{\displaystyle n\log _{2}n-0.915n}ونسجل2ن-ن{\displaystyle n\log _{2}nn}، مع نفس الحد الرئيسي ولكن بمعامل ثابت أسوأ في الحد الخطي ذي الرتبة الأدنى. [ 1 ]

فرز الدمج والإدراج هو خوارزمية الفرز التي تحتوي على أقل عدد ممكن من المقارنات لـن{\displaystyle n}العناصر كلمان22{\displaystyle n\leq 22}وهي الأقل مقارنة بـن46{\displaystyle n\leq 46}[ 10 ] [ 11 ] على مدى عشرين عامًا، كانت خوارزمية فرز الدمج والإدراج هي خوارزمية الفرز الأقل عددًا من المقارنات المعروفة لجميع أطوال المدخلات. ومع ذلك، في عام 1979، نشر جلين ماناشر خوارزمية فرز أخرى تستخدم عددًا أقل من المقارنات، وذلك للمدخلات الكبيرة بما يكفي. [ 3 ] [ 5 ] لا يزال من غير المعروف بالضبط عدد المقارنات اللازمة للفرز، لجميعن{\displaystyle n}لكن خوارزمية ماناشر وخوارزميات الفرز اللاحقة التي حطمت الأرقام القياسية استخدمت جميعها تعديلات على أفكار فرز الدمج والإدراج. [ 3 ]

مراجع

  1. 1 2 3 4 5 6 7 فورد، ليستر ر. الابن ؛ جونسون، سيلمر م. (1959)، "مسألة بطولة"، المجلة الرياضية الأمريكية الشهرية ، 66 (5): 387-389 ، doi : 10.2307/2308750 ، JSTOR 2308750 ، MR 0103159  
  2. 1 2 3 ويليامسون، ستانلي جيل (2002)، "2.31 دمج الإدخال (فورد-جونسون)" ، التوافقية لعلوم الحاسوب ، كتب دوفر في الرياضيات، شركة كوريير، ص 66-68 ، ISBN  9780486420769
  3. 1 2 3 4 5 6 محمود، حسام م. (2011)، "12.3.1 خوارزمية فورد-جونسون" ، الفرز: نظرية التوزيع ، سلسلة وايلي في الرياضيات المتقطعة والتحسين، المجلد 54، جون وايلي وأولاده، الصفحات 286-288 ، ISBN   9781118031131
  4. 1 2 3 4 كنوت، دونالد إي. ( 1998)، "دمج الإدراج"، فن برمجة الحاسوب ، المجلد 3: الفرز والبحث ( الطبعة الثانية)، الصفحات 184-186  
  5. 1 2 ماناشر، جلين ك. (يوليو 1979)، "خوارزمية فرز فورد-جونسون ليست مثالية"، مجلة ACM ، 26 (3): 441-456 ، doi : 10.1145/322139.322145
  6. رتب الوصف الأصلي لفورد وجونسون (1959) العناصر ترتيبًا تنازليًا. أما الخطوات المذكورة هنا فتعكس المخرجات، وفقًا للوصف الوارد في كنوت (1998) . تُجري الخوارزمية الناتجة المقارنات نفسها، ولكنها تُنتج ترتيبًا تصاعديًا بدلًا من الترتيب الأصلي.
  7. ينسب كنوت (1998) صيغة الجمع إلى أطروحة الدكتوراه التي قدمها أ. هاديان عام 1960. وقد سبق أن قدم فورد وجونسون (1959) صيغة التقريب .
  8. جاي، ريتشارد ك .؛ نوفاكوفسكي، ريتشارد ج. (ديسمبر 1995)، " مسائل شهرية غير محلولة، 1969-1995"، المجلة الرياضية الأمريكية الشهرية ، 102 (10): 921-926 ، doi : 10.2307/2975272 ، JSTOR 2975272 
  9. كنوت (1998) ، ص 184: "بما أنه ينطوي على بعض جوانب الدمج وبعض جوانب الإدخال، فإننا نسميه دمج الإدخال ".
  10. بيتشارسكي، مارسين (2004)، "نتائج جديدة في فرز المقارنة الدنيا"، Algorithmica ، 40 (2): 133-145 ، doi : 10.1007/s00453-004-1100-7 ، MR 2072769 
  11. بيتشارسكي، مارسين (2007)، "لا تزال خوارزمية فورد-جونسون غير مهزومة لأقل من 47 عنصرًا"، رسائل معالجة المعلومات ، 101 (3): 126-128 ، doi : 10.1016/j.ipl.2006.09.001 ، MR 2287331