PDA

View Full Version : روشی بهینه برای جستجوی فیلد های مشابه



hamed jalili
جمعه 02 دی 1390, 02:16 صبح
با سلام

دوستان من یک دیتابیس ، ساختار این دیتابیس به صورت زیر است

1- هر رکورد دارای 28 فیلد ( از نوع رشته ای )
2- هر فیلد از دو بخش تشکیل شده که با یک رشته خاص مثلا **HAMED** از هم جدا شده اند

برنامه ام باید یک رشته را بگیرد و به دنبال رشته های مشابه آن در این دیتابیس بگردد ، رشته مشابه می تواند در هر یکی از 28 فیلد باشد و در داخل هر یک از این 28 فیلد می تواند در بخش اول و یا در بخش دوم باشد

برای این کار من کد زیر را نوشتم ( به صورت خلاصه اینجا نوشته ام )



DamerauLevensteinMetric DLM = new DamerauLevensteinMetric();
List<int> Item_arrays_2_show = new List<int>();

for (int i = 0; i < Database.Rows.Count; i++)
{
for (int j = 0; j <= 28; j++)
{
string[] t = Seperate(Database.Rows[i].ItemArray[j].ToString(), "**HAMED**");

if (DLM.GetDistance(t[0],textbox.Text) < 10 ||
DLM.GetDistance(t[1], textbox.Text) < 10)
Item_arrays_2_show.Add(i);
}
}


پیاده سازی که از آن برای پیدا کردن اختلاف بین دو رشته استفاده کردم ، بهینه است .
ولی با این وجود ، وجود دو حلقه for تو در تو پیچیدگی این روش را نمایی می کند یعنی مثلا اگر 6000 رکورد داشته باشم پیچیدگی این روش O ( 6000 ^ 28 ) x می شود که زمان بسیار بسیار زیادی است !!

راه حلی به نظر دوستان میرسه ؟

debugger
جمعه 02 دی 1390, 11:07 صبح
دوست عزیز شما باید از regular expression استفاده کنید. مقدار 10 تا از رکورد ها را بزار اینجا تا ببینیم. اون وقت میشه راه حل های بهتری ارائه داد . روی مساله هنوز هم برای من گنگ است

hamed jalili
جمعه 02 دی 1390, 11:44 صبح
در تصویر زیر بخشی از چند تا رکورد نمونه رو می توانید ببینید .

http://photoupload.org/uploads/13246293711.jpg


به طور مثال برای جستجو رشته Tony در Textbox وارد میشود و برنامه باید مقادیر Highlight شده را پیدا کنه .
و همان طور که در تصویر مشخص هست ، هر فیلد از دو بخش تشکیل شده که با رشته **HAMED** از هم جدا شده اند .
تصویر بالا فقط 2 فیلد از 28 فیلد هر رکورد نشان داده شده است .