نمايش پست تنها
قديمي ۰۹-۹-۱۳۹۲, ۰۸:۵۵ بعد از ظهر   #7 (لینک دائم)
mahdiii
Active users
 
آواتار mahdiii
 
تاريخ عضويت: اسفند ۱۳۸۸
محل سكونت: مشهد
پست ها: 355
تشكرها: 27
167 تشكر در 131 پست
My Mood: Khoshhal
پيش فرض

شما برای این کار با فرض اینکه هر سطر از ماتریستون نشان دهنده یک قانون باشد که مقدار صفر نشان دهنده این است که مقدار آن ویژکی برایتان مهم نیست. خیلی راحت میتونین داده تست (که یک سطر می باشد) را با تک تک سطرها مقایسه کنین. برای اینکه سرعت اجرا بره بالا هرجا دیدید یکی از ویژگیها با یکدیگر متفاوت است برید سراغ سطر بعدی. شما نیاز به حلقه دارین و مجبور هستین ازش استفاده کنین!!!
هرجا قانون با اون داده تست منطبق شد و شماره کلاس پیدا شد دیگر نیازی نیست بقیه قوانین مقایسه شوند. فقط مشکلی که هست این است که برای هر داده تست نیاز است به صورت خطی عمل مقایسه انجام شود که در بدترین حالت برابر با تعداد قوانین * تعداد ویژگیها خواهد بود که مقدار قابل توجهی است.
برای این کار شما میتونین یکبار عمل مرتب سازیو انجام بدین . به این صورت که ابتدا بر اساس مقادیر ویژگی اول قوانین مرتب شوند . سپس بر اساس ویژگی دوم و.... . مثلا مثل زیر:
1 3 4 5 6

1 4 2 3 5

1 4 3 5 5

2 1 3 3 2

و ...
با این کار می تونین از جستجوی دودویی استفاده کنین. به این صورت که ابتدا بر اساس ویژگی اول داده تست به دنبال قوانینی میگردین که با اون منطبق هست. ابتدا از اندیس وسط قوانین شروع میکنین (مثلا 1000 تا قانون دارین از اندیس 500) و ویژگی اولشو با هم مقایسه میکنین بر اساس اون می فهمین باید برین سراغ زیر بازه اول یا دوم . بعد از اینکه اولین و آخرین قانون با این مقدار ویژگی پیدا شد، میرید سراغ ویژگی دوم و همین کارو با این مجموعه قوانین به دست اومده انجام میدید تا بالاخره قانون منطبق شده به دست بیاد.
mahdiii آفلاين است   پاسخ با نقل قول