نوبة عمل دائرية

في الرياضيات التوافقية ، يُعرف الإزاحة الدائرية بأنها عملية إعادة ترتيب عناصر مجموعة مرتبة ، إما بنقل العنصر الأخير إلى الموضع الأول مع نقل جميع العناصر الأخرى إلى الموضع التالي، أو بإجراء العملية العكسية. تُعد الإزاحة الدائرية نوعًا خاصًا من التبديل الدوري ، والذي بدوره نوع خاص من التبديل . رسميًا، الإزاحة الدائرية هي تبديل σ للعناصر n في المجموعة المرتبة بحيث إما
- modulo n ، لجميع المدخلات i = 1، ...، n
أو
- modulo n ، لجميع المدخلات i = 1، ...، n .
وتسمى نتيجة تطبيق عمليات الإزاحة الدائرية بشكل متكرر على مجموعة معينة أيضًا بالإزاحات الدائرية للمجموعة.
على سبيل المثال، يؤدي تطبيق الإزاحات الدائرية بشكل متكرر على الرباعية ( أ ، ب ، ج ، د ) تباعًا إلى
- ( د ، أ ، ب ، ج )،
- ( ج ، د ، أ ، ب )،
- ( ب ، ج ، د ، أ )،
- ( أ ، ب ، ج ، د ) (الرباعية الأصلية)،
ثم يتكرر التسلسل؛ لذا، يحتوي هذا الرباعي على أربعة تحولات دائرية مميزة. مع ذلك، لا تحتوي جميع الرباعيات المكونة من n عنصرًا على n تحولًا دائريًا مميزًا. على سبيل المثال، يحتوي الرباعي ( a , b , a , b ) على تحولين دائريين مميزين فقط. عدد التحولات الدائرية المميزة للرباعي المكون من n عنصرًا هو، حيث k هو قاسم لـ n ، مما يشير إلى الحد الأقصى لعدد التكرارات على جميع الأنماط الفرعية.
In computer programming, a bitwise rotation, also known as a circular shift, is a bitwise operation that shifts all bits of its operand. Unlike an arithmetic shift, a circular shift does not preserve a number's sign bit or distinguish a floating-point number's exponent from its significand. Unlike a logical shift, the vacant bit positions are not filled in with zeros but are filled in with the bits that are shifted out of the sequence.
Implementing circular shifts
Circular shifts are used often in cryptography in order to permute bit sequences. Unfortunately, many programming languages, including C, do not have operators or standard functions for circular shifting, even though virtually all processors have bitwise operation instructions for it (e.g. Intel x86 has ROL (Rotate Left) and ROR (Rotate Right)). However, some compilers may provide access to the processor instructions by means of intrinsic functions. In addition, some constructs in standard ANSI C code may be optimized by a compiler to the "rotate" assembly language instruction on CPUs that have such an instruction. Most C compilers recognize the following idiom, and compile it to a single 32-bit rotate instruction.[1][2]
/* * Shift operations in C are only defined for shift values which are * not negative and smaller than sizeof(value) * CHAR_BIT. * The mask, used with bitwise-and (&), prevents undefined behaviour * when the shift count is 0 or >= the width of unsigned int. */#include<stdint.h> // for uint32_t, to get 32-bit-wide rotates, regardless of the size of int.#include<limits.h> // for CHAR_BITuint32_trotl32(uint32_tvalue,unsignedintcount){constunsignedintmask=CHAR_BIT*sizeof(value)-1;count&=mask;return(value<<count)|(value>>(-count&mask));}uint32_t rotr32 ( uint32_t value , unsigned int count ) { const unsigned int mask = CHAR_BIT * sizeof ( value ) - 1 ; count &= mask ; return ( value >> count ) | ( value << ( - count & mask )); }تم تطوير هذا التطبيق الآمن والمتوافق مع المترجم بواسطة جون ريغير ، [ 3 ] وتم تحسينه بشكل أكبر بواسطة بيتر كوردس. [ 4 ] [ 5 ]
غالباً ما تُرى نسخة أبسط عندما countيقتصر النطاق على 1 إلى 31 بت:
uint32_t rotl32 ( uint32_t value , unsigned int count ) { return ( value << count ) | ( value >> ( 32 - count )); }هذه النسخة خطيرة لأنها إذا countكانت قيمة المتغير 0 أو 32، فإنها تطلب إزاحة 32 بت، وهو سلوك غير مُعرَّف في معيار لغة C. مع ذلك، فإنها تعمل في الغالب، لأن معظم المعالجات الدقيقة تُنفِّذ الإزاحة value >> 32إما بإزاحة 32 بت (مُنتجةً 0) أو بإزاحة 0 بت (مُنتجةً القيمة الأصلية value)، وكلا الإزاحتين تُنتج النتيجة الصحيحة في هذا التطبيق.
مثال
إذا تعرض تسلسل البتات 0001 0111 لإزاحة دائرية بمقدار موضع بت واحد... (انظر الصور أدناه)
|
|
إذا تم إخضاع تسلسل البتات 1001 0110 للعمليات التالية:
| إزاحة دائرية لليسار بمقدار موضع واحد: | ٠٠١٠ ١١٠١ |
| إزاحة دائرية لليسار بمقدار موضعين: | 0101 1010 |
| إزاحة دائرية لليسار بمقدار 3 مواضع: | 1011 0100 |
| إزاحة دائرية لليسار بمقدار 4 مواضع: | 0110 1001 |
| إزاحة دائرية لليسار بمقدار 5 مواضع: | 1101 0010 |
| إزاحة دائرية لليسار بمقدار 6 مواضع: | 1010 0101 |
| إزاحة دائرية لليسار بمقدار 7 مواضع: | 0100 1011 |
| إزاحة دائرية لليسار بمقدار 8 خانات: | 1001 0110 |
| إزاحة دائرية لليمين بمقدار موضع واحد: | 0100 1011 |
| إزاحة دائرية لليمين بمقدار موضعين: | 1010 0101 |
| إزاحة دائرية لليمين بمقدار 3 مواضع: | 1101 0010 |
| إزاحة دائرية لليمين بمقدار 4 مواضع: | 0110 1001 |
| إزاحة دائرية لليمين بمقدار 5 مواضع: | 1011 0100 |
| إزاحة دائرية لليمين بمقدار 6 مواضع: | 0101 1010 |
| إزاحة دائرية لليمين بمقدار 7 مواضع: | ٠٠١٠ ١١٠١ |
| إزاحة دائرية لليمين بمقدار 8 مواضع: | 1001 0110 |
التطبيقات
تُعدّ الشفرات الدورية نوعًا من شفرات الكتل، وتتميز بخاصية أن الإزاحة الدائرية لكلمة شفرة تُنتج دائمًا كلمة شفرة أخرى. وهذا ما يُبرر التعريف العام التالي: بالنسبة لسلسلة s على الأبجدية Σ ، لنرمز بـ shift ( s ) إلى مجموعة الإزاحات الدائرية لـ s ، وبالنسبة لمجموعة L من السلاسل، لنرمز بـ shift ( L ) إلى مجموعة جميع الإزاحات الدائرية للسلاسل في L. إذا كانت L شفرة دورية، فإن shift ( L ) ⊆ L ؛ وهذا شرط ضروري لكون L لغة دورية . وقد دُرست عملية shift ( L ) في نظرية اللغات الرسمية . على سبيل المثال، إذا كانت L لغة خالية من السياق ، فإن shift ( L ) تكون خالية من السياق أيضًا. [ 6 ] [ 7 ] كذلك، إذا وُصفت L بتعبير منتظم طوله n ، فإنه يوجد تعبير منتظم طوله O ( n³ ) يصف shift ( L ) . [ 8 ]
انظر أيضاً
- ناقل الحركة البرميلي
- الدورة الدموية
- كلمة ليندون
- قلادة - شيء يشبه المجموعة المرتبة ولكن تعتبر الإزاحات الدائرية مكافئة له.
مراجع
- ↑ GCC: "تحسين بنى التدوير الشائعة"
- ↑ يشير قسم "التنظيفات في كود مُجمِّع ROTL/ROTR DAG" إلى أن هذا الكود يدعم تعليمة "التدوير" في CellSPU
- ↑ برنامج Rotate آمن وفعال وقابل للنقل مكتوب بلغة C/C++
- ↑ ستاك أوفر فلو: أفضل الممارسات للتدوير في لغة C/C++
- ↑ دوران شبه ثابت الزمن لا يخالف المعايير
- ↑ T. Oshiba, "Closure property of the family of context-free languages under the cyclic shift operation", Transactions of IECE, 55D :119–122, 1972.
- ↑ AN Maslov, "عملية الإزاحة الدورية للغات"، مشاكل نقل المعلومات 9 : 333-338، 1973.
- ↑ غروبر، هيرمان؛ هولزر، ماركوس (2009). "عمليات اللغة باستخدام التعبيرات النمطية ذات الحجم متعدد الحدود" . علوم الحاسوب النظرية . 410 (35): 3281-3289 . doi : 10.1016/j.tcs.2009.04.009 . Zbl 1176.68105 . .
- الرياضيات الابتدائية
- الحساب الحاسوبي


