مرتب‌سازی مجاور-نگاشت کیست؟ توضیح بده.
مرتب‌سازی مجاور-نگاشت (به انگلیسی: ProxmapSort) یک نوع الگوریتم مرتب‌سازی است که با دسته‌بندی آرایه ای از داده‌ها یا کلیدها به چند «زیر آرایه» (که در مرتب‌سازی سطلی، سطل نامیده می‌شوند) انجام می‌شود.ریشهٔ نام این الگوریتم از «مجاورت» و «نگاشت» می‌آید. با یک «مجاورت نگاشتی» که برای هر کلید K شروع زیر آرایه (سطل) را نشان می‌دهد به طوری که K در ترتیب مرتب نهایی قرار گیرد. کلیدها با استفاده از روش مشابه در مرتب‌سازی درجی در هر سطل درج می‌شوند.اگر کلیدها بین زیر آرایه‌ها «خوب توزیع شده» باشند، مرتب‌سازی در زمان خطی رخ می‌دهد.می‌توان گفت این الگوریتم ترکیبی از مرتب‌سازی سطلی و مبنایی است.پس از اتمام مرتب‌سازی مجاور-نگاشت، در صورتی که کلیدها خوب توزیع شده باشند، جستجوی مجاور-نگاشت می‌تواند کلید را در formula_1 پیدا کند.این دو الگوریتم در اواخر دهه ۱۹۸۰ توسط پروفسور توماس در دانشگاه کالیفرنیا، ارواین اختراع شد.اساس روش الگوریتم.فرض کنید آرایه A با "n" تا کلید داده شده‌است:توجه: «کلیدها» همچنین ممکن است شامل داده‌های دیگری باشد، به عنوان مثال آرایه ای از اشیاء دانشجویی که شامل کلید به علاوه شناسه و نام دانشجو می‌باشد. این امر باعث می‌شود ProxMapSort برای سازماندهی گروه‌های اشیاء، نه فقط خود کلیدها، مناسب باشد.مثال.یک آرایه کامل را در نظر بگیرید: A ["0" تا "n-1"] با کلید "N." بگذارید "من" یک فهرست از کلیدهای A. طبقه‌بندی A در آرایه A2 با اندازه مساوی باشم.عملکرد کلید نقشه به صورت MapKey (کلید) = طبقه (K) تعریف شده‌است.شبه کد.// compute hit countsfor i = 0 to 11 // where 11 is n H[i] = 0;for i = 0 to 12 // where 12 is A.length pos = MapKey(A[i]); H[pos] = H[pos] + 1;runningTotal = 0; // compute prox map – location of start of each subarrayfor i = 0 to 11 if H[i] = 0 P[i] = -9; else P[i] = runningTotal; runningTotal = runningTotal + H[i];for i = 0 to 12 // compute location – subarray – in A2 into which each item in A is to be placed L[i] = P[MapKey(A[i])];for I = 0 to 12; // sort items A2[I] = &lt;empty&gt;;for i = 0 to 12 // insert each item into subarray beginning at start, preserving order start = L[i]; // subarray for this item begins at this location insertion made = false; for j = start to (! e end of A2 is found, and insertion not made | ) if A2[j] == &lt;empty&gt; // if subarray empty, just put item in first position of subarray A2[j] = A[i]; insertion made = true; else if A[i] &lt; A2[j] // key belongs at A2[j] int end = j + 1; // find end of used part of subarray – where first &lt;empty&gt; is while (A2[end] != &lt;empty&gt;) end++; for k = end -1 to j // move larger keys to the right 1 cell A2[k+1] = A2[k]; A2[j] = A[i]; insertion made = true; // add in new key در اینجا یک آرایه به مرتب است و توابع mapKey تعیین تعداد subarrays استفاده کنید. به عنوان مثال، کف (K) به سادگی به عنوان تعداد زیر قطعه به عنوان تعداد صحیح از داده‌ها در A اختصاص می‌دهد. تقسیم کلید به‌طور ثابت باعث می‌شود تعداد زیردریایی‌ها کاهش یابد. از توابع مختلف می‌توان برای ترجمه طیف وسیعی از عناصر در A به زیرزمینها، از جمله تبدیل حروف A-Z به ۰–۲۵ یا بازگشت شخصیت اول (۰–۲۵۵) برای مرتب‌سازی رشته‌ها استفاده کرد. زیر بخش‌ها به محض ورود داده‌ها طبقه‌بندی می‌شوند، نه بعد از قرار دادن تمام داده‌ها در زیرزمین، همان‌طور که در مرتب‌سازی سطل معمولی است.جستجوی Proxmap.ProxmapSearch از آرایه proxMap تولید شده توسط ProxmapSort که قبلاً انجام شده‌است استفاده می‌کند تا بتواند کلیدها را در آرایه مرتب شده A2 در زمان ثابت پیدا کند.Pseudocode. function mapKey(key) return floor(key) proxMap ← previously generated proxmap array of size n A2 ← previously sorted array of size n function proxmap-search(key) for i = proxMap[mapKey(key)] to length(array)-1 if (sortedArray[i].key == key) return sortedArray[i]تحلیل و بررسی.کارایی.محاسبات H , P و L همه را در نظر می‌گیرد formula_4 زمان. هر یک با یک گذر از یک آرایه محاسبه می‌شود، با زمان ثابت صرف شده در هر مکان آرایه.داشتن یک عملکرد خوب MapKey برای جلوگیری از بدترین حالت ضروری است. ما باید چیزی در مورد توزیع داده‌ها بدانیم تا یک کلید خوب به وجود بیاید.بهینه‌سازی.پیاده‌سازی کد JavaScript: Array.prototype.ProxmapSort = function() var start = 0; var end = this.length; var A2 = new Array(end); var MapKey = new Array(end); var hitCount = new Array(end); var min = this[start]; var max = this[start]; for (var i = start+1; i &lt; end; i++){ //Optimization 1.Save the MapKey[i]. for (var i = start; i &lt; end; i++){ MapKey[i] = Math.floor(((this[i] - min ) / (max - min )) * (end - 1)); hitCount[MapKey[i]]++; //Optimization 2.ProxMaps store in the hitCount. hitCount[end-1] = end - hitCount[end-1]; for (var i = end-1; i &gt; start; i--){ hitCount[i-1] = hitCount[i] - hitCount[i-1]; //insert A[i]=this[i] to A2 correct position var insertIndex = 0; var insertStart = 0; for (var i = start; i &lt; end; i++){ insertIndex = hitCount[MapKey[i]]; insertStart = insertIndex; while(insertIndex &gt; insertStart &amp;&amp; this[i] &lt; A2[insertIndex-1]){ A2[insertIndex] = A2[insertIndex-1]; insertIndex--; A2[insertIndex] = this[i];مقایسه با الگوریتم‌های مرتب‌سازی دیگر.از آنجا که ProxmapSort یک نوع مقایسه نیست، محدودیت پایین Ω ("n" log "n") غیرقابل استفاده است. سرعت آن را می‌توان به این که نمی مبتنی بر مقایسه و با استفاده از آرایه به جای اشیاء پویا اختصاص داده و اشاره گر است که باید دنبال شود، مانند این است که با زمانی که با استفاده از یک انجام منسوب درخت جستجوی دودویی.ProxmapSort امکان استفاده از ProxmapSearch را فراهم می‌کند. علی‌رغم زمان ساخت O (n)، ProxMapSearch با این کار می‌کند formula_1 زمان دسترسی متوسط، و آن را برای بانکهای اطلاعاتی بزرگ بسیار جذاب می‌کند. اگر نیازی به به روزرسانی داده‌ها نباشد، زمان دسترسی ممکن است این عملکرد را نسبت به سایر انواع مبتنی بر مرتب‌سازی غیر مقایسه مقایسه کند.نوع سطل عمومی مربوط به مرتب‌سازی پروکس-مپ.مانند ProxmapSort، سطل مرتب کردن بر اساس به‌طور کلی در یک لیست از "n" ورودی عددی بین صفر و برخی از کلید حداکثر یا ارزش "M" و تقسیم وسیعی ارزش به "n" سطل هر یک از اندازه "M" / "N" عمل می‌کند. اگر هر سطل با استفاده از مرتب‌سازی درج طبقه بندی شده باشد، ProxmapSort و مرتب‌سازی سطل می‌توانند در زمان خطی پیش‌بینی شده اجرا شوند. ] با این حال، عملکرد این نوع تنزل با خوشه (یا بیش از حد چند سطل با بیش از حد بسیاری از کلیدهای)؛ اگر بسیاری از مقادیر در نزدیکی اتفاق بیفتد، همه در یک سطل واحد قرار می‌گیرند و عملکرد به شدت کاهش می‌یابد. این رفتار همچنین برای ProxmapSort حائز اهمیت است: اگر سطل‌ها خیلی بزرگ باشند، عملکرد آن به شدت کاهش می‌یابد.