PDA

View Full Version : سوال: کمک از اساتید در رابطه با سبک کردن برنامه



_behnam_
پنج شنبه 26 اسفند 1389, 17:28 عصر
با سلام به دوستان و اساتید

درگیره پروژه ام هستم یه روبات با هوش نسبتا بالا اما به به مشکل برخوردم راه حلی به ذهنم نمیرسه:ناراحت: مطمئن نیستم راه حلی باشه اما گفتم اینجا مطرح کنم شاید اساتید بتونن راهنمایی کنن

اومدم واسه روبات یک دیتابیس اکسس گذاشتم و یه تیبل به نام Patterns
وقتی کاربر به ربات یک جمله رو میده مثلا : Salam khoob chekhabar
خوب روبات اول میاد جمله رو Split میکنه تا کلمات از هم جدا بشن
salam
khoobi
chekhabar
بعد تعداد رکوردهای patterns رو بدست میاره و با حلقه For یکی یکی کلمات رو تو دیتابیس مقایسه میکنه
وقتی جواب Salam رو پیدا کرد khoobi رو جستجو میکنه و بعد Chekhabar
و بعد جواب هارو بهم میجسبونه و به کاربر تحویل میده
کاربر : salam khoobi chekhabar
روبات : salam azizam Mersi salamati
اما وقتی داره کلمات رو با رکورد های دیتابیس مقایسه میکنه تقریبا CPU فول میشه و برنامه واسه چند لحظه هنگ میکنه

اساتید آیا راه بهتری هست واسه اینکاری که من میخوام انجام بدم؟
لطفا راهنمایی کنید

mehrdadnavid
پنج شنبه 26 اسفند 1389, 18:00 عصر
به نظر من اگه برا ی پایگاه داده از sqlite استفاده کنی سرعت بالا و حجم کمتر می شه

knight-rak
پنج شنبه 26 اسفند 1389, 18:23 عصر
من راه حل درستی براش نمیدونم ولی معمولا وقتی سیستم توی پردازش کارش طول میکشه اگر از randomize timer استفاده کنید توی سرعت عمل و جلو گیری از هنگ تا حدودی بسیار کم کمک میکنه

موفق باشید ....

ali190
پنج شنبه 26 اسفند 1389, 18:34 عصر
سلام
شما چرا در هر مرحله برای مقایسه کلمات با هم با استفاده از حلقه میایید کل رکوردها رو چک میکنید؟
شما میتونید به سادگی با استفاده از یک Select Query (که مثلاً با هر کدام از کلمات salam ، chetori و... فیلتر شده است) رکورد های مد نظرتون رو بیابید
در روش شما اگر 1 میلیون رکورد هم داشته باشید باید هر بار هر یک میلیون رکورد رو مقایسه کنید (توسط حلقه)
ولی با این روش فقط رکوردهای مرود نیاز بیرون کشیده میشه
برنامه هم سبک تر میسه
یاعلی

knight-rak
پنج شنبه 26 اسفند 1389, 18:45 عصر
یه کار دیگه هم میشه کرد اونم اینه که کل دیتابیس رو sort کنید بعد یه جستجوی باینری انجام بدین تو بدترین شرایط جستجو به نصف تعداد رکورد ها کم میشه

البته روشی که دوستمون علی گفتن هم خیلی درست تر و منطقی تر هست

موفق باشید ....

_behnam_
پنج شنبه 26 اسفند 1389, 20:02 عصر
سلام
شما چرا در هر مرحله برای مقایسه کلمات با هم با استفاده از حلقه میایید کل رکوردها رو چک میکنید؟
شما میتونید به سادگی با استفاده از یک Select Query (که مثلاً با هر کدام از کلمات salam ، chetori و... فیلتر شده است) رکورد های مد نظرتون رو بیابید
در روش شما اگر 1 میلیون رکورد هم داشته باشید باید هر بار هر یک میلیون رکورد رو مقایسه کنید (توسط حلقه)
ولی با این روش فقط رکوردهای مرود نیاز بیرون کشیده میشه
برنامه هم سبک تر میسه
یاعلی
من واسه این تمام رکورد هارو مقایسه میکنم چون تو برنامه از عبارات منظم استفاده کردم
یعنی واسه کلمه khoobi تو دیتابیس kh[0ou]bi رو قرار دادم که شامل khoobi , kh00bi , khoubi,kho0bi میشه

حالا اگه میشه یه توضیح در مورد روشتون بدید آشنا بشم ممنون میشم حقیقتش با اینی که شما گفتید هیچ آشنایی ندارم

parselearn
جمعه 27 اسفند 1389, 02:26 صبح
با توجه به اينكه از عبارات منظم استفاده كرديد شايد نشه دقيقا واژه معادل رو بدست آورد
البته جستجو كنيد. احتمالا در sql هم عبارات منظم هست

ميتونيد با توجه به حرف اول كمي جستجو را محدودتر كنيد
select p as table_name where p like 'k%'

vbhamed
شنبه 28 اسفند 1389, 10:50 صبح
سلام
اول يا وسط يا آخر حلقه تون از دستور DoEvents استفاده كنيد