hamed jalili
جمعه 02 دی 1390, 03: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 می شود که زمان بسیار بسیار زیادی است !!
راه حلی به نظر دوستان میرسه ؟
دوستان من یک دیتابیس ، ساختار این دیتابیس به صورت زیر است
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 می شود که زمان بسیار بسیار زیادی است !!
راه حلی به نظر دوستان میرسه ؟