شلسورت

خطوات فرز الشظايا.
تبديل أزواج العناصر في خطوات متتالية من خوارزمية شلسورت مع وجود فجوات 5، 3، 1

خوارزمية شل للفرز ، والمعروفة أيضًا باسم فرز شل أو طريقة شل ، هي خوارزمية فرز مقارنة في مكانها . يمكن فهمها إما كتعميم للفرز بالتبادل ( فرز الفقاعات ) أو الفرز بالإدراج ( فرز الإدراج ). [ 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.

أ 123456789١٠1112
بيانات الإدخال628318530717958647692528
بعد الفرز 5172818470725838653696295
بعد عملية الفرز الثلاثي170718472825696253838695
بعد الفرز 1071718252847536269838695

تُجري المرحلة الأولى، وهي الفرز الخماسي، فرز الإدراج على خمس مصفوفات فرعية منفصلة ( 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)فجوات خرسانيةتعقيد الوقت في أسوأ الحالاتالمؤلف وسنة النشر
شمال2ك{\displaystyle \left\lfloor {\frac {N}{2^{k}}}\right\rfloor }1،2،...،شمال4،شمال2{\displaystyle 1,2,\ldots ,\left\lfloor {\frac {N}{4}}\right\rfloor ,\left\lfloor {\frac {N}{2}}\right\rfloor }Θ(شمال2){\displaystyle \Theta \left(N^{2}\right)}[مثال: عندما N = 2p ]شل ، 1959 [ 4 ]
2شمال2ك+1+1{\displaystyle 2\left\lfloor {\frac {N}{2^{k+1}}}\right\rfloor +1}1،3،...،2شمال8+1،2شمال4+1{\displaystyle 1,3,\ldots ,\;2\left\lfloor {\frac {N}{8}}\right\rfloor +1,\;\;2\left\lfloor {\frac {N}{4}}\right\rfloor +1}Θ(شمال32){\displaystyle \Theta \left(N^{\frac {3}{2}}\right)}فرانك ولازاروس، 1960 [ 8 ]
A0002252ك-1{\displaystyle 2^{k}-1}1،3،7،15،31،63،...{\displaystyle 1,3,7,15,31,63,\ldots }Θ(شمال32){\displaystyle \Theta \left(N^{\frac {3}{2}}\right)}هيبارد ، 1963 [ 9 ]
A0833182ك+1{\displaystyle 2^{k}+1}، مسبوقة بـ 11،3،5،9،17،33،65،...{\displaystyle 1,3,5,9,17,33,65,\ldots }Θ(شمال32){\displaystyle \Theta \left(N^{\frac {3}{2}}\right)}بابيرنوف وستاسيفيتش، 1965 [ 10 ]
A003586الأعداد المتتالية من الشكل2ص3q{\displaystyle 2^{p}3^{q}}( 3- أعداد سلسة)1،2،3،4،6،8،9،12،...{\displaystyle 1,2,3,4,6,8,9,12,\ldots }Θ(شمالسجل2شمال){\displaystyle \Theta \left(N\log ^{2}N\right)}برات ، 1971 [ 1 ]
A0034623ك-12{\displaystyle {\frac {3^{k}-1}{2}}}، لا يزيد عنشمال3{\displaystyle \left\lceil {\frac {N}{3}}\right\rceil }1،4،13،40،121،...{\displaystyle 1,4,13,40,121,\ldots }Θ(شمال32){\displaystyle \Theta \left(N^{\frac {3}{2}}\right)}كنوت ، 1973، [ 3 ] استنادًا إلى برات ، 1971 [ 1 ]
A036569أناأq،أينأ0=3أq=مين{نشمال:ن(52)q+1،ص:0ص<qالقاسم المشترك الأكبر(أص،ن)=1}أنا={0q<ر|q12(ر2+ر)-ك}ر=2ك+2ك{\displaystyle {\begin{aligned}&\prod \limits _{I}a_{q},{\hbox{where}}\\a_{0}={}&3\\a_{q}={}&\min \left\{n\in \mathbb {N} \colon n\geq \left({\frac {5}{2}}\right)^{q+1},\forall p\colon 0\leq p<q\Rightarrow \gcd(a_{p},n)=1\right\}\\I={}&\left\{0\leq q<r\mid q\neq {\frac {1}{2}}\left(r^{2}+r\right)-k\right\}\\r={}&\left\lfloor {\sqrt {2k+{\sqrt {2k}}}}\right\rfloor \end{aligned}}}1،3،7،21،48،112،...{\displaystyle 1,3,7,21,48,112,\ldots }يا(شمال1+8ln(5/2)ln(شمال)){\displaystyle O\left(N^{1+{\sqrt {\frac {8\ln \left(5/2\right)}{\ln(N)}}}}\right)}إنسيربي وسيدجويك ، 1985، [ 11 ] كنوت [ 3 ]
A0365624ك+32ك-1+1{\displaystyle 4^{k}+3\cdot 2^{k-1}+1}، مسبوقة بـ 11،8،23،77،281،...{\displaystyle 1,8,23,77,281,\ldots }يا(شمال43){\displaystyle O\left(N^{\frac {4}{3}}\right)}سيدجويك، 1982 [ 6 ]
A033622{9(2ك-2ك2)+1ك حتى،82ك-62(ك+1)/2+1ك غريب{\displaystyle {\begin{cases}9\left(2^{k}-2^{\frac {k}{2}}\right)+1&k{\text{ even}},\\8\cdot 2^{k}-6\cdot 2^{(k+1)/2}+1&k{\text{ odd}}\end{cases}}}1،5،19،41،109،...{\displaystyle 1,5,19,41,109,\ldots }يا(شمال43){\displaystyle O\left(N^{\frac {4}{3}}\right)}سيدجويك، 1986 [ 12 ]
حك=الأعلى{5حك-1-111،1}،ح0=شمال{\displaystyle h_{k}=\max \left\{\left\lfloor {\frac {5h_{k-1}-1}{11}}\right\rfloor ,1\right\},h_{0}=N}1،...،5115شمال-111-111،5شمال-111{\displaystyle 1,\ldots ,\left\lfloor {\frac {5}{11}}\left\lfloor {\frac {5N-1}{11}}\right\rfloor -{\frac {1}{11}}\right\rfloor ,\left\lfloor {\frac {5N-1}{11}}\right\rfloor }Θ(شمال2){\displaystyle \Theta \left(N^{2}\right)}[لقيم معينة من N ]جونيت وبايزا ييتس , 1991 [ 13 ]
A10887015(9(94)ك-1-4){\displaystyle \left\lceil {\frac {1}{5}}\left(9\cdot \left({\frac {9}{4}}\right)^{k-1}-4\right)\right\rceil }(أو ما يعادل ذلك،(9/4)ك-1(9/4)-1{\displaystyle \left\lceil {\frac {\left(9/4\right)^{k}-1}{\left(9/4\right)-1}}\right\rceil })1،4،9،20،46،103،...{\displaystyle 1,4,9,20,46,103,\ldots }يا(شمال43){\displaystyle O\left(N^{\frac {4}{3}}\right)}توكودا، 1992 [ 14 ] (خطأ في الاقتباس لكل OEIS)
A102549تقريبًا0.8395312.31842ك{\displaystyle 0.839531\cdot 2.31842^{k}}1،4،10،23،57،132،301،701{\displaystyle 1,4,10,23,57,132,301,701}يا(شمال43){\displaystyle O\left(N^{\frac {4}{3}}\right)}سيورا، 2001 [ 15 ]
A366726γك-1γ-1،γ=2.243609061420001...{\displaystyle \left\lceil {\frac {\gamma ^{k}-1}{\gamma -1}}\right\rceil ,\gamma =2.243609061420001\ldots }1،4،9،20،45،102،230،516،...{\displaystyle 1,4,9,20,45,102,230,516,\ldots }يا(شمال32){\displaystyle O\left(N^{\frac {3}{2}}\right)}لي، 2021 [ 16 ]
4.08168.5714ك2.2449{\displaystyle \left\lfloor 4.0816\cdot 8.5714^{\frac {k}{2.2449}}\right\rfloor }1،4،10،27،72،187،488،...{\displaystyle 1,4,10,27,72,187,488,\ldots }يا(شمال32){\displaystyle O\left(N^{\frac {3}{2}}\right)}سكين، إرينبورغ، يارومشيك، 2023 [ 17 ]

عندما يحتوي التمثيل الثنائي للعدد N على العديد من الأصفار المتتالية، فإن خوارزمية Shellsort باستخدام تسلسل الفجوات الأصلي لـ Shell تُجري Θ( ) مقارنة في أسوأ الحالات. على سبيل المثال، تحدث هذه الحالة عندما يكون 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 زوجية ، وبالتالي تكون Θ( ) على نفس مدخلات الحالة الأسوأ المذكورة سابقًا لفجوات 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، ولكن يمكن توسيع المتتالية بشكل أكبر وفقًا للصيغة التكرارية.حك=2.25حك-1{\displaystyle h_{k}=\lfloor 2.25h_{k-1}\rfloor }.

متتالية توكودا، المحددة بالصيغة البسيطةحك=حك{\displaystyle h_{k}=\lceil h'_{k}\rceil }، أينحك=2.25حك-1+1{\displaystyle h'_{k}=2.25h'_{k-1}+1}،ح1=1{\displaystyle h'_{1}=1}يمكن التوصية به للتطبيقات العملية.

إذا كان الحد الأقصى لحجم المدخلات صغيرًا، كما قد يحدث عند استخدام خوارزمية فرز شل على مصفوفات فرعية صغيرة بواسطة خوارزمية فرز تكرارية أخرى مثل الفرز السريع أو فرز الدمج ، فمن الممكن جدولة تسلسل أمثل لكل حجم مدخلات. [ 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 ]

فيما يتعلق بمتوسط ​​عدد العمليات، لا تتناول أي من النتائج المثبتة تسلسل فجوات عملي. بالنسبة للفجوات التي تمثل قوى العدد اثنين، قام إسبيليد بحساب هذا المتوسط ​​على النحو التالي:0.5349شمالشمال-0.4387شمال-0.097شمال+يا(1){\displaystyle 0.5349N{\sqrt {N}}-0.4387N-0.097{\sqrt {N}}+O(1)}[ 24 ] حدد كنوت متوسط ​​تعقيد فرز مصفوفة مكونة من N عنصرًا مع وجود فجوتين ( h ، 1) على النحو التالي:2شمال2ح+πشمال3ح{\displaystyle {\frac {2N^{2}}{h}}+{\sqrt {\pi N^{3}h}}}[ 3 ] يترتب على ذلك أن خوارزمية فرز شيل ثنائية المرور مع h = Θ( N 1/3 ) تتطلب في المتوسط ​​O ( N 5/3 ) من المقارنات/الانعكاسات/وقت التشغيل. وجد ياو متوسط ​​تعقيد خوارزمية فرز شيل ثلاثية المرور. [ 25 ] وقد حسّن جانسون وكنوث نتيجته : [ 26 ] متوسط ​​عدد المقارنات/الانعكاسات/وقت التشغيل الذي يتم إجراؤه أثناء خوارزمية فرز شيل بثلاث فجوات ( ch , cg , 1)، حيث h و g عددان أوليان فيما بينهما، هوشمال24جح+يا(شمال){\displaystyle {\frac {N^{2}}{4ch}}+O(N)}في المحاولة الأولى،18زπجح(ح-1)شمال3/2+يا(حشمال){\displaystyle {\frac {1}{8g}}{\sqrt {\frac {\pi }{ch}}}(h-1)N^{3/2}+O(hN)}في المرور الثاني وψ(ح،ز)شمال+18πج(ج-1)شمال3/2+يا((ج-1)زح1/2شمال)+يا(ج2ز3ح2){\displaystyle \psi (h,g)N+{\frac {1}{8}}{\sqrt {\frac {\pi }{c}}}(c-1)N^{3/2}+O\left((c-1)gh^{1/2}N\right)+O\left(c^{2}g^{3}h^{2}\right)}في المرور الثالث. ψ ( h , g ) في الصيغة الأخيرة هي دالة معقدة تساوي تقريبًاπح128ز+يا(ز-1/2ح1/2)+يا(زح-1/2){\displaystyle {\sqrt {\frac {\pi h}{128}}}g+O\left(g^{-1/2}h^{1/2}\right)+O\left(gh^{-1/2}\right)}. على وجه الخصوص، عندما يكون 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) وفقًا للصيغة التالية :حك=2.25حك-1{\displaystyle h_{k}=\lfloor 2.25h_{k-1}\rfloor }.

بتطبيق نظرية تعقيد كولموغوروف ، أثبت جيانغ ولي وفيتاني [ 27 ] الحد الأدنى التالي لرتبة متوسط ​​عدد العمليات/زمن التشغيل في خوارزمية فرز شيل ذات p تمريرة: Ω( pN 1+1/ p ) عندما p ≤ log₂N و Ω( pN ) عندما p > log₂N . وبالتالي، فإن خوارزمية فرز شيل لديها إمكانية التشغيل في متوسط ​​زمن ينمو تقاربياً مثل N log N فقط عند استخدام متواليات فجوات ينمو عدد فجواتها بما يتناسب مع لوغاريتم حجم المصفوفة. ومع ذلك، فإنه من غير المعروف ما إذا كانت خوارزمية فرز شيل قادرة على الوصول إلى هذه الرتبة التقاربية لتعقيد الحالة المتوسطة، وهي الرتبة المثلى لفرز المقارنة. وقد حسّن فيتاني [ 28 ] الحد الأدنى لكل عدد من التمريرات    ص{\displaystyle p}ل Ω(شمالك=1صحك-1/حك){\displaystyle \Omega (N\sum _{k=1}^{p}h_{k-1}/h_{k})} أينح0=شمال{\displaystyle h_{0}=N}تشير هذه النتيجة، على سبيل المثال، إلى الحد الأدنى لجيانغ-لي-فيتاني لجميعص{\displaystyle p}يُحسّن هذا الأسلوب الحد الأدنى لتسلسلات الزيادة المُستخدمة. في الواقع، تتطابق جميع الحدود (الدنيا والعليا) المعروفة حاليًا للحالة المتوسطة بدقة مع هذا الحد الأدنى. على سبيل المثال، يُعطي هذا نتيجة جديدة مفادها أن الحد الأعلى لـ Janson-Knuth يتطابق مع الحد الأدنى الناتج لتسلسل الزيادة المُستخدم، مما يُظهر أن استخدام Shellsort بثلاث تمريرات لهذا التسلسل يُحسّن من دقة النتائج.Θ(شمال23/15){\displaystyle \Theta (N^{23/15})}المقارنات/الانعكاسات/وقت التشغيل. تسمح لنا الصيغة بالبحث عن متواليات الزيادة التي تُعطي حدودًا دنيا غير معروفة؛ على سبيل المثال، متوالية زيادة لأربع دورات لها حد أدنى أكبر من Ω(صن1+1/ص)=Ω(ن5/4){\displaystyle \Omega (pn^{1+1/p})=\Omega (n^{5/4})}بالنسبة لتسلسل الزيادة ح1=ن11/16،{\displaystyle h_{1}=n^{11/16},}ح2=ن7/16،{\displaystyle h_{2}=n^{7/16},}ح3=ن3/16،{\displaystyle h_{3}=n^{3/16},}ح4=1{\displaystyle h_{4}=1}يصبح الحد الأدنى تي=Ω(ن(ن1-11/16+ن11/16-7/16+ن7/16-3/16+ن3/16)=Ω(ن1+5/16)=Ω(ن21/16).{\displaystyle T=\Omega (n\cdot (n^{1-11/16}+n^{11/16-7/16}+n^{7/16-3/16}+n^{3/16})=\Omega (n^{1+5/16})=\Omega (n^{21/16}).}

إن تعقيد أسوأ حالة لأي نسخة من خوارزمية Shellsort هو من رتبة أعلى: فقد أظهر بلاكستون وبونين وسويل أنه ينمو على الأقل بنفس سرعةΩ(شمال(سجلشمالسجلسجلشمال)2){\displaystyle \Omega \left(N\left({\log N \over \log \log N}\right)^{2}\right)}[ 29 ] [ 30 ] أثبت روبرت سايفر حدًا أدنى أقوى :Ω(شمال(سجلشمال)2سجلسجلشمال){\displaystyle \Omega \left(N{{(\log N)^{2}} \over {\log \log N}}\right)}متىحs+1>حs{\displaystyle h_{s+1}>h_{s}}للجميعs{\displaystyle s}[ 31 ]

التطبيقات

تُجري خوارزمية Shellsort عمليات أكثر، لكن نسبة أخطاء ذاكرة التخزين المؤقت فيها أعلى من خوارزمية quicksort . مع ذلك، ولأنها تُنفَّذ باستخدام كود قليل ولا تعتمد على مكدس الاستدعاءات ، فإن بعض تطبيقات دالة qsort في مكتبة C القياسية، المُخصصة للأنظمة المُدمجة ، تستخدمها بدلاً من quicksort. على سبيل المثال، تُستخدم Shellsort في مكتبة uClibc . [ 32 ] ولأسباب مماثلة، استُخدمت Shellsort في نواة لينكس سابقًا . [ 33 ]

يمكن أن تُستخدم خوارزمية Shellsort أيضًا كخوارزمية فرعية لخوارزمية الفرز الاستبطاني ، لفرز المصفوفات الفرعية القصيرة ومنع التباطؤ عندما يتجاوز عمق الاستدعاء حدًا معينًا. يُستخدم هذا المبدأ، على سبيل المثال، في ضاغط bzip2 . [ 34 ]

انظر أيضاً

مراجع

  1. 1 2 3 برات، فوغان رونالد (1979). فرز شيل وشبكات الفرز (أطروحات متميزة في علوم الحاسوب) (PDF) . جارلاند. ISBN 978-0-8240-4406-0تمت أرشفة الملف (PDF) من النسخة الأصلية في 7 سبتمبر 2021.
  2. "Shellsort & Comparisons" . مؤرشف من الأصل في 20 ديسمبر 2019. تم الاطلاع عليه في 14 نوفمبر 2015 .
  3. 1 2 3 4 5 كنوت، دونالد إي. (1997). "طريقة شل". فن برمجة الحاسوب. المجلد 3: الفرز والبحث ( الطبعة الثانية). ريدينغ، ماساتشوستس: أديسون-ويسلي. الصفحات 83-95 . ISBN   978-0-201-89685-5.
  4. 1 2 شل، د. ل. (1959). "إجراء فرز عالي السرعة" (ملف PDF) . اتصالات رابطة آلات الحوسبة . 2 (7): 30-32 . doi : 10.1145/368370.368387 . S2CID 28572656. مؤرشف من الأصل (ملف PDF) في 30 أغسطس 2017. تم الاسترجاع في 18 أكتوبر 2011 . 
  5. تُطلق بعض الكتب والمراجع القديمة على هذا النوع من الفرز اسم "فرز شل-ميتزنر" نسبةً إلى مارلين ميتزنر نورتون ، ولكن وفقًا لميتزنر، "لم يكن لي أي علاقة بهذا الفرز، وكان ينبغي ألا يُنسب اسمي إليه أبدًا". انظر "فرز شل" . المعهد الوطني للمعايير والتكنولوجيا . تاريخ الاسترجاع: 17 يوليو 2007 .
  6. 1 2 3 سيدجويك، روبرت (1998). الخوارزميات في لغة سي . المجلد 1 ( الطبعة الثالثة). أديسون-ويسلي. الصفحات 273-281 . ISBN    978-0-201-31452-6.
  7. كيرنيغان، برايان دبليوريتشي، دينيس إم. (1996). لغة البرمجة سي ( الطبعة الثانية). برنتيس هول. ص 62. ISBN   978-7-302-02412-5.
  8. فرانك، آر إم؛ لازاروس، آر بي (1960). "إجراء فرز عالي السرعة" . اتصالات رابطة آلات الحوسبة . 3 (1): 20-22 . doi : 10.1145/366947.366957 . S2CID 34066017 . 
  9. هيبارد، توماس ن. (1963). "دراسة تجريبية لفرز التخزين الأدنى" . اتصالات رابطة مكائن ​​الحوسبة . 6 (5): 206-213 . doi : 10.1145/366552.366557 . S2CID 12146844 . 
  10. بابيرنوف، أ.أ.؛ ستاسيفيتش، ج.ف. (1965). "طريقة لفرز المعلومات في ذاكرة الحاسوب" (ملف PDF) . مشاكل نقل المعلومات . 1 (3): 63-75 .
  11. إنسيربي، جانيت؛ سيدجويك، روبرت (1985). "تحسين الحدود العليا لفرز شل" (ملف PDF) . مجلة علوم الحاسوب والنظم . 31 (2): 210-224 . doi : 10.1016/0022-0000(85)90042-x .
  12. سيدجويك، روبرت (1986). "حد أعلى جديد لفرز شل". مجلة الخوارزميات . 7 (2): 159-173 . doi : 10.1016/0196-6774(86)90001-5 .
  13. 1 2 3 4 غونيت، غاستون هـ.؛ بايزا-ياتس، ريكاردو (1991). "فرز شيل". دليل الخوارزميات وهياكل البيانات: في باسكال وسي ( الطبعة الثانية). ريدينغ، ماساتشوستس: أديسون-ويسلي. ص 161-163 . ISBN   978-0-201-41607-7تشير تجارب واسعة النطاق إلى أن المتتالية المعرفة بالمعادلة α = 0.45454 < 5/11 تتفوق بشكل ملحوظ على المتتاليات الأخرى. وأسهل طريقة لحساب 0.45454 n هي باستخدام العمليات الحسابية للأعداد الصحيحة.(5 * n — 1)/11
  14. توكودا، ناويوكي (1992). "خوارزمية فرز شل محسّنة". في: فان لوفين، يان (محرر). وقائع المؤتمر العالمي الثاني عشر للحاسوب التابع للاتحاد الدولي لمعالجة المعلومات حول الخوارزميات والبرمجيات والهندسة المعمارية . أمستردام: دار نشر نورث هولاند. الصفحات 449-457 . ISBN  978-0-444-89747-3.
  15. 1 2 3 سيورا، مارسين (2001). "أفضل الزيادات للحالة المتوسطة لفرز شل" (ملف PDF) . في: فرايوالدز، روسينز (محرر). وقائع الندوة الدولية الثالثة عشرة حول أساسيات نظرية الحوسبة . لندن: سبرينغر-فيرلاغ. الصفحات 106-117 . ISBN  978-3-540-42487-1تمت أرشفة هذا الملف من النسخة الأصلية (PDF) بتاريخ 23 سبتمبر 2018.
  16. لي، يينغ واي (21 ديسمبر 2021). "تحسين تجريبي لتسلسل فجوة توكودا في فرز شل". arXiv : 2112.11112 [ cs.DS ].
  17. سكين، أوسكار؛ إهرنبورغ، ريتشارد؛ جارومتشيك، جيرزي دبليو. (1 يناير 2023). "وجهات نظر التحسين حول فرز شيل". arXiv : 2301.00316 [ cs.DS ].
  18. سيدجويك، روبرت (1998). "Shellsort". الخوارزميات في لغة C++، الأجزاء 1-4: الأساسيات، بنية البيانات، الفرز، البحث . ريدينغ، ماساتشوستس: أديسون-ويسلي. الصفحات 285-292 . ISBN  978-0-201-35088-3.
  19. فورشيل، أولوف (22 مايو 2018). "كيفية اختيار أطوال التسلسلات الفرعية لفرز شل؟" . ستاك أوفرفلو . تعليق إضافي على أسرع تسلسل فجوات لفرز الصدفة؟ (23 مايو 2018).
  20. لي، يينغ واي (21 ديسمبر 2021). "متواليات الفجوات المثلى في فرز شيل لـ n ≤ 16 عنصرًا". arXiv : 2112.11127 [ math.CO ].
  21. غيل، ديفيد ؛ كارب، ريتشارد م. (أبريل 1972). "ظاهرة في نظرية الفرز" (ملف PDF) . مجلة علوم الحاسوب والأنظمة . 6 (2): 103-115 . doi : 10.1016/S0022-0000(72)80016-3 .
  22. سيلمر، إرنست س. (مارس 1989). "حول فرز شيل ومسألة فروبينيوس" (ملف PDF) . مجلة BIT للرياضيات العددية . 29 (1): 37-40 . doi : 10.1007/BF01932703 . hdl : 1956/19572 . S2CID 32467267. مؤرشف من النسخة الأصلية (ملف PDF) في 3 مارس 2022. 
  23. ^ فايس، مارك ألين (1989). “حالة جيدة لـ Shellsort”. الكونجرس العددي . 73 : 59 – 62.
  24. إسبيليد، تيرجي أو. (ديسمبر 1973). "تحليل خوارزمية فرز شل". مجلة BIT للرياضيات العددية . 13 (4): 394-400 . doi : 10.1007/BF01933401 . S2CID 119443598 .  النتيجة المذكورة هي المعادلة (8) في الصفحة 399.
  25. ياو، أندرو تشي-تشيه (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. 
  26. جانسون، سفانتي ؛ كنوت، دونالد إي. (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 . 
  27. ^ جيانغ ، تاو. لي, مينغ ; فيتاني ، بول (سبتمبر 2000). “الحد الأدنى لمتوسط ​​تعقيد حالة Shellsort” (PDF) . مجلة ACM . 47 (5): 905-911 . أرخايف : CS/9906008 . سيتيسيركس 10.1.1.6.6508 . دوى : 10.1145/355483.355488 . S2CID 3265123 .  
  28. فيتاني، بول (مارس 2018). "حول تعقيد الحالة المتوسطة لخوارزمية شل سورت" (ملف PDF) . الهياكل والخوارزميات العشوائية . 52 (2): 354-363 . arXiv : 1501.06461 . doi : 10.1002/rsa.20737 . S2CID 6833808 . 
  29. بلاكستون، سي. جريج؛ بونين، بيورن ؛ سويل، تورستن (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: موقع الناشر مفقود ( رابط )
  30. بلاكستون، سي. جريج؛ سويل، تورستن (مايو 1997). "الحدود الدنيا لفرز شل" (ملف PDF) . مجلة الخوارزميات . 23 (2): 221-240 . CiteSeerX 10.1.1.460.2429 . doi : 10.1006/jagm.1996.0825 . 
  31. سايفر، روبرت (1993). "حد أدنى لحجم شبكات فرز شل سورت". مجلة SIAM للحوسبة . 22 : 62-71 . doi : 10.1137/0222006 .
  32. ^ نوفوا، مانويل الثالث. "libc/stdlib/stdlib.c" . تم الاسترجاع 29 أكتوبر 2014 .
  33. "kernel/groups.c" . GitHub . تم الاطلاع عليه في 5 مايو 2012 .
  34. جوليان سيوارد. "bzip2/blocksort.c" . تم الاطلاع عليه بتاريخ 30 مارس 2011 .

فهرس