پیدا کردن ماکزیمم نسبی در ماتریس - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

پیدا کردن ماکزیمم نسبی در ماتریس

0 امتیاز

من برای پیدا کردن ماکزیمم نسبی داخل یک آرایه ۱ بعدی این کد رو نوشتم درست هم کار می کنه

( ماکزیمم نسبی توی آرایه مثلا   16354  میشه 5  )

int  findPeak(const int f,const int e,const vector<long long>& a)
{
    unsigned int mid = (f+e)/2;
    //  cout<<f<<"  "<<e<<"\n";
    if(f==e)
    {
        return f;
    }
    if(a[mid-1] > a[mid])
    {
        findPeak(f,mid-1,a);
    }
    else if(a[mid+1]>a[mid])
    {
        findPeak(mid+1,e,a);
    }
    else
    {
        return mid;
    }

}

این الگوریتمی که نوشتم از مرتبه nlogn هستش می خواستم بدونم میشه کاری کرد که با تغییر همین الگوریتم تمام نقاط ماکزیمم نسبی رو بدس آورد ؟

برای مثال 16354  --> ۶ ۵

و این که اگر بخوام این الگوریتم رو برای آرایه ۲ بعدی بنویسم چه کاری باید انجام بدم ؟

ممنون .

سوال شده فروردین 4, 1393  بوسیله ی نخل (امتیاز 9)   1 1 1

1 پاسخ

0 امتیاز

برای بدست آوردن ماکزیمم نسبی داخل ماتریس :

۱ـ یکی از ستون های ماتریس رو انتخاب کن ( ستون وسط مثلا )

۲ـ‌ ماکزیمم مطلق داخل اون ستون رو پیدا کن .

۳ـ

اگر مقدار بدست آمده از همسایه سمت چپ کمتر بود

      مرحله ۱ رو برای نیمه سمت چپ ماتریس تکرار کن

در غیر این صورت اگر مقدار بدست آمده از همسایه سمت راست کمتر بود

      مرحله ۱ رو برای نیمه سمت راست تکرار کن

اگر هم مقدار از هر ۲ همسایه بزگتر بود

     اون خونه از ماتریس مقدار مورد نظر یا ماکزیمم نسبی هستش .


با استفاده از این اگوریتمی که گفتم θ تابع nlogm میشه که n تعداد سطر ها و m تعداد ستون هاست .

پاسخ داده شده فروردین 4, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
...