شلسورت

خوارزمية شل للفرز ، والمعروفة أيضًا باسم فرز شل أو طريقة شل ، هي خوارزمية فرز مقارنة في مكانها . يمكن فهمها إما كتعميم للفرز بالتبادل ( فرز الفقاعات ) أو الفرز بالإدراج ( فرز الإدراج ). [ 3 ] تبدأ هذه الطريقة بفرز أزواج العناصر المتباعدة، ثم تقلل تدريجيًا المسافة بين العناصر المراد مقارنتها. من خلال البدء بالعناصر المتباعدة، يمكنها نقل بعض العناصر غير الموجودة في مكانها الصحيح إلى الموضع المطلوب بشكل أسرع من عملية تبادل الجوار الأقرب البسيطة. يعتمد وقت تشغيل خوارزمية شل للفرز بشكل كبير على تسلسل الفجوات المستخدم. بالنسبة للعديد من المتغيرات العملية، لا يزال تحديد تعقيدها الزمني مشكلة مفتوحة .
نُشرت الخوارزمية لأول مرة بواسطة دونالد شيل عام 1959، ولا علاقة لها بالأصداف. [ 4 ] [ 5 ]
وصف
خوارزمية شيل هي تحسين لخوارزمية فرز الإدراج ، تسمح بتبادل العناصر المتباعدة. تقوم فكرتها على ترتيب قائمة العناصر بحيث ينتج عن أخذ كل عنصر رقم h ، بدءًا من أي مكان، قائمة مرتبة. تُسمى هذه القائمة بقائمة h- مرتبة. ويمكن اعتبارها أيضًا h قوائم متداخلة، كل منها مرتبة على حدة. [ 6 ] البدء بقيم كبيرة لـ h يسمح للعناصر بالتحرك لمسافات طويلة في القائمة الأصلية، مما يقلل من الفوضى بشكل كبير وسريع، ويقلل من الجهد المطلوب لخطوات فرز h الأصغر. [ 7 ] إذا تم فرز القائمة k-مرتبة لعدد صحيح أصغر k ، فإنها تظل قائمة h- مرتبة. يضمن الفرز النهائي بقيمة h = 1 أن تكون القائمة مرتبة بالكامل في النهاية، [ 6 ] ولكن اختيار تسلسل تنازلي لقيم h بعناية يقلل من الجهد المطلوب لهذه المرحلة الأخيرة.
ببساطة، هذا يعني أنه إذا كان لدينا مصفوفة من 1024 رقمًا، فإن الفجوة الأولى ( h ) قد تكون 512. ثم نمر على المصفوفة ونقارن كل عنصر في النصف الأول بالعنصر المقابل له في النصف الثاني. الفجوة الثانية ( k ) هي 256، مما يقسم المصفوفة إلى أربعة أقسام (بدءًا من 0، 256، 512، 768)، ونتأكد من ترتيب العناصر الأولى في كل قسم بالنسبة لبعضها البعض، ثم العنصر الثاني في كل قسم، وهكذا. عمليًا، يمكن أن يكون تسلسل الفجوات أي شيء، لكن الفجوة الأخيرة دائمًا ما تكون 1 لإنهاء عملية الفرز (أي إنهاء العملية بفرز إدراج عادي).
يظهر أدناه مثال لتشغيل خوارزمية Shellsort مع الفجوات 5 و 3 و 1.
| أ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ١٠ | 11 | 12 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| بيانات الإدخال | 62 | 83 | 18 | 53 | 07 | 17 | 95 | 86 | 47 | 69 | 25 | 28 |
| بعد الفرز 5 | 17 | 28 | 18 | 47 | 07 | 25 | 83 | 86 | 53 | 69 | 62 | 95 |
| بعد الفرز الثلاثي | 17 | 07 | 18 | 47 | 28 | 25 | 69 | 62 | 53 | 83 | 86 | 95 |
| بعد الفرز 1 | 07 | 17 | 18 | 25 | 28 | 47 | 53 | 62 | 69 | 83 | 86 | 95 |
تُجري المرحلة الأولى، وهي الفرز الخماسي، فرز الإدراج على خمس مصفوفات فرعية منفصلة ( a1، a6، a11 )، (a2، a7، a12 ) ، ( a3 ، a8 ) ، ( a4 ، a9 ) ، ( a5 ، a10 ) . على سبيل المثال ، تُغير هذه المرحلة المصفوفة الفرعية ( a1، a6 ، a11 ) من ( 62 ، 17 ، 25 ) إلى (17، 25، 62 ) . أما المرحلة التالية ، وهي الفرز الثلاثي، فتُجري فرز الإدراج على المصفوفات الفرعية الثلاث ( a1 ، a4 ، a7 ، a10 ) ، ( a2 ، a5 ، a8 ، a11 ) ، ( a3 ، a6 ، a9 ، a12 ) . المرحلة الأخيرة، الفرز 1، هي فرز إدراج عادي للمصفوفة بأكملها ( a 1 ، ...، a 12 ).
كما يوضح المثال، فإن المصفوفات الفرعية التي تعمل عليها خوارزمية فرز شيل تكون قصيرة في البداية؛ ثم تصبح أطول لاحقًا ولكنها مرتبة تقريبًا. وفي كلتا الحالتين، تعمل خوارزمية فرز الإدراج بكفاءة.
على عكس فرز الإدراج ، فإن فرز شيل ليس فرزًا مستقرًا، إذ أن عمليات الإدراج المتقطعة تنقل العناصر المتساوية متجاوزةً بعضها البعض، وبالتالي تفقد ترتيبها الأصلي. وهو خوارزمية فرز تكيفية، حيث يتم تنفيذها بشكل أسرع عندما يكون المدخل مُرتبًا جزئيًا.
مثال
هذا مثال بلغة C# يستخدم تسلسل الفجوة الخاص بمارسين سيورا، مع فرز الإدراج الداخلي.
باستخدام System.Collections.Generic ؛// فرز مصفوفة a[0...n-1]. List <int> gaps = [ 701 , 301 , 132 , 57 , 23 , 10 , 4 , 1 ] ; // تسلسل الفجوات Ciura// ابدأ بأكبر فجوة وتدرج نزولاً حتى تصل إلى فجوة تساوي 1 // على غرار فرز الإدراج، ولكن بدلاً من 1، يتم استخدام الفجوة في كل خطوة foreach ( int gap in gaps ) { // قم بإجراء فرز إدراج مع فجوات لكل عنصر في gaps // كل حلقة تترك a[0..gap-1] مرتبة مع فجوات for ( int i = gap ; i < n ; ++ i ) { // احفظ a[i] في temp وأنشئ فجوة في الموضع i int temp = a [ i ]; // انقل العناصر التي تم فرزها سابقًا مع الفجوات لأعلى حتى يتم العثور على الموقع الصحيح لـ a[i] for ( int j = i ; ( j >= gap ) && ( a [ j - gap ] > temp ); j -= gap ) { a [ j ] = a [ j - gap ]; } // ضع temp (a[i] الأصلي) في موقعه الصحيح a [ j ] = temp ; } }تسلسلات الفجوات
يُعدّ اختيار تسلسل الفجوات المناسب أمرًا معقدًا. فكل تسلسل فجوات يحتوي على الرقم 1 يُنتج فرزًا صحيحًا (إذ يجعل هذا المرحلة الأخيرة فرز إدراج عاديًا)؛ ومع ذلك، قد تختلف خصائص النسخ الناتجة من خوارزمية Shellsort اختلافًا كبيرًا. فقلة الفجوات تُبطئ عملية الفرز، وكثرتها تُضيف عبئًا إضافيًا.
يقارن الجدول أدناه معظم متواليات الفجوات المقترحة والمنشورة حتى الآن. بعضها يحتوي على عناصر متناقصة تعتمد على حجم المصفوفة المرتبة ( N ). بينما البعض الآخر عبارة عن متواليات لانهائية متزايدة، حيث يجب استخدام العناصر الأقل من N بترتيب عكسي.
| OEIS | المصطلح العام ( k ≥ 1) | فجوات خرسانية | تعقيد الوقت في أسوأ الحالات | المؤلف وسنة النشر |
|---|---|---|---|---|
| [مثال: عندما N = 2p ] | شل ، 1959 [ 4 ] | |||
| فرانك ولازاروس، 1960 [ 8 ] | ||||
| A000225 | هيبارد ، 1963 [ 9 ] | |||
| A083318 | ، مسبوقة بـ 1 | بابيرنوف وستاسيفيتش، 1965 [ 10 ] | ||
| A003586 | الأعداد المتتالية من الشكل( 3- أعداد سلسة) | برات ، 1971 [ 1 ] | ||
| A003462 | ، لا يزيد عن | كنوت ، 1973، [ 3 ] استنادًا إلى برات ، 1971 [ 1 ] | ||
| A036569 | إنسيربي وسيدجويك ، 1985، [ 11 ] كنوت [ 3 ] | |||
| A036562 | ، مسبوقة بـ 1 | سيدجويك، 1982 [ 6 ] | ||
| A033622 | سيدجويك، 1986 [ 12 ] | |||
| [لقيم معينة من N ] | جونيت وبايزا ييتس , 1991 [ 13 ] | |||
| A108870 | (أو ما يعادل ذلك،) | توكودا، 1992 [ 14 ] (خطأ في الاقتباس لكل OEIS) | ||
| A102549 | تقريبًا | سيورا، 2001 [ 15 ] | ||
| A366726 | لي، 2021 [ 16 ] | |||
| سكين، إرينبورغ، يارومشيك، 2023 [ 17 ] |
عندما يحتوي التمثيل الثنائي للعدد N على العديد من الأصفار المتتالية، فإن خوارزمية Shellsort باستخدام تسلسل الفجوات الأصلي لـ Shell تُجري Θ( N² ) مقارنة في أسوأ الحالات. على سبيل المثال، تحدث هذه الحالة عندما يكون N مساويًا لقوة من قوى العدد اثنين ، حيث تشغل العناصر الأكبر والأصغر من الوسيط مواقع فردية وزوجية على التوالي، نظرًا لمقارنتها فقط في المرور الأخير.
تستخدم خوارزمية Gonnet وBaeza-Yates لفرز Shell (GBY91) فجوات تبدأ بالعدد N ، وتتفوق في أدائها على العديد من الخوارزميات الأخرى في المتوسط [ 13 ] ، ولكنها أيضًا عرضة لحالة أسوأ من Θ( N² ): لنفترض أن X فجوة في المتتالية. تسمح النسبة المشتركة لفجوات GBY91، وهي 2.2 ، بأن يكون عددان صحيحان متتاليان Y وY+1 على الأقل مساويين لـ X من خلال القسمة الصحيحة على 2.2. اختر Y أو Y+1، أيهما زوجي، لتكرار العملية، وستحصل بالاستقراء على سلسلة لا نهائية من الفجوات الزوجية الأكبر من X. عند X = 1، يتم توليد عدد لا نهائي من الخيارات لـ N حيث تكون جميع فجوات GBY91 الأكبر من 1 زوجية ، وبالتالي تكون Θ( N² ) على نفس مدخلات الحالة الأسوأ المذكورة سابقًا لفجوات Shell الأصلية.
على الرغم من أن تعقيدها أعلى من O ( N log N ) الأمثل لفرز المقارنة، إلا أن نسخة برات تناسب فرز الشبكات ولها نفس تعقيد البوابة التقاربي مثل فرز باتشر الثنائي .
لاحظ غونيت وبايزا-ياتس أن خوارزمية Shellsort تُجري أقل عدد من المقارنات في المتوسط عندما تكون نسب الفجوات المتتالية مساوية تقريبًا لـ 2.2. [ 13 ] ولهذا السبب، أثبتت متتاليتهما بنسبة 2.2 ومتتالية توكودا بنسبة 2.25 كفاءتهما. مع ذلك، لا يُعرف سبب ذلك. يوصي سيدجويك باستخدام فجوات ذات قواسم مشتركة كبرى صغيرة أو فجوات أولية فيما بينها . [ 18 ] يبدو أن استخدام فجوات من الأعداد الفردية يُحسّن الأداء، حيث لوحظت زيادة في السرعة بنسبة 25% تقريبًا مقارنةً بشفرة Shell الأصلية. كما يبدو أن استخدام فجوات ليست من مضاعفات 2 أو 3 أو 5 يُقلل أوقات التشغيل بشكل أكبر، إذ يبدو أن زيادة السرعة بنسبة 35% تقريبًا مقارنةً بشفرة Shell الأصلية ممكنة. أما استخدام فجوات من الأعداد الأولية فقط (التي تنتهي بـ 1)، فيبدو أنه يُحسّن السرعة بنسبة 40% تقريبًا مقارنةً بالشفرة الأصلية.
فيما يتعلق بمتوسط عدد المقارنات، فإن متتالية سيورا [ 15 ] تتمتع بأفضل أداء معروف؛ لم يتم تحديد الفجوات التي تزيد عن 701، ولكن يمكن توسيع المتتالية بشكل أكبر وفقًا للصيغة التكرارية..
متتالية توكودا، المحددة بالصيغة البسيطة، أين،يمكن التوصية به للتطبيقات العملية.
إذا كان الحد الأقصى لحجم المدخلات صغيرًا، كما قد يحدث عند استخدام خوارزمية فرز شل على مصفوفات فرعية صغيرة بواسطة خوارزمية فرز تكرارية أخرى مثل الفرز السريع أو فرز الدمج ، فمن الممكن جدولة تسلسل أمثل لكل حجم مدخلات. [ 19 ] [ 20 ] بالنسبة لـ N = 128 و N = 1000، وجد سيورا تجريبيًا أن التسلسلين (1، 4، 9، 24، 85) و (1، 4، 10، 23، 57، 156، 409، 995) يُجريان أقل عدد من المقارنات في المتوسط على التوالي. [ 15 ]
التعقيد الحسابي
تتحقق الخاصية التالية: بعد فرز أي مصفوفة مرتبة وفقًا لـ h1 باستخدام h2 ، تظل المصفوفة مرتبة وفقًا لـ h1 . [ 21 ] كل مصفوفة مرتبة وفقًا لـ h1 و h2 هي أيضًا مرتبة وفقًا لـ ( a1h1 + a2h2 ) ، لأي عددين صحيحين غير سالبين a1 و a2 . وبالتالي ، يرتبط تعقيد الحالة الأسوأ لخوارزمية Shellsort بمسألة فروبينيوس : بالنسبة للأعداد الصحيحة المعطاة h1 ، ... ، hn التي يكون قاسمها المشترك الأكبر 1، فإن عدد فروبينيوس g ( h1 ، ...، hn ) هو أكبر عدد صحيح لا يمكن تمثيله على الصورة a1h1 + ... + anhn حيث a1 ، ...، an أعداد صحيحة غير سالبة . باستخدام الصيغ المعروفة لأعداد فروبينيوس، يمكننا تحديد تعقيد الحالة الأسوأ لخوارزمية Shellsort لعدة فئات من متواليات الفجوات. [ 22 ] تظهر النتائج المثبتة في الجدول أعلاه.
أثبت مارك ألين وايس أن خوارزمية Shellsort تعمل في زمن O ( N log N ) عندما تكون مصفوفة الإدخال بترتيب عكسي. [ 23 ]
فيما يتعلق بمتوسط عدد العمليات، لا تتناول أي من النتائج المثبتة تسلسل فجوات عملي. بالنسبة للفجوات التي تمثل قوى العدد اثنين، قام إسبيليد بحساب هذا المتوسط على النحو التالي:[ 24 ] حدد كنوت متوسط تعقيد فرز مصفوفة مكونة من N عنصرًا مع وجود فجوتين ( h ، 1) على النحو التالي:[ 3 ] يترتب على ذلك أن خوارزمية فرز شيل ثنائية المرور مع h = Θ( N 1/3 ) تتطلب في المتوسط O ( N 5/3 ) من المقارنات/الانعكاسات/وقت التشغيل. وجد ياو متوسط تعقيد خوارزمية فرز شيل ثلاثية المرور. [ 25 ] وقد حسّن جانسون وكنوث نتيجته : [ 26 ] متوسط عدد المقارنات/الانعكاسات/وقت التشغيل الذي يتم إجراؤه أثناء خوارزمية فرز شيل بثلاث فجوات ( ch , cg , 1)، حيث h و g عددان أوليان فيما بينهما، هوفي المحاولة الأولى،في المرور الثاني وفي المرور الثالث. ψ ( h , g ) في الصيغة الأخيرة هي دالة معقدة تساوي تقريبًا. على وجه الخصوص، عندما يكون h = Θ( N 7/15 ) و g = Θ( N 1/5 )، فإن متوسط وقت الفرز هو O ( N 23/15 ).
استنادًا إلى التجارب، يُفترض أن خوارزمية Shellsort مع تسلسل فجوات هيبارد تعمل في متوسط زمن قدره O ( N 5/4 ) [ 3 ] ، وأن تسلسل جونيت وبايزا-ياتس يتطلب في المتوسط 0.41 N ln N (ln ln N + 1/6) من عمليات نقل العناصر. [ 13 ] وتفشل التقريبات لمتوسط عدد العمليات التي طُرحت سابقًا لتسلسلات أخرى عندما تحتوي المصفوفات المُرتبة على ملايين العناصر.
يُظهر الرسم البياني أدناه متوسط عدد مقارنات العناصر المستخدمة في متواليات الفجوات المختلفة، مقسومًا على الحد الأدنى النظري ، أي log₂N !. تم توسيع متوالية سيوريا 1، 4، 10، 23، 57، 132، 301، 701 (المُسماة Ci01) وفقًا للصيغة التالية :.

بتطبيق نظرية تعقيد كولموغوروف ، أثبت جيانغ ولي وفيتاني [ 27 ] الحد الأدنى التالي لرتبة متوسط عدد العمليات/زمن التشغيل في خوارزمية فرز شيل ذات p تمريرة: Ω( pN 1+1/ p ) عندما p ≤ log₂N و Ω( pN ) عندما p > log₂N . وبالتالي، فإن خوارزمية فرز شيل لديها إمكانية التشغيل في متوسط زمن ينمو تقاربياً مثل N log N فقط عند استخدام متواليات فجوات ينمو عدد فجواتها بما يتناسب مع لوغاريتم حجم المصفوفة. ومع ذلك، فإنه من غير المعروف ما إذا كانت خوارزمية فرز شيل قادرة على الوصول إلى هذه الرتبة التقاربية لتعقيد الحالة المتوسطة، وهي الرتبة المثلى لفرز المقارنة. وقد حسّن فيتاني [ 28 ] الحد الأدنى لكل عدد من التمريرات ل أينتشير هذه النتيجة، على سبيل المثال، إلى الحد الأدنى لجيانغ-لي-فيتاني لجميعيُحسّن هذا الأسلوب الحد الأدنى لتسلسلات الزيادة المُستخدمة. في الواقع، تتطابق جميع الحدود (الدنيا والعليا) المعروفة حاليًا للحالة المتوسطة بدقة مع هذا الحد الأدنى. على سبيل المثال، يُعطي هذا نتيجة جديدة مفادها أن الحد الأعلى لـ Janson-Knuth يتطابق مع الحد الأدنى الناتج لتسلسل الزيادة المُستخدم، مما يُظهر أن استخدام Shellsort بثلاث تمريرات لهذا التسلسل يُحسّن من دقة النتائج.المقارنات/الانعكاسات/وقت التشغيل. تسمح لنا الصيغة بالبحث عن متواليات الزيادة التي تُعطي حدودًا دنيا غير معروفة؛ على سبيل المثال، متوالية زيادة لأربع دورات لها حد أدنى أكبر من بالنسبة لتسلسل الزيادة يصبح الحد الأدنى
إن تعقيد أسوأ حالة لأي نسخة من خوارزمية Shellsort هو من رتبة أعلى: فقد أظهر بلاكستون وبونين وسويل أنه ينمو على الأقل بنفس سرعة[ 29 ] [ 30 ] أثبت روبرت سايفر حدًا أدنى أقوى :متىللجميع[ 31 ]
التطبيقات
تُجري خوارزمية Shellsort عمليات أكثر، لكن نسبة أخطاء ذاكرة التخزين المؤقت فيها أعلى من خوارزمية quicksort . مع ذلك، ولأنها تُنفَّذ باستخدام كود قليل ولا تعتمد على مكدس الاستدعاءات ، فإن بعض تطبيقات دالة qsort في مكتبة C القياسية، المُخصصة للأنظمة المُدمجة ، تستخدمها بدلاً من quicksort. على سبيل المثال، تُستخدم Shellsort في مكتبة uClibc . [ 32 ] ولأسباب مماثلة، استُخدمت Shellsort في نواة لينكس سابقًا . [ 33 ]
يمكن أن تُستخدم خوارزمية Shellsort أيضًا كخوارزمية فرعية لخوارزمية الفرز الاستبطاني ، لفرز المصفوفات الفرعية القصيرة ومنع التباطؤ عندما يتجاوز عمق الاستدعاء حدًا معينًا. يُستخدم هذا المبدأ، على سبيل المثال، في ضاغط bzip2 . [ 34 ]
انظر أيضاً
مراجع
- 1 2 3 برات، فوغان رونالد (1979). فرز شيل وشبكات الفرز (أطروحات متميزة في علوم الحاسوب) (PDF) . جارلاند. ISBN 978-0-8240-4406-0تمت أرشفة الملف (PDF) من النسخة الأصلية في 7 سبتمبر 2021.
- ↑ "Shellsort & Comparisons" . مؤرشف من الأصل في 20 ديسمبر 2019. تم الاطلاع عليه في 14 نوفمبر 2015 .
- 1 2 3 4 5 كنوت، دونالد إي. (1997). "طريقة شل". فن برمجة الحاسوب. المجلد 3: الفرز والبحث ( الطبعة الثانية). ريدينغ، ماساتشوستس: أديسون-ويسلي. الصفحات 83-95 . ISBN 978-0-201-89685-5.
- 1 2 شل، د. ل. (1959). "إجراء فرز عالي السرعة" (ملف PDF) . اتصالات رابطة آلات الحوسبة . 2 (7): 30-32 . doi : 10.1145/368370.368387 . S2CID 28572656. مؤرشف من الأصل (ملف PDF) في 30 أغسطس 2017. تم الاسترجاع في 18 أكتوبر 2011 .
- ↑ تُطلق بعض الكتب والمراجع القديمة على هذا النوع من الفرز اسم "فرز شل-ميتزنر" نسبةً إلى مارلين ميتزنر نورتون ، ولكن وفقًا لميتزنر، "لم يكن لي أي علاقة بهذا الفرز، وكان ينبغي ألا يُنسب اسمي إليه أبدًا". انظر "فرز شل" . المعهد الوطني للمعايير والتكنولوجيا . تاريخ الاسترجاع: 17 يوليو 2007 .
- 1 2 3 سيدجويك، روبرت (1998). الخوارزميات في لغة سي . المجلد 1 ( الطبعة الثالثة). أديسون-ويسلي. الصفحات 273-281 . ISBN 978-0-201-31452-6.
- ↑ كيرنيغان، برايان دبليو .؛ ريتشي، دينيس إم. (1996). لغة البرمجة سي ( الطبعة الثانية). برنتيس هول. ص 62. ISBN 978-7-302-02412-5.
- ↑ فرانك، آر إم؛ لازاروس، آر بي (1960). "إجراء فرز عالي السرعة" . اتصالات رابطة آلات الحوسبة . 3 (1): 20-22 . doi : 10.1145/366947.366957 . S2CID 34066017 .
- ↑ هيبارد، توماس ن. (1963). "دراسة تجريبية لفرز التخزين الأدنى" . اتصالات رابطة مكائن الحوسبة . 6 (5): 206-213 . doi : 10.1145/366552.366557 . S2CID 12146844 .
- ↑ بابيرنوف، أ.أ.؛ ستاسيفيتش، ج.ف. (1965). "طريقة لفرز المعلومات في ذاكرة الحاسوب" (ملف PDF) . مشاكل نقل المعلومات . 1 (3): 63-75 .
- ↑ إنسيربي، جانيت؛ سيدجويك، روبرت (1985). "تحسين الحدود العليا لفرز شل" (ملف PDF) . مجلة علوم الحاسوب والنظم . 31 (2): 210-224 . doi : 10.1016/0022-0000(85)90042-x .
- ↑ سيدجويك، روبرت (1986). "حد أعلى جديد لفرز شل". مجلة الخوارزميات . 7 (2): 159-173 . doi : 10.1016/0196-6774(86)90001-5 .
- 1 2 3 4 غونيت، غاستون هـ.؛ بايزا-ياتس، ريكاردو (1991). "فرز شيل". دليل الخوارزميات وهياكل البيانات: في باسكال وسي ( الطبعة الثانية). ريدينغ، ماساتشوستس: أديسون-ويسلي. ص 161-163 . ISBN 978-0-201-41607-7تشير
تجارب واسعة النطاق إلى أن المتتالية المعرفة بالمعادلة α = 0.45454 < 5/11 تتفوق بشكل ملحوظ على المتتاليات الأخرى. وأسهل طريقة لحساب ⌊ 0.45454 n ⌋ هي باستخدام العمليات الحسابية للأعداد الصحيحة.
(5 * n — 1)/11 - ↑ توكودا، ناويوكي (1992). "خوارزمية فرز شل محسّنة". في: فان لوفين، يان (محرر). وقائع المؤتمر العالمي الثاني عشر للحاسوب التابع للاتحاد الدولي لمعالجة المعلومات حول الخوارزميات والبرمجيات والهندسة المعمارية . أمستردام: دار نشر نورث هولاند. الصفحات 449-457 . ISBN 978-0-444-89747-3.
- 1 2 3 سيورا، مارسين (2001). "أفضل الزيادات للحالة المتوسطة لفرز شل" (ملف PDF) . في: فرايوالدز، روسينز (محرر). وقائع الندوة الدولية الثالثة عشرة حول أساسيات نظرية الحوسبة . لندن: سبرينغر-فيرلاغ. الصفحات 106-117 . ISBN 978-3-540-42487-1تمت أرشفة هذا الملف من النسخة الأصلية (PDF) بتاريخ 23 سبتمبر 2018.
- ↑ لي، يينغ واي (21 ديسمبر 2021). "تحسين تجريبي لتسلسل فجوة توكودا في فرز شل". arXiv : 2112.11112 [ cs.DS ].
- ↑ سكين، أوسكار؛ إهرنبورغ، ريتشارد؛ جارومتشيك، جيرزي دبليو. (1 يناير 2023). "وجهات نظر التحسين حول فرز شيل". arXiv : 2301.00316 [ cs.DS ].
- ↑ سيدجويك، روبرت (1998). "Shellsort". الخوارزميات في لغة C++، الأجزاء 1-4: الأساسيات، بنية البيانات، الفرز، البحث . ريدينغ، ماساتشوستس: أديسون-ويسلي. الصفحات 285-292 . ISBN 978-0-201-35088-3.
- ↑ فورشيل، أولوف (22 مايو 2018). "كيفية اختيار أطوال التسلسلات الفرعية لفرز شل؟" . ستاك أوفرفلو . تعليق إضافي على أسرع تسلسل فجوات لفرز الصدفة؟ (23 مايو 2018).
- ↑ لي، يينغ واي (21 ديسمبر 2021). "متواليات الفجوات المثلى في فرز شيل لـ n ≤ 16 عنصرًا". arXiv : 2112.11127 [ math.CO ].
- ↑ غيل، ديفيد ؛ كارب، ريتشارد م. (أبريل 1972). "ظاهرة في نظرية الفرز" (ملف PDF) . مجلة علوم الحاسوب والأنظمة . 6 (2): 103-115 . doi : 10.1016/S0022-0000(72)80016-3 .
- ↑ سيلمر، إرنست س. (مارس 1989). "حول فرز شيل ومسألة فروبينيوس" (ملف PDF) . مجلة BIT للرياضيات العددية . 29 (1): 37-40 . doi : 10.1007/BF01932703 . hdl : 1956/19572 . S2CID 32467267. مؤرشف من النسخة الأصلية (ملف PDF) في 3 مارس 2022.
- ^ فايس، مارك ألين (1989). “حالة جيدة لـ Shellsort”. الكونجرس العددي . 73 : 59 – 62.
- ↑ إسبيليد، تيرجي أو. (ديسمبر 1973). "تحليل خوارزمية فرز شل". مجلة BIT للرياضيات العددية . 13 (4): 394-400 . doi : 10.1007/BF01933401 . S2CID 119443598 . النتيجة المذكورة هي المعادلة (8) في الصفحة 399.
- ↑ ياو، أندرو تشي-تشيه (1980). "تحليل خوارزمية فرز شيل ( h , k , 1)" (ملف PDF) . مجلة الخوارزميات . 1 (1): 14-50 . doi : 10.1016/0196-6774(80)90003-6 . S2CID 3054966. STAN-CS-79-726. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 4 مارس 2019.
- ↑ جانسون، سفانتي ؛ كنوت، دونالد إي. (1997). "فرز شيل بثلاث زيادات" (ملف PDF) . الهياكل العشوائية والخوارزميات . 10 ( 1-2 ): 125-142 . arXiv : cs/9608105 . CiteSeerX 10.1.1.54.9911 . doi : 10.1002/(SICI)1098-2418(199701/03)10:1/2 < 125::AID-RSA6 > 3.0.CO ; 2-X .
- ^ جيانغ ، تاو. لي, مينغ ; فيتاني ، بول (سبتمبر 2000). “الحد الأدنى لمتوسط تعقيد حالة Shellsort” (PDF) . مجلة ACM . 47 (5): 905-911 . أرخايف : CS/9906008 . سيتيسيركس 10.1.1.6.6508 . دوى : 10.1145/355483.355488 . S2CID 3265123 .
- ↑ فيتاني، بول (مارس 2018). "حول تعقيد الحالة المتوسطة لخوارزمية شل سورت" (ملف PDF) . الهياكل والخوارزميات العشوائية . 52 (2): 354-363 . arXiv : 1501.06461 . doi : 10.1002/rsa.20737 . S2CID 6833808 .
- ↑ بلاكستون، سي. جريج؛ بونين، بيورن ؛ سويل، تورستن (24-27 أكتوبر 1992). "تحسين الحدود الدنيا لخوارزمية فرز شيل" (ملف PDF) . وقائع الندوة السنوية الثالثة والثلاثين حول أسس علوم الحاسوب . المجلد 33. بيتسبرغ، الولايات المتحدة. الصفحات 226-235 . CiteSeerX 10.1.1.43.1393 . doi : 10.1109/SFCS.1992.267769 . ISBN 978-0-8186-2900-6. S2CID 15095863 .
{{cite book}}: CS1 maint: موقع الناشر مفقود ( رابط ) - ↑ بلاكستون، سي. جريج؛ سويل، تورستن (مايو 1997). "الحدود الدنيا لفرز شل" (ملف PDF) . مجلة الخوارزميات . 23 (2): 221-240 . CiteSeerX 10.1.1.460.2429 . doi : 10.1006/jagm.1996.0825 .
- ↑ سايفر، روبرت (1993). "حد أدنى لحجم شبكات فرز شل سورت". مجلة SIAM للحوسبة . 22 : 62-71 . doi : 10.1137/0222006 .
- ^ نوفوا، مانويل الثالث. "libc/stdlib/stdlib.c" . تم الاسترجاع 29 أكتوبر 2014 .
- ↑ "kernel/groups.c" . GitHub . تم الاطلاع عليه في 5 مايو 2012 .
- ↑ جوليان سيوارد. "bzip2/blocksort.c" . تم الاطلاع عليه بتاريخ 30 مارس 2011 .
فهرس
- كنوت، دونالد إي. (1997). "طريقة شل". فن برمجة الحاسوب. المجلد 3: الفرز والبحث ( الطبعة الثانية). ريدينغ، ماساتشوستس: أديسون-ويسلي. الصفحات 83-95 . ISBN 978-0-201-89685-5.
- تحليل خوارزمية Shellsort والخوارزميات ذات الصلة ، روبرت سيدجويك، الندوة الأوروبية الرابعة حول الخوارزميات، برشلونة، سبتمبر 1996.
روابط خارجية
- خوارزميات الفرز المتحركة: فرز شل على موقع Wayback Machine (مؤرشف في 10 مارس 2015) - عرض توضيحي رسومي
- رقصة "شلسورت" ذات الفجوات 5، 3، 1 كرقصة شعبية مجرية
- أنواع المقارنة
