PDA

View Full Version : سوال: حلقه های بزرگ



mesoft
شنبه 28 خرداد 1390, 20:56 عصر
با سلام خدمت اساتید
من برنامه ای نوشتم که از دو حلقه تودرتو استفاده می کنه
اگر حد بالای حلقه اول n وحد بالای حلقه دوم m باشه برای
m,n های بزرگ مثلا m=1500 و n=2000 زمان پردازش
خیلی بالا میره(m*n) و خیلی طول میکشه تا بهت جواب بده
آیا الگوریتمی هست که این زمان رو کاهش بده
یا باید بی خیال شم
با تشکر

masoudmok
شنبه 28 خرداد 1390, 23:12 عصر
باید دید کاری که داخل حلقه انجام میدی چی هست . توی طراحی الگوریتم کلاسیک 4 یا 5 روش کلی وجود داره که با استفاده از اونها میشه زمان اجرا رو پایین اورد . مثل تقسیم و حل یا بازگشتی یا ...

Felony
یک شنبه 29 خرداد 1390, 14:30 عصر
بستگی به عملیاتی که دارید انجام میدید داره ، در کل میتونید حلقه رو به Thread های کوچک تری تقسیم کنید و هر Thread وظیفه خودش رو انجام بده و پس از پایان کار نتیجه Thread ها رو Collect کنید .

Farshid007
یک شنبه 29 خرداد 1390, 15:02 عصر
بهترین کار اینه که کد هاتون رو بزارید تا اساتیدی چون اقای مجتبی تاجیک ببینه که تو حلقه چی ها هست
{قصد تهمت ندارم}

mesoft
دوشنبه 30 خرداد 1390, 17:25 عصر
با سلام مجدد
ببخشید که دیر جواب دادم(آخه چند روزی discon بودم :لبخند:)

ببینید من داخل این دوتا حلقه کار اصلی که انجام می دن خواندن پیکسل های
یک عکس هست(به صورت rgb)
m,n هم نشون دهنده اون پیکسلی که باید خوانده بسه این اندازه ای که من
به طور مثال گذاشتم به صورت معمول استفاده می کنم
گاهی اوقات خیلی اندازه هاش بالاتر از این میره

Felony
دوشنبه 30 خرداد 1390, 17:35 عصر
همونطور که گفتم میتونید کارتون رو به بخش های کوچکتر تقسیم کنید و هر بخش رو به یک Thread جداگانه بسپارید تا کار هر بخش همزمان با بخش دیگه انجام بشه و سرعت بالا بره ، میتونید یک معادله تعریف کنید و مثلا طول و عرض عکس رو تقسیم بر 10 کنید ( با این کار عکس به 10 قسمت تقسیم میشه ) و حالا خواندن هر کدوم از این مختصات ها رو به یک Thread بسپارید ( در اینجا 10 تا Thread نیاز دارید ) .

من تخصصی تو #C ندارم و زیاد با توابع گرافیکی در #C کار نکردم شاید دستوری برای خوندن سطری پیکسل ها یا ... داشته باشه ، مثلا در Delphi متدی به نام ScanLine داریم که پیکسل های یک سطر از یک عکس رو یکجا اسکن میکنه و تحویل میده که سرعتش چندین برابره نوشتن این عملیات در یک حلقه تو در تو هست .

hrkhrkhrk
جمعه 07 اسفند 1394, 07:40 صبح
توجه کنید که استفاده از ترد سرعتو بالا نمی بره، بلکه باعث می شه کار به صورت موازی انجام می شه.
ویندوز به هر کدوم از ترد ها یه زمانی می ده و بعد می ره سراغ ترد بعدی تا دو باره به ترد اول برسه. توی این مساله این جوری می شه که به جای این که از پیکسل اول بره پیکسل دوم بعد پیکسل سوم می ره به پیکسل اول قسمت دوم و بعد پیکسل اول قسمت سوم و الا آخر.

بهترین راه استفاده از توابع گرافیکی مثل اسکن لاینه

hamid_hr
شنبه 08 اسفند 1394, 03:30 صبح
شما میتونین از paraller.for استفاده کنین تا سرعت بهتر بشه

Mahmoud.Afrad
شنبه 08 اسفند 1394, 18:12 عصر
http://www.codeproject.com/Tips/240428/Work-with-bitmap-faster-with-Csharp