كيف يحسب على الوجه الأمثل لبيع راندجر الصغير
مقدمة للحساب
يعد العد التنازلي للزراعة غير المقارنات هو خوارزمية للفرز تُستشف عند فرز البخار على نطاق صغير معروف، خلافاً للأصناف القائمة على المقارنة مثل Quicksort أو Mergesort، التي تعتمد على مقارنات عنصري ثنائي، يحدد الكونت سورت الترتيب المصنَّف بحساب تواتر كل قيمة متميزة، ويُنتج عن هذا النهج تعقيدات خطية في ظل ظروف مواتية.
وقد وصفت صحيفة " هارولد ه. سيوارد " لأول مرة في عام 1954 وهي لا تزال تقنية أساسية في علوم الحاسوب، فبساطة هذه الدراسة وكفاءتها تجعلانها مثالية لمهام مثل فرز أعمار الطلاب أو رتبهم أو أي بيانات عن ثديين مع انتشار متواضع، ومن خلال استخدام التخزين المساعد الذي يتناسب مع نطاق القيمة، يتجنب الكونت سورت مقياس أو أو أو أور أون أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أوفد أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أور أوفد أور أور أور أور أور أور أور أور أوفد أور أور أو أي من خلال ذلك.
كيف يحسب أعمال السورت
الآلية الأساسية للحسابات الخاصة هي مباشرة: إنها تُحسب كم مرة تظهر كل قيمة في مجموعة المدخلات، ثم تستخدم ذلك الحساب لحساب الوضع النهائي لكل عنصر، وتتألف العملية من ثلاث مراحل متمايزة:
- Counting:] Create a count array of size k (the range of input values), initialized to zero. Iterate through the input array and increment the count for each value.
- Computing prefixes:] Transform the count array into a prefix sum array, where each element at index i holds the cumulative count of elements less than or equal to i. This step determines the starting positions for each distinct value in the sorted output.
- Placing elements:] Traverse the input array from right to left (for stability), use the count array to find the correct index in the output array, place the element there, and decrement the count. The final output is a sorted copy of the input.
ويعود الخوارزمية إلى صفيفة جديدة مصنَّفة، تاركاً لم يتغير الأصلي، ويوجد بديل يسمى في مكان عدّة Srt]، ولكنه نادراً ما يستخدم لأنه يعرّض الاستقرار أو الكفاءة الفضائية للخطر.
"إكسبول"
Consider sorting the array [4, 2, 8, 3, 1] where values range from 0 to 8.
- Count:] count array size 9 (0-8) ⁇ [0,2,1,0,0,0,0,1]. (Index 1 appears once, index 2 twice, index 3 twice, index 4 once, index 8 once.)
- Prefix sums:] Transform to cumulative ⁇ [0,1,3,5,6,6,7] والآن كل قيمة تخبرنا عن الوضع البادئ لذلك الرقم في الناتج المصنَّف.
- Output:] Traverse original array from end: first element read is 1 ⁇ position = count[1] - 1 = 0[0] = 1، حساب الإلغاء [1] to 0. The next is 3 ⁇ position = count[3] - 1 = 4 ⁇ output[4]=3، العد[3]=4. Continue until all elements placed2, output.
ويدل هذا المثال على كيفية تجنب عدّة (سورت) المقارنات كلياً، بالاعتماد فقط على العمليات الحسابية.
التعقيد الحاسوبي
تعقيد الوقت
- Best, average, and Worst Case:] O(n + k), where n is the number of elements and k is the range of input values. When k is small relative to n, the algorithm runs in linear time.
- Comparison to comparison sorts:] Quicksort and Mergesort have O(n log n) average complexity. For n = 106 and k = 1000, countinging Sort (with 1,001,000 operations) is about 13 times faster than a typical O(n log n).
التعقيد الفضائي
- Primary:] O(k) for the count array, plus O(n) for the output array. This memory overhead can be prohibitive if k is large (e.g., sorting 32-bit integers where k = 232).
- Stable variant:] Requires an auxiliary output array of size n; in-place variants sacrifice stability or use complex index manipulation.
متى تستخدم العد التنازلي
تعدّي (سورت) أكثر فعالية في ظل الظروف التالية:
- وتتألف المدخلات من مُتَجِّرات (أو بيانات يمكن رسمها إلى نطاق صغير من مُتَبَثِّرات البُتِّر، مثل السمات أو الفئات المُتَكَرَّفة).
- ولا يزيد النطاق ك كثيرا عن القاعدة الموحدة للإبهام هي ك × )ن(.
- ولا تُقيَّد الذاكرة بشدة، لأن صفيفة العدّ والحاجز على النواتج يتطلبان حيزاً إضافياً.
- (ه) الاستقرار مطلوب (مثلاً، الفرز بمفاتيح متعددة) - التنفيذ الموحد مستقر عندما توضع العناصر من اليمين إلى اليسار.
وتشمل حالات الاستخدام الممتاز رتب فرز (0 إلى 100)، وأعمار (0 إلى 120)، وفئات المنتجات (حتى بضع مئات من وحدات التصنيع الخاصة)، أو كمنتج فرعي في Radix Sort.
القيود والنظر في المسألة
وعلى الرغم من سرعتها، فإن الكونتسورت لديه عيوب تحد من انطباقها:
- Integer only:] It cannot directly sort floating-point numbers or strings unless they are converted to a contiguous integer set.
- Large range:] If k dwarfs n - for example, sorting 100 numbers with values between 1 and 107 - the count array consume enormous memory while sorting only a few elements.
- Non —adaptive:] counting Sort always requires scanning the entire input and building the count array, even if the data is already sorted or nearly sorted.
- القيم المتكاملة: ] Standard countinging Sort assumes non-negative integers. To handle negatives, you can shift the values by subtracting the minimum (making the range 0 to max - min).
وتعني هذه القيود كون العد التنازلي هو أداة متخصصة، وليس بديلاً عالمياً عن الخوارزميات العامة الغرض.
مقارنة مع الغوريثامات ذات الصلة
عدّة (سورت) ضدّ (راديكس سورت)
(راديكس سورت) يوسع نطاق الفكرة بفرز أرقام من أقلها أهمية إلى أبعد حد، باستخدام نوع مستقر (في كثير من الأحيان العد التنازلي) في كل رقم، وبينما يتطلب عدّة (سورت) تمرير واحد على كامل النطاق (ك)، فإن (راديكس سورت) يقوم بتصاريح متعددة على نطاق رقمي أصغر (مثل القاعدة 256) مما يقلل من استخدام الذاكرة للكعك الكبير، مثلاً، فإن ترتيب رقم 32 ألفاً
عدّة (سورت) ضدّ (باكيت)
ويوزع سمك السوط عناصر على عدد من الدلوات ويصنف كل دلو فردي (في كثير من الأحيان مع نوع الإدخال) ويمكن اعتبار عدّة سُكرة حالة خاصة من سمك البوكيت سورت حيث يطابق كل دلو قيمة واحدة متميزة.
تنفيذ جدول العد التنازلي
الاستقرار مهم عندما يفرز أحد المفاتيح مع الحفاظ على النظام النسبي للعناصر المتساوية من مفتاح آخر، فالمقياس القياسي للحساب الخاص باللون الخفيف مستقر في جوهره عندما تخترق حلقة التنسيب الناتج المدخلات من اليمين إلى اليسار، وهنا مخطط نصي للخيار المستقر:
- صفيفة عدّ مُقارنة كما وصفها.
- تحويل مبلغ إلى مبالغ مسبقة (بيانات لكل قيمة في الناتج المصنَّف).
- - إعادة ترتيب مجموعة المدخلات حسب الترتيب المعاكس، ووضعها في الموقع الذي تشير إليه عدها، ثم فك الارتباط الذي يحسب.
لأننا نعالج العناصر من النهاية، فإن آخر حدث لقيمة معينة يدخل في أعلى مؤشر ممكن، ويحافظ على النظام النسبي، وهذه النسخة المستقرة ضرورية لراديكس سورت لكي يعمل بشكل صحيح على كل رقم.
التطبيقات العملية
- Educational grading systems:] Sorting hundreds of exam scores (range 0-100) in O(n) time.
- Bioinformatics:] Sorting integer read counts or DNA krequencies when the alphabet size is small (A, C, G, T).
- Database index maintenance:] Sorting unique integer identifiers in range small enough to fit in memory.
- Image processing:] Sorting histogram bins or color intensities (0-255) when building look‐up tables.
- Sorting by secondary key:] used inside Radix Sort, which is the workhorse for efficient sorting in many Library and languages (e.g., the.NET runtime uses an adaptive mix of algorithms including countinging Sort for small ranges).
For more on theory and variants, consult authoritative references such as Wikipedia: countinging Sort and GeeksforGeeks: counting Sort]. Practical comparisons with other algorithms can be found in [FL:4
تحقيق أفضل قدر ممكن من العد التنازلي لـ (لاغ راندغ)
وعندما تكون (ك) كبيرة ولكنها كبيرة أيضاً، يصبح العد النقي للسورت كثيفاً للذاكرة، وهناك عدة أشكال تُحدّد على النحو الأمثل:
- Comppressed sparseness:] Use a hash map instead of a contiguous array when the range of used values is large but the number of distinct values is small. This trades constant-time indexing for hashing overhead but reduces memory consumption.
- Hybrid approaches:] Combine countinging Sort with other algorithms. For example, if the range exceeds 106, use Radix Sort with a base that keeps digit ranges small.
- In‐place variants:] Some optimizations reduce extra space to O(k) without an output array, but they generally sacrifice stability or require cycles to location positions.
خاتمة
(ج) إن العد التنازلي [العملية] هو بمثابة خوارزمية ذات كفاءة ملحوظة لفرز المبردات عندما يكون نطاق القيمة صغيراً مقارنة بعدد العناصر، حيث إن طول الوقت الذي تتسم به الشركة من حيث التعقد والأداء الخطي يجعلها لا غنى عنها في سيناريوهات مثل فرز الصفات، ودرجة الارتداد من نوع (Rdix-Sorttines) وتطبيقات ذات مفاتيح متطورة.