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

الگوریتم زمانبندی با مهلت

+1 امتیاز
سلام ,دوستان لطفا الگوریتم زمانبندی با مهلت رو به صورت ساده با ++c بنویسید و کمی توضیح بدین ممنون.
سوال شده اردیبهشت 6, 1393  بوسیله ی daniyaltjm (امتیاز 840)   47 88 103
سلام

اگر الگوریتم رو می دونی سعی کن خودت تمرین تو انجام بدی و اگر به مشکل برخوردی سوال کن !
ُسلام منظورت الگوریتم هایی مربوط به زمان اجرا برنامه ها که سیستم عامل تعیین می کنه هست ؟
اگر آره که خب الگوریتم های این کار خیلی زیادن مثلا ویندوزفکر کنم از feed back queue استفاده می کنه
http://fa.wikipedia.org/wiki/%D8%B5%D9%81_%DA%86%D9%86%D8%AF%D8%B3%D8%B7%D8%AD%DB%8C_%D9%81%DB%8C%D8%AF%D8%A8%DA%A9
Pakniat  بالا رو بخون !!! نوشتم که چیزی نمیدونم اگه میدونستم که سوال نمی کردم عقل کل!
BlueBlade چند ساعت دیگه میام توضیح الگوریتم رو میزارم .
این رو از کتاب مزخرف تحلیل و طراحی الگوریتم ها مهندس جعفر تنها پیام نور !!! گذاشتم:
صفحه 173:
زمانبندی با مهلت
در این مسئله n کار با شماره های از 1 تا n داده شده اند, که زمان اجرای هر کدام یک واحد زمانی می باشد.
di ( اندیس i) مهلت انجام کار i است و اگر این کار در زمان di انجام شود سودی برای pi به آن تعلق میگیرد. فرض می کنیم که مهلت های تعیین شده, اعداد صحیح هستند. هدف, تعیین یک زمانبندی برای انجام این کارهاست به طوریکه سود حاصل از انجام این کارها ماکزیمم باشد. لازم نیست همه کارها زمانبندی شوند. همچنین در این مسئله انجام هر کار بعد از مهلت تعیین شده, ارزشی ندارد.
یک الگوریتم ساده برای اینکار بدین صورت است که , نخست کار با اولویت بالا یعنی کاری که مهلت آن کم است را انجام دهیم, سپس کار با اولویت بالا انجام شود.
لذا,تمام حالات ممکن را با الگوریتم بالا در نظر میگیریم,سپس آنی که سود بیشتری از انجام آن تولید می شود جواب مسئله خواهد بود. در انجام این الگوریتم حتما بعضی از زمانبندی ها نیز با توجه به مهلت آنها امکان پذیر نخواهند بود.
در حالت کلی در نظر گرفتن این زمانبندیها,تابع زمانی از مرتبه فاکتوریل خواهد داشت و این در عمل برای مسائل بزرگتر امکان پذیر نخواهد بود.
حال یم الگوریتم حریصانه برای مسئله زمانبندی با مهلت ارائه می دهیم. یک روش حریصانه برای این مسئله,عبارت از مرتب سازی غیرنزولی کارها براساس بهره آنها و سپس وارسی هر یک از کارها به ترتیب و در صورت امکان, افزودن آن به زمانبندی است.
برای ارائه یک الگوریتم مناسب نخست, تعاریف زیر را ارائه می دهیم:
* ترتیبی که در آن همه کارها به ترتیب در مهلت مقرر خود آغاز شوند, ترتیب امکانپذبر نامیده میشود.
* اگر حداقل یک ترتیب امکان پذیر برای کارهای یک مجموعه موجود باشد آن مجموعه از کارها را , مجموعه امکان پذیر می نامند.
هدف ما یافتن یک ترتیب امکانپذیر با سود کل ماکزیمم است, چنین ترتیبی را ترتیب بهینه و مجموعه کارها در ترتیب را مجموعه بهینه کارها می نامند. برای تعیین یک مجموعه امکان پذیر, در حالت عادی زمان زیادی هدر خواهیم داد (تابع زمانی این کار فاکتوریل می باشد), قضیه زیر یک روش موثر برای تعیین مجموعه امکانپذیر ارائه می دهد.
قضیه 5-8: فرض کنید S مجموعه ای از کارها باشد.در این صورت S امکان پذیر خواهد بود اگر و فقط اگر ترتیب به دست آمده از مرتب شدن کارهای S, بر اساس مهلت های غیر نزولی امکان پذیر باشد.
کسی نبید؟!

2 پاسخ

+1 امتیاز
من متوجه نمی شم ، الگوریتم رو نمی فهمی یا نمی تونی برنامه بنویسی ؟!

یک توضیحی مختصر میدم شاید کمکی بکنه :

در ابتدا  باید یک مجموعه ماکزیمم از فعالیت هایی سازگار ( همپوشانی نداشته باشند ) رو پیدا کنی ؛  بعد باید براساس سود   نزولی مرتب بشه یعنی بیشترین سود pi در خانه ی اول آرایه باشد ؛ بعد اعداد مرتب شده رو بر اساس مهلت تعیین شده در خانه مورد نظر قرار بدی مثلا بعد از مرتب سازی براساس pi ها به صورت نزولی اعداد 20 و 15و 10 و 7 رو داشتی و di اونها 3و1و1و3 بود در آرایه جدید در خانه سوم عدد 20 قرار می گیره در خانه اول 15 و موقعی که بخوای 10 رو درج کنی نباید این اجازه داده بشه چون خونه اول 15 هست و اولویت بر اساس حریصانه با اونه بعد می تونی 7 در سمت چپ 20 درج کنی یعنی خونه دوم و ... ( فرض می کنیم اعداد طبیعی متناطر با اندیس آرایه هستند  برای di)
پاسخ داده شده اردیبهشت 7, 1393 بوسیله ی Pakniat (امتیاز 247)   9 21 32
اینو ندیدی؟!!!
سلام ,دوستان لطفا الگوریتم زمانبندی با مهلت رو به صورت ساده با ++c بنویسید و کمی توضیح بدین ممنون.
0 امتیاز
سلام. الگوریتم زمانبندی با مهلت (Deadline Scheduling Algorithm) یکی از الگوریتم‌های زمانبندی در سیستم‌های عامل است که بر اساس مهلت اجرای پروسه‌ها زمانبندی می‌کند. در این الگوریتم، پروسه‌ای که کمترین مهلت را دارد، اولویت بیشتری برای اجرا دارد.
 
در زیر یک نمونه ساده از این الگوریتم را با استفاده از C++ می‌بینید:
#include<iostream>
#include<algorithm>
using namespace std;

struct Process {
    int id; // Process ID
    int deadline; // Process deadline
    int jobTime; // Job's time that process requires
};

bool comparison(Process a, Process b) {
    return (a.deadline < b.deadline);
}

void scheduleJobs(Process arr[], int n) {
    // Sort all jobs according to decreasing order of their deadlines.
    sort(arr, arr+n, comparison);

    cout << "Order in which processes gets executed \n";
    for (int i=0; i<n; i++)
       cout << arr[i].id << " ";
}

int main() {
    Process arr[] = { {1, 2, 100}, {2, 1, 19}, {3, 2, 27},
                      {4, 1, 25}, {5, 3, 15}};
    int n = sizeof(arr)/sizeof(arr[0]);
    scheduleJobs(arr, n);
    return 0;
}

 

 
در این کد، ابتدا پروسه‌ها بر اساس مهلت‌هایشان مرتب می‌شوند. سپس، پروسه‌ها به ترتیب اجرا می‌شوند. این الگوریتم فرض می‌کند که هر پروسه فقط یک بار اجرا می‌شود و پس از اتمام، دیگر اجرا نمی‌شود.
پاسخ داده شده خرداد 30, 1402 بوسیله ی farshid_siyah (امتیاز 1,463)   3 11 16
...