زمان کنونی: ۰۱ دى ۱۴۰۳, ۰۲:۲۲ ق.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

مرتب سازی ادغامی با مصرف حافظه (O(1

ارسال:
  

hiwaamiri پرسیده:

مرتب سازی ادغامی با مصرف حافظه (O(1

خسته نباشید
همونطور که میدونیم مرتب سازی ادغامی مصرف حافظه ای برابر O(n) داره. واسه مشکل حافظه این الگوریتم الگوریتمی با مصرف حافظه O(1) به نام ادغامی در جا ارائه شده.
میشه لطفا الگوریتم ادغامی درجا رو به زبان سی پیاده کنین و فرقش رو با حالت معمولی توضیح بدین. خیلی ممنون

۰
ارسال:
  

ghasedak پاسخ داده:

RE: مرتب سازی ادغامی با مصرف حافظه O(1)

ابتدا الگوریتم مرتب سازی ادغامی معمولی:
کد:
void  mergesort (int n , keytype S [ ])
     {
            const int  h = Į n/2 ⌡ , m = n – h;
            keytype U [1...h],V [1..m];
            if (n >1)  {
                copy S[1] through  S[h] to U[h];
                copy S [h + 1] through S[h] to V[1] through V[m];
                mergesort(h, U);
                mergesort(m,V);
                merge (h , m , U,V,S);
               }
      }

void  merge ( int h , int m, const keytype U[ ],
                                              const keytype V[ ],  
                                                        keytype  S[ ] )
    {
          index i , j , k;
          i = 1; j = 1 ; k = 1;
          while (i <= h && j <= m) {
               if (U [i] < V [j]) {
                    S [k] = U [i]
                      i+ + ;
}
      else {
           S [k] = V [j];
             j+ +;
        }
        k+ +;
  }
  if ( i > h)
        copy V [j] through V [m] to S [k]  through  S [ h + m ]
  else
        copy U [i] through U [h] to S [k]  through  S [ h + m ]
  }

حالا الگوریتم مرتب سازی ادغامی درجا :

کد:
void mergesort2  (index low, index high)
{
      index mid;
      if  (low  < high)  {
                 mid = Į ( low + high) / 2 ⌡;
               mergesort 2 (low, mid);
               mergesort 2 (mid +1, high);
               merge2(low,mid,high)
           }
      }

void  merge2 (index low, index mid, index high)
  {
     index i, j , k;
     keytype U [ low..high]
     i = low; j = mid +1 ; k = low;
     while ( i <= mid && j <=  high)  {
             if ( S [i]  < S [j] )  {
                  U [k] = S [i];
                  i + + ;
              }
   else  {
           U [k] = S [j]
           j ++;
        }
        k ++;
     }
     if ( i >  mid )
           move S [j]  through S [high] to U [k]  through U [high]
     else
         move S [i]  through S [mid] to U [k]  through U [high]
     move U [low] through U [high] to S [low] through S [high]
}
[/php]

همونطور که ملاحظه می کنید در الگوریتم اول آرایه های U و V همراه با آرایه S استفاده می شوند. اگر U و V پارامترهای متغیر در merge باشند یک کپی دیگر از این آرایه ها هنگام فراخوانی merge ایجاد نخواهد شد. اما با هر بار فراخوانی mergesort آرایه های U و V ایجاد خواهند شد.
در الگوریتم دوم n و S بصورت عمومی تعریف می شوند.


این توضیحات از کتاب نیپولیتان ترجمه جعفرنژاد است
اینم پیاده سازی


مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.

۰
ارسال:
  

yaser_ilam_com پاسخ داده:

مرتب سازی ادغامی با مصرف حافظه O(1)

مرتب سازی درجا نوعی الگوریتم مرتب سازی است که از فضایی بیشتر از آنچه که مورد نیاز نگهداری ورودی است ، استفاده نمی کند .در لینک های زیر الگوریتم اول درجا نیست زیرا از آرایه های U,V بعلاوه آرایه ورودی S استفاده می کند .


کد ها از لینک های زیر به دست میاد :


مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.




مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.

۰
ارسال:
  

mfXpert پاسخ داده:

مرتب سازی ادغامی با مصرف حافظه O(1)

تو کتاب Horowitz توضیح داده.کدش رو هم نوشته

ارسال:
  

yaser_ilam_com پاسخ داده:

RE: مرتب سازی ادغامی با مصرف حافظه O(1)

(۰۱ اردیبهشت ۱۳۹۱ ۰۱:۲۵ ب.ظ)mfXpert نوشته شده توسط:  تو کتاب Horowitz توضیح داده.کدش رو هم نوشته

ترجمه جعفر نژاد هم این موضوع رو پوشش داده . تقریبا ۷-۸ صفحه مرتب سازی ادغامی رو شرح داده .
یافتن تمامی ارسال‌های این کاربر



موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
  پکیج آموزشی طراحی وب + فارسی سازی وردپرس + سئو Happiness.72 ۶ ۶,۹۶۴ ۱۸ بهمن ۱۳۹۹ ۰۱:۱۵ ب.ظ
آخرین ارسال: saqarmoshtaq
  مرتب سازی سریع تصادفی چیست؟ Xzrix ۰ ۱,۶۳۵ ۱۴ آذر ۱۳۹۹ ۰۷:۲۲ ب.ظ
آخرین ارسال: Xzrix
  شبیه سازی مقاله Q-Learning kadoos ۱۶ ۱۷,۷۵۸ ۲۵ آبان ۱۳۹۹ ۰۹:۱۹ ب.ظ
آخرین ارسال: nasim.nasim۱
  کتاب شبیه سازی آمنت omnet++ berkeley ۱ ۴,۲۳۶ ۰۴ اردیبهشت ۱۳۹۹ ۱۲:۳۳ ق.ظ
آخرین ارسال: محمد رستمی
  حافظه نانو Sanazzz ۱ ۱,۹۳۲ ۱۲ اردیبهشت ۱۳۹۸ ۱۲:۲۶ ق.ظ
آخرین ارسال: Sanazzz
  مجموعه آموزش تصویری ابزار شبیه سازی و بررسی پروتکل امنیتی اسکایتر net work ۰ ۲,۶۳۳ ۲۲ فروردین ۱۳۹۸ ۰۳:۲۵ ب.ظ
آخرین ارسال: net work
  برگ برگ سازی Sanazzz ۱ ۲,۱۷۲ ۱۳ فروردین ۱۳۹۸ ۰۸:۱۸ ب.ظ
آخرین ارسال: Sanazzz
  راهنمایی برای انتخاب موضوع قابل پیاده سازی در زمینه بیگ دیتا برای پایان نامه one hacker alone ۱ ۳,۳۱۲ ۱۸ بهمن ۱۳۹۷ ۰۶:۳۶ ب.ظ
آخرین ارسال: Happiness.72
  ابزار شبیه سازی پروتکل های امنیت شبکه - ابزار اسکایتر mavin1200 ۰ ۲,۳۹۱ ۰۱ آذر ۱۳۹۷ ۰۱:۵۰ ق.ظ
آخرین ارسال: mavin1200
  بهینه سازی چند هدفه فازی استوارژنتیک alighasemi ۰ ۲,۱۳۴ ۲۴ آبان ۱۳۹۷ ۰۴:۵۵ ب.ظ
آخرین ارسال: alighasemi

پرش به انجمن:

Can I see some ID?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close