تغییر در محاسبات [ ویرایش ]
جایگزینی شماره گذاری [ ویرایش ]
یک روش برای نمایش جایگشتهای n ، یک عدد صحیح N با 0 ≤ N < n ! است ، به شرطی که روشهای مناسبی برای تبدیل بین عدد و نمایش جایگشت به عنوان یک ترتیب (ترتیب) مرتب داده شود. این به منزله جمع و جورترین نمایشی از جایگزینی های دلخواه است ، و در محاسبات به ویژه هنگامی جذابیت دارد که n به اندازه کافی کوچک باشد و بتوان N را در یک کلمه ماشین نگه داشت. این برای کلمات 32 بیتی به معنی n ≤ 12 و برای کلمات 64 بیتی به معنی n ≤ 20 است. تبدیل را می توان از طریق فرم میانی دنباله اعداد d n ، d n -1 انجام داد، ... ، d 2 ، d 1 ، جایی که d i یک عدد صحیح غیر منفی کمتر از i است (یکی ممکن است d 1 را حذف کند ، زیرا همیشه 0 است ، اما وجود آن توصیف تبدیل بعدی به جایگشت را آسان تر می کند) . اولین گام ، بیان ساده N در سیستم اعداد فاکتوریل است که فقط یک نمایش رادیکس مختلط است ، جایی که برای اعداد تا n ! مبنای ارقام متوالی n ، n - 1 ، ... ، 2 ، 1 است. مرحله دوم این توالی را به عنوان یک کد لمر تفسیر می کند یا (تقریباً معادل آن) به عنوان یک جدول وارونگی.
نمودار Rothe برای 
σ i i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | کد لمر |
|---|
| 1 | × | × | × | × | × | • | | | | d 9 = 5 |
|---|
| 2 | × | × | • | | | | | | | d 8 = 2 |
|---|
| 3 | × | × | | × | × | | × | • | | d 7 = 5 |
|---|
| 4 | • | | | | | | | | | d 6 = 0 |
|---|
| 5 | | × | | • | | | | | | d 5 = 1 |
|---|
| 6 | | × | | | × | | × | | • | d 4 = 3 |
|---|
| 7 | | × | | | × | | • | | | d 3 = 2 |
|---|
| 8 | | • | | | | | | | | d 2 = 0 |
|---|
| 9 | | | | | • | | | | | d 1 = 0 |
|---|
| جدول وارونگی | 3 | 6 | 1 | 2 | 4 | 0 | 2 | 0 | 0 | |
|---|
در کد لمر برای جایگشت σ ، عدد d n نشان دهنده انتخابی است که برای ترم اول σ 1 ، عدد d n -1 نشان دهنده انتخابی است که برای ترم دوم σ 2 در بین عناصر n - 1 مجموعه باقی مانده است ، و غیره دقیق تر ، هر d n + 1 + i تعداد عناصر باقی مانده را دقیقاً کمتر از اصطلاح σ i می دهد . از آنجا که آن عناصر باقی مانده به عنوان برخی از اصطلاحات بعدی σ j ، رقم تبدیل می شوندد N + 1- من شمارش معکوس ( من ، J ) که شامل من به عنوان شاخص کوچکتر (تعداد مقادیر J که
< J و σ
> σ J ). جدول برگردان برای σ کاملا مشابه است، اما در اینجا د N + 1- K شمارش تعداد وارونه (
، J ) که در آن K = σ J به عنوان کوچکتر از دو مقدار ظاهر می شود در سفارش معکوس رخ می دهد.[46] هر دو رمزگذاری را می توان با نمودار n by n Rothe [47] (به نام هاینریش آگوست روت نامگذاری کرد) مشاهده کرد که در آن نقاط در ( i ، σ i ) ورودی های جایگشت را نشان می دهند و یک ضربدر در ( i ، σ j ) وارونگی را مشخص می کند ( i ، j ) ؛ با تعریف وارون سازی یک صلیب در هر مربعی ظاهر می شود که هم قبل از نقطه ( j ، σ j ) در ستون آن قرار داشته باشد و هم قبل از نقطه ( i ، σ i) در ردیف آن. کد Lehmer تعداد تلاقی ها را در ردیف های متوالی لیست می کند ، در حالی که جدول وارونگی تعداد صلیب ها را در ستون های متوالی لیست می کند. این فقط کد لمر برای جایگزینی معکوس است و بالعکس.
برای تبدیل م Leثر کد Lehmer d n ، d n -1 ، ...، d 2 ، d 1 به جایگزینی یک مجموعه مرتب S ، می توان با لیستی از عناصر S با ترتیب بیشتر شروع کرد ، و برای i افزایش از 1 تا N مجموعه ای σ من به عنصر در لیست است که توسط قبل د N + 1- من آنهایی که دیگر، و حذف آن عنصر از لیست. برای تبدیل یک جدول وارونگی d n ، d n -1 ، ...، d2 ، d 1 به جایگشت مربوطه ، می توان اعداد را از d 1 تا d n جابجا کرد در حالی که عناصر S را از بزرگترین به کوچکترین در توالی اولیه خالی وارد می کند. در مرحله با استفاده از عدد d از جدول وارونگی ، عنصر از S وارد توالی می شود در نقطه ای که قبل از آن عناصر d وجود دارد. متناوباً می توان اعداد را از جدول وارونگی و عناصر S به ترتیب مخالف پردازش کرد ، با یک ردیف از n شکاف خالی شروع کرد و در هر مرحله عنصر را از S قرار دادبه شکاف خالی که قبل از آن d جای دیگر خالی است ، بروید.
تبدیل اعداد طبیعی متوالی به سیستم اعداد فاکتوریل ، آن توالی ها را به ترتیب فرهنگ لغت تولید می کند (همانطور که در مورد هر سیستم اعداد ترکیبی رادیکس وجود دارد) ، و تبدیل بیشتر آنها به جایگشتی ها ، ترتیب لغت نامه را حفظ می کند ، به شرطی که از تفسیر کد Lehmer استفاده شود (با استفاده از جداول وارون سازی ، یک ترتیب متفاوت بدست می آید ، جایی که فرد با مقایسه جایگزینی ها بر اساس مکان ورودی های آنها شروع می کند 1 به جای ارزش ورودی های اول آنها). مجموع اعداد در نمایش سیستم تعداد فاکتوریل ، تعداد وارون های جایگشت را نشان می دهد و برابری آن جمع ، امضا را می دهد.از جایگشت. علاوه بر این ، موقعیت صفرها در جدول وارونگی مقادیر حداکثر چپ به راست جایگشت را نشان می دهد (در مثال 6 ، 8 ، 9) در حالی که موقعیت صفرها در کد لمر موقعیت های سمت راست است حداقل به سمت چپ (در مثال 4 ، 8 ، 9 از مقادیر 1 ، 2 ، 5 قرار دارد) ؛ این اجازه می دهد تا توزیع چنین موارد اضافی را در میان تمام جایگشت ها محاسبه کند. یک جایگشت با کد Lehmer به د N ، D N -1 ، ...، د 2 ، د 1 است صعود N - من اگر و تنها اگر د من ≥ د i + 1 ام .
الگوریتم های ایجاد جایگشت [ ویرایش ]
در محاسبات ممکن است لازم باشد که تغییراتی از یک توالی مقادیر مشخص ایجاد شود. روش هایی که برای انجام این کار بهتر سازگار است ، به این بستگی دارد که آیا کسی چند جایگزینی را که به طور تصادفی انتخاب شده باشد یا همه جایگشت ها را می خواهد و در صورت دوم اگر نیاز به سفارش خاصی باشد ، بستگی دارد. س Anotherال دیگر این است که آیا تساوی احتمالی مدخل های دنباله داده شده را باید در نظر گرفت. در این صورت ، فقط باید جایگزینی های چند مجموعه ای مشخص از توالی را ایجاد کرد.
یک روش واضح برای تولید جایگزارهای n تولید مقادیر برای کد Lehmer (احتمالاً با استفاده از نمایش عدد فاکتوریل سیستم عدد صحیح تا n !) و تبدیل آن به جایگشت های مربوطه است. با این حال ، مرحله دوم ، گرچه ساده است ، اما به سختی قابل پیاده سازی است ، زیرا به هر عملیات انتخاب از یک دنباله و حذف از آن ، در موقعیت دلخواه نیاز به n دارد. از نمایندگی آشکار از دنباله به عنوان یک آرایه یا یک لیست پیوندی ، هر دو نیاز به (به دلایل مختلف) در مورد N 2 /4 عملیات به انجام تبدیل. با nبه احتمال زیاد نسبتاً کوچک باشد (به خصوص اگر تولید همه جایگشت ها مورد نیاز باشد) که مسئله زیادی نیست ، اما مشخص می شود که هم برای نسل تصادفی و هم برای سیستماتیک گزینه های ساده ای وجود دارد که عملکرد به مراتب بهتری دارند. به همین دلیل استفاده از یک ساختار داده ویژه که امکان انجام تبدیل از کد Lehmer به جایگشت را در زمان O ( n log n ) فراهم می کند ، اگرچه مطمئناً امکان پذیر به نظر نمی رسد .
جایگزینی های ایجاد شده تصادفی [ ویرایش ]
مقاله اصلی: زدن فیشر – یتس
برای ایجاد جایگشتهای تصادفی از یک دنباله معین از مقادیر n ، تفاوتی نمی کند که کسی یک جایگشت تصادفی انتخاب شده از n را برای دنباله اعمال کند ، یا یک عنصر تصادفی را از مجموعه جایگزینهای مجزا (چند مجموعه ای) دنباله انتخاب کند. این بدان دلیل است که ، حتی اگر در صورت مقادیر تکرار شده ، جایگزینهای متمایز زیادی از n وجود داشته باشد که منجر به همان دنباله جایگزین شود ، تعداد چنین جایگشتهایی برای هر نتیجه ممکن یکسان است. بر خلاف نسل سیستماتیک ، که به دلیل رشد عدد n برای n بزرگ غیرقابل اجرا می شود ، هیچ دلیلی وجود ندارد که فرض کنیم n برای نسل تصادفی کوچک باشد.
ایده اصلی برای ایجاد جایگشت تصادفی ، ایجاد تصادفی یکی از n است ! توالی های اعداد صحیح d 1 ، d 2 ، ... ، d n که 0 ≤ d i < i را برآورده می کنند (از آنجا که d 1 همیشه صفر است ممکن است حذف شود) و آن را از طریق مکاتبات ذهنی به جایگشت تبدیل کنید . برای مکاتبات اخیر می توان دنباله (معکوس) را به عنوان یک کد لمر تفسیر کرد ، و این یک روش تولید را برای اولین بار در سال 1938 توسط رونالد فیشر و فرانک یتس منتشر می کند . [48] در حالی که در آن زمان پیاده سازی رایانه مسئله ای نبود ، این روش برای تبدیل م .ثر از کد لمر به جایگشت از مشکل طرح شده در بالا رنج می برد. بعد از استفاده از: این را می توان با استفاده از یک مکاتبات مختلف دوسویی رفع د من برای انتخاب یک عنصر در میان من عناصر دنباله (برای کاهش مقادیر باقی مانده من )، به جای از بین بردن عنصر و تراکم توالی با تغییر کردن عناصر بیشتر یک مکان ، یک مبادلهعنصر با عنصر نهایی باقی مانده. بنابراین عناصر باقی مانده برای انتخاب در هر مقطع زمانی یک محدوده متوالی تشکیل می دهند ، حتی اگر ممکن است به همان ترتیب که در توالی اصلی اتفاق نمی افتد ، رخ دهند. نقشه برداری از توالی اعداد صحیح به جایگشتی ها تا حدودی پیچیده است ، اما می توان مشاهده کرد که هر جایگویی را دقیقاً به یک طریق و با یک القای فوری ایجاد می کند . هنگامی که عنصر انتخاب شده به عنوان عنصر نهایی باقی مانده باشد ، می توان عملیات مبادله را حذف کرد. این امر اغلب به اندازه کافی برای تضمین آزمایش وضعیت اتفاق نمی افتد ، اما عنصر نهایی باید در میان نامزدهای انتخاب گنجانده شود تا تضمین کند که همه جایگشت ها ایجاد می شود.
الگوریتم حاصل برای ایجاد جایگشت تصادفی را می توان به صورت زیر در کد شبه توصیف کرد : a[0], a[1], ..., a[n − 1]
برای i از n به پایین 2 انجام
d i element عنصر تصادفی {0 ، ... ، i - 1}
مبادله a [ d i ] و a [ i - 1]
این را می توان با مقداردهی اولیه آرایه به صورت زیر ترکیب کرد a[i] = i
برای من از 0 تا n -1 انجام
d i +1 element عنصر تصادفی {0 ، ... ، i }
a [ i ] ← a [ d i +1 ]
a [ d i +1 ] ← i
اگر d i +1 = i باشد ، انتساب اول یک مقدار غیر اولیه را کپی می کند ، اما دوم آن را با مقدار صحیح i بازنویسی می کند .
با این حال ، فیشر-ییتس سریعترین الگوریتم برای ایجاد جایگشت نیست ، زیرا فیشر-ییتس اساساً یک الگوریتم متوالی است و رویه های "تقسیم و تسخیر" می توانند به طور موازی به همان نتیجه برسند. [49]
تولید به ترتیب فرهنگ نامه [ ویرایش ]
روشهای زیادی وجود دارد که به طور سیستماتیک تمام جایگشتهای یک توالی معین را تولید می کند. [50] یک الگوریتم کلاسیک ، ساده و انعطاف پذیر مبتنی بر یافتن جایگزینی بعدی در ترتیب فرهنگ لغت است ، در صورت وجود. این می تواند مقادیر تکراری را کنترل کند ، در این صورت هر جایگزینی چند مجموعه ای مشخص را یک بار ایجاد می کند. حتی برای جایگشتهای معمولی نیز نسبت به تولید مقادیر برای کد Lehmer به ترتیب واژه نامه (احتمالاً با استفاده از سیستم تعداد فاکتوریل ) و تبدیل آن به جایگشت ، کارایی به مراتب بیشتری دارد . این کار با مرتب سازی دنباله در (ضعیف) در حال افزایش آغاز می شودمرتبه (که از نظر واژگانی حداقل جایگزینی خود را می دهد) ، و سپس تا زمانی که پیدا شود ، به جایگزینی بعدی پیش می رود. این روش به نارایانا پاندیتا در هند در قرن 14 برمی گردد و به طور مکرر کشف می شود. [51]
الگوریتم زیر جایگزینی بعدی را از لحاظ لغوی پس از جایگویی معین ایجاد می کند. جایگزینی داده شده را در محل تغییر می دهد.
- بزرگترین شاخص k را پیدا کنید به طوری که a [ k ] < a [ k + 1] . اگر چنین شاخصی وجود نداشته باشد ، جایگشت آخرین جایگزینی است.
- بزرگترین شاخص l بزرگتر از k را پیدا کنید به طوری که a [ k ] < a [ l ] .
- تعویض ارزش [ K ] با آن از [ L ].
- معکوس دنباله از [ K + 1] تا و از جمله عنصر نهایی [ N ].
به عنوان مثال ، با توجه به توالی [1 ، 2 ، 3 ، 4] (که به ترتیب بیشتر می شود) و با توجه به صفر بودن شاخص ، مراحل به شرح زیر است:
- صفحه اول K = 2، به دلیل 3 است که در یک شاخص قرار داده شده که ارضا شرط بزرگترین شاخص این است که هنوز کمتر از [ K + 1] است که 4.
- شاخص l = 3 ، زیرا 4 تنها مقدار دنباله ای است که برای تأمین شرط a [ k ] < a [ l ] بزرگتر از 3 است .
- مقادیر a [2] و a [3] عوض می شوند تا توالی جدید ایجاد شود [1،2،4،3].
- توالی بعد از k -index a [2] به عنصر نهایی معکوس می شود. از آنجا که فقط یک مقدار پس از این شاخص نهفته است (3) ، توالی در این نمونه بدون تغییر باقی می ماند. بنابراین جانشین فرهنگ لغت حالت اولیه جایگزین می شود: [1،2،4،3].
به دنبال این الگوریتم ، جایگشت واژه شناسی بعدی [1،3،2،4] و جایگزینی 24 ام خواهد بود [4،3،2،1] که در آن نقطه a [ k ] < a [ k + 1] انجام می دهد وجود ندارد ، نشان می دهد که این آخرین جایگزینی است.
این روش با استفاده از حدود 3 مقایسه و 1.5 مبادله در هر تغییر ، در کل دنباله استهلاک می شود ، بدون احتساب نوع اولیه. [52]
تولید با حداقل تغییرات [ ویرایش ]
مقالات اصلی: الگوریتم Steinhaus – Johnson – Trotter و الگوریتم Heap
یک جایگزین برای الگوریتم فوق ، الگوریتم Steinhaus – Johnson – Trotter ، نظمی را بر روی همه جایگشت های یک توالی معین با ویژگی ایجاد می کند که هر دو تغییر مکان متوالی در خروجی آن با تعویض دو مقدار مجاور متفاوت است. این دستور در مورد جایگشت ها برای زنگوله های انگلیسی قرن 17 شناخته می شد ، که در میان آنها به "تغییرات ساده" معروف بود. یکی از مزایای این روش این است که تغییر اندک از یک جایگزینی به روش دیگر اجازه می دهد تا روش در زمان ثابت در هر جایگزینی پیاده سازی شود. همین امر همچنین می تواند با رد کردن از هر جایگزینی خروجی دیگر ، به راحتی زیرمجموعه های حتی تغییر مکان ها را باز هم در زمان ثابت در هر جایگزینی ایجاد کند. [51]
یک جایگزین به Steinhaus جانسون-تروتر است الگوریتم هیپ ، [53] با گفت رابرت Sedgewick در سال 1977 به سریعترین الگوریتم تولید جایگشت در برنامه های کاربردی. [50]
شکل زیر خروجی هر سه الگوریتم فوق الذکر را برای تولید همه جایگشتهای طول نشان می دهد {\ displaystyle n = 4}
، و شش الگوریتم اضافی که در ادبیات شرح داده شده است.

ترتیب همه جایگشتهای طول
تولید شده توسط الگوریتم های مختلف جایگزینی ها به صورت رنگی تنظیم شده است 1 ، 2 ، 3 ، 4 . [54]
- سفارش واژه نامه نویسی؛
- الگوریتم Steinhaus – Johnson – Trotter .
- الگوریتم Heap ؛
- الگوریتم جابجایی ستاره ای ارلیخ: [51] در هر مرحله ، ورودی اول جایگشت با ورودی بعدی رد و بدل می شود.
- الگوریتم برگشت پیشوند Zaks: [55] در هر مرحله ، پیشوند جایگشت فعلی معکوس می شود تا جایگشت بعدی بدست آید.
- الگوریتم Sawada-Williams: [56] هر تغییر یا تغییر با چرخش قبلی با یک چرخش چپ چرخشی به یک موقعیت ، یا با تبادل دو ورودی اول متفاوت است.
- الگوریتم کوربت: [57] هر تغییر مکان با تغییر چپ چرخشی برخی از پیشوندها با یک موقعیت با قبلی متفاوت است.
- ترتیب تک آهنگ: [58] هر ستون یک تغییر چرخشی از ستون های دیگر است.
- کد خاکستری تک آهنگ: [58] هر ستون یک تغییر چرخشی از ستون های دیگر است ، به علاوه هر دو تغییر مکان متوالی فقط در یک یا دو جابجایی متفاوت است.
جایگزینی های میاندریک [ ویرایش ]
سیستم Meandric منجر به جایگشت meandric ، زیر مجموعه ای خاص از جایگشت های متناوب . جایگزینی جایگزین مجموعه {1 ، 2 ، ... ، 2 n } جایگزینی حلقوی است (بدون هیچ نقطه ثابت) به گونه ای که ارقام در شکل علامت چرخه ای بین اعداد صحیح فرد و زوج متناوب است. جابجایی های میاندریک در تحلیل ساختار ثانویه RNA مفید هستند. همه جایگزین های جایگزین میاندریک نیستند. از یک تغییر الگوریتم Heap برای تولید همه جایگزینهای متناوب سفارش n (یعنی طول 2 n ) بدون تولید همه (2 n ) استفاده شده است! جایگشت ها [59] [ منبع غیر قابل اعتماد؟ ] تولید این جایگزین های جایگزین قبل از آنکه مورد تجزیه و تحلیل قرار گیرد ، مورد نیاز است تا مشخص شود که آیا پیچ و خم هستند یا نه.
الگوریتم بازگشتی است. جدول زیر یک مرحله از مراحل را نشان می دهد. در مرحله قبل ، همه جایگزینی های جایگزین طول 5 ایجاد شده است. سه نسخه از هر یک از اینها "6" به انتهای سمت راست اضافه شده است ، و سپس یک جابجایی متفاوت شامل این آخرین ورودی و یک ورودی قبلی در یک موقعیت زوج اعمال می شود (از جمله هویت ؛ یعنی بدون جابجایی).
| مجموعه های قبلی | جابجایی ارقام | جایگشتهای جایگزین |
|---|
| 1-2-3-4-5-6 | | 1-2-3-4-5-6 |
| 4 ، 6 | 1-2-3-6-5-4 |
| 2 ، 6 | 1-6-3-4-5-2 |
| 1-2-5-4-3-6 | | 1-2-5-4-3-6 |
| 4 ، 6 | 1-2-5-6-3-4 |
| 2 ، 6 | 1-6-5-4-3-2 |
| 1-4-3-2-5-6 | | 1-4-3-2-5-6 |
| 2 ، 6 | 1-4-3-6-5-2 |
| 4 ، 6 | 1-6-3-2-5-4 |
| 1-4-5-2-3-6 | | 1-4-5-2-3-6 |
| 2 ، 6 | 1-4-5-6-3-2 |
| 4 ، 6 | 1-6-5-2-3-4 |
برنامه ها [ ویرایش ]
از جا به جایی ها در م inter لفه interleaver الگوریتم های تشخیص و اصلاح خطا استفاده می شود ، مانند کدهای توربو ، به عنوان مثال استاندارد مخابراتی تلفن همراه 3GPP Long Term Evolution از این ایده ها استفاده می کند (به مشخصات فنی 3GPP 36.212 [60] مراجعه کنید ). چنین کاربردهایی این س theال را مطرح می کند که تولید سریع جایگزینهایی که خاصیتهای مطلوبی را برآورده می کنند ، است. یکی از روش ها براساس چند جمله ای جایگشت است . همچنین به عنوان پایه ای برای هش کردن مطلوب در Unique Permutation Hashing. [61]