예제 #1
0
파일: Form1.cs 프로젝트: dantedoyl/BCIT
        public static List <ParallelSearchResult> ArrayThreadTask(object paramObj)
        {
            ParallelSearchThreadParam param = (ParallelSearchThreadParam)paramObj;
            //Слово для поиска в верхнем регистре
            string wordUpper = param.wordPattern.Trim().ToUpper();
            //Результаты поиска в одном потоке
            List <ParallelSearchResult> Result = new List <ParallelSearchResult>();

            //Перебор всех слов во временном списке данного потока
            foreach (string str in param.tempList)
            {
                //Вычисление расстояния Дамерау-Левенштейна
                int dist = Levenstain.Distance(str.ToUpper(), wordUpper);
                //Если расстояние меньше порогового, то слово добавляется в результат
                if (dist <= param.maxDist)
                {
                    ParallelSearchResult temp = new ParallelSearchResult()
                    {
                        word      = str,
                        dist      = dist,
                        ThreadNum = param.ThreadNum
                    };
                    Result.Add(temp);
                }
            }
            return(Result);
        }
예제 #2
0
파일: Form1.cs 프로젝트: voevoooda/Labi
        private void ButtonFind_Click(object sender, EventArgs e)
        {
            int maxDistance;

            if (!int.TryParse(textBoxLength.Text.Trim(), out maxDistance))
            {
                MessageBox.Show("Неккоректные данные");
            }
            else
            {
                var time = new Stopwatch();
                time.Start();
                foreach (var item in WordList)
                {
                    if (Levenstain.Distance(item.ToLower(), textBox2.Text.ToLower()) < maxDistance)
                    {
                        listBox.BeginUpdate();
                        listBox.Items.Add(item);
                        listBox.EndUpdate();
                    }
                }
                time.Stop();

                var result = time.Elapsed.TotalMilliseconds;
                labelFind.Text = result.ToString();
            }
        }
예제 #3
0
파일: Form1.cs 프로젝트: dantedoyl/BCIT
        private void ButtonSearch_Click(object sender, EventArgs e)
        {
            string word = textBoxSearch.Text.Trim();

            if (!string.IsNullOrWhiteSpace(word) && lst.Count > 0)
            {
                word = word.ToUpper();
                List <string> res = new List <string>();
                int           maxdst;
                if (!int.TryParse(this.textBoxDist.Text.Trim(), out maxdst))
                {
                    MessageBox.Show("Введены неверные данные.");
                }
                else
                {
                    Stopwatch t = new Stopwatch();
                    t.Start();
                    foreach (string wrd in lst)
                    {
                        int dst = Levenstain.Distance(wrd.ToUpper(), word);
                        if (dst <= maxdst)
                        {
                            res.Add(wrd);
                        }
                    }
                    t.Stop();
                    this.textBoxTimeSearch.Text = t.Elapsed.ToString();
                    this.listBoxResult.BeginUpdate();
                    this.listBoxResult.Items.Clear();

                    foreach (string wrd in res)
                    {
                        this.listBoxResult.Items.Add(wrd);
                    }
                    this.listBoxResult.EndUpdate();
                }
            }
            else
            {
                MessageBox.Show("Необходимо выбрать файл и ввести слово для поиска");
            }
        }