Ejemplo n.º 1
0
        public void UpdateStats(ProgrammingProblem prob, SimilarityResult res)
        {
            int    cnt = prob.NumSol * prob.NumSol;
            double sum = 0.0;

            double max = 0.0;

            for (int i = 0; i < prob.NumSol; i++)
            {
                for (int j = 0; j < prob.NumSol; j++)
                {
                    if (i != j)
                    {
                        if (Double.IsNaN(res.getSimilarity(i, j)) == false)
                        {
                            sum += res.getSimilarity(i, j);
                            max  = Math.Max(max, res.getSimilarity(i, j));
                        }
                    }
                }
            }


            double avg = sum / cnt;

            lblAverage.Text = "Average:" + avg.ToString();
            lblMax.Text     = "Max:" + max.ToString();
        }
Ejemplo n.º 2
0
        public void UpdateStats(ProgrammingProblem prob, SimilarityResult res)
        {
            int    cnt = prob.NumSol * prob.NumSol;
            double sum = 0.0;

            for (int i = 0; i < prob.NumSol; i++)
            {
                for (int j = 0; j < prob.NumSol; j++)
                {
                    sum += res.getSimilarity(i, j);
                }
            }

            double avg = sum / cnt;

            lblAverage.Text = "Average:" + avg.ToString();
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 计算相似度。
        /// </summary>
        public static SimilarityResult SimilarityRate(string str1, string str2)
        {
            var result       = new SimilarityResult();
            var arrChar1     = str1.ToCharArray();
            var arrChar2     = str2.ToCharArray();
            var computeTimes = 0;
            var row          = arrChar1.Length + 1;
            var column       = arrChar2.Length + 1;
            var matrix       = new int[row, column];
            //开始时间
            var beginTime = DateTime.Now;

            //初始化矩阵的第一行和第一列
            for (var i = 0; i < column; i++)
            {
                matrix[0, i] = i;
            }
            for (var i = 0; i < row; i++)
            {
                matrix[i, 0] = i;
            }
            for (var i = 1; i < row; i++)
            {
                for (var j = 1; j < column; j++)
                {
                    var intCost = 0;
                    intCost = arrChar1[i - 1] == arrChar2[j - 1] ? 0 : 1;
                    //关键步骤,计算当前位置值为左边+1、上面+1、左上角+intCost中的最小值
                    //循环遍历到最后_Matrix[_Row - 1, _Column - 1]即为两个字符串的距离
                    matrix[i, j] = Minimum(matrix[i - 1, j] + 1, matrix[i, j - 1] + 1, matrix[i - 1, j - 1] + intCost);
                    computeTimes++;
                }
            }
            //结束时间
            var endTime = DateTime.Now;
            //相似率 移动次数小于最长的字符串长度的20%算同一题
            var intLength = row > column ? row : column;

            //_Result.Rate = (1 - (double)_Matrix[_Row - 1, _Column - 1] / intLength).ToString().Substring(0, 6);
            result.Rate         = (1 - (double)matrix[row - 1, column - 1] / (intLength - 1));
            result.ExeTime      = (endTime - beginTime).TotalMilliseconds;
            result.ComputeTimes = computeTimes.ToString() + " 距离为:" + matrix[row - 1, column - 1].ToString();
            return(result);
        }
Ejemplo n.º 4
0
        private void cmdBatchAnalyze_Click(object sender, EventArgs e)
        {
            int selMetricInd = cmbSelMetric.SelectedIndex;

            if (selMetricInd > -1 && _controller.CurrProblem != null)
            {
                ICodeSimilarityMetricCalculator selMetric = _controller.CSCManager.ListDefinedMetrics[selMetricInd];

                SimilarityResult res = _controller.CSCManager.BatchAnalyze(selMetric, _controller.CurrProblem);

                ctrlResults.setProblemAndResult(_controller.CurrProblem, res);
                ctrlResults.Invalidate();

                UpdateStats(_controller.CurrProblem, res);
            }
            else
            {
                MessageBox.Show("Metric or curr.problem NOT selected !!!");
            }
        }
 public void setProblemAndResult(ProgrammingProblem inProb, SimilarityResult inRes)
 {
     _currProblem = inProb;
     _result      = inRes;
 }