PDA

View Full Version : سوال: توقف اجرای تابع



javad_64
دوشنبه 19 مرداد 1388, 16:48 عصر
من یک برنامه دارم که در یک در خت جستجو می کند تا یک حالت خاص را پیدا کند . که من آن را به صورت یک تابع بازگشتی که خودش را فرا خوانی می کند . پیاده سازی کردم در بعضی حالات (برای یک سری ورودی خاص) برنامه از نظر زمانی کم میاره [میشه گفت برنامه جز مسائل NP هست] حالا من می خوام اجرای این تابع رو اگر در مدت زمان خاصی جواب بدست نیامد متوقف کنم به نظر شما راهی هست؟؟

sa_ghaznavi
دوشنبه 19 مرداد 1388, 17:10 عصر
شاید بتونی یک تایمر بزاری و در او یک متغیر رو چک کنی که اگر تایمر مثلا به 5 ثانیه رسید متغیر رو True کنه و بعد داخل تابع هم بگی که اگر متغیر True شد Return کنه .

javad_64
دوشنبه 19 مرداد 1388, 17:17 عصر
شاید بتونی یک تایمر بزاری و در او یک متغیر رو چک کنی که اگر تایمر مثلا به 5 ثانیه رسید متغیر رو True کنه و بعد داخل تابع هم بگی که اگر متغیر True شد Return کنه .

گفتم که من یک تابع دارم که خودشو فراخوانی میکنه ممکنه برنامه 100 سطح در درخت پائین رفته باشه[یعنی این تابع 100 با ر خودشو فراخوانی کرده] با return فقط یک سطح عقب میاد.

tdkhakpur
دوشنبه 19 مرداد 1388, 17:34 عصر
سلام
در بالای تابع این متغیر را بصورت عمومی تعریف کنید.


bool FastExit = false;

داخل تابع در ابتدا قبل از هر دستوری کد زیر را پیاده سازی کنید.


if( FastExit ) return;

این قسمت را هر کجای تابع که خواستید شرط را برقرار کنید قرار بدید البته با توجه به الگوریتم خودتان FastExit را true کنید.


if( time==5 ) FastExit = true;

Open-Source
دوشنبه 19 مرداد 1388, 17:43 عصر
مشکل از تابع هستش.
یه اشتباه کوچیک تو توابع بازگشتی موجب بوجود اومدن loop میشه.
باید تابعت رو طوری طراحی کنی که همه حالات رو در نظر بگیره.

javad_64
دوشنبه 19 مرداد 1388, 17:53 عصر
مشکل از تابع هستش.
یه اشتباه کوچیک تو توابع بازگشتی موجب بوجود اومدن loop میشه.
باید تابعت رو طوری طراحی کنی که همه حالات رو در نظر بگیره.

تابع کاملا درست داره اجرا میشه فقط در بعضی حالات زمان زیادی باید صرف بشه تا به اولین جواب برسه .تازه اگه بخواهد در loop گیر کنه بعد ارز مدتی stack پر می شود . ولی برنامه منو چند هفته هم بگذاری داره اجرا میشه .

hozouri
دوشنبه 19 مرداد 1388, 17:59 عصر
دوست عزیز برای این کاراز thread استفاده کن اگر بعد از مدت زمان معلومی که مد نظر هست جواب بدست نیومد اون thread رو از بین ببر ... به همین راحتی .....

javad_64
دوشنبه 19 مرداد 1388, 18:09 عصر
دوست عزیز برای این کاراز thread استفاده کن اگر بعد از مدت زمان معلومی که مد نظر هست جواب بدست نیومد اون thread رو از بین ببر ... به همین راحتی .....
میشه نحوه کار با thread هارو بگین؟

hozouri
دوشنبه 19 مرداد 1388, 18:35 عصر
این یه مقاله در باره Thread ها ...

کلیک کنید ... (http://amir87.persiangig.com/document/online%20JAVA%20Thread%20.pdf)