Browse Source

优化计算速度。

tangs 6 years ago
parent
commit
866d020624
3 changed files with 112 additions and 42 deletions
  1. 109 39
      frequency/Form1.cs
  2. BIN
      frequency/build/frequency.exe
  3. 3 3
      frequency/test/test-target.txt

+ 109 - 39
frequency/Form1.cs

@@ -19,6 +19,8 @@ namespace frequency
         public long currentIndex;
         public long totalNum;
         public Dictionary<string, int> finalResult;
+        public Dictionary<string, int> originRecord;
+        public Dictionary<string, int> targetRecord;
 
         public Form1()
         {
@@ -125,25 +127,37 @@ namespace frequency
             // clear target file
             this.CleanTarget();
 
-            // look up
-            Thread runLoopUp = new Thread(Lookup);
-            CallBackDelegate cbd = LoopUpCallBack;
-            runLoopUp.Start(cbd);
+            //foreach (var val in originRecord)
+            //{
+            //    log.D("origin record key: {0} value: {1}", val.Key, val.Value);
+            //}
 
-            log.D("Calculate_Click look up success");
+            //foreach(var val in targetRecord)
+            //{
+            //    log.D("target record key: {0} value: {1}", val.Key, val.Value);
+            //}
 
-            // write data to file
-            //this.progress.Text = "导出数据中...";
-            //this.progress.Refresh();
-            //this.progressStatus = CAL_EXPORT;
+            //foreach( var val in this.originTextsOrder)
+            //{
+            //    log.D("text order key:{0}", val);
+            //}
 
-            //var msg = this.Write2Xlsx(result);
-            //if ("" != msg)
+            //foreach (var val in this.originTextsInverse)
             //{
-            //    log.E("Calculate_Click write data to xlsx error: {0}", msg);
-            //    return 1;
+            //    log.D("text inverse key: {0}", val);
             //}
-            log.D("Calculate_Click write data to xlsx success");
+
+            //foreach(var val in this.targetTexts)
+            //{
+            //    log.D("text target key: {0}", val);
+            //}
+
+            // look up
+            Thread runLoopUp = new Thread(Lookup);
+            CallBackDelegate cbd = LoopUpCallBack;
+            runLoopUp.Start(cbd);
+
+            log.D("Calculate_Click look up success and Calculate_Click write data to xlsx success");
             return 0;
         }
 
@@ -199,6 +213,8 @@ namespace frequency
 
             // check
             int length = 0;
+            originRecord = new Dictionary<string, int>();
+            var appendRecord = new Dictionary<string, bool>();
             for (int i = 0; i < texts.Length; i++)
             {
                 var val = texts[i].Trim();
@@ -206,6 +222,13 @@ namespace frequency
                 {
                     continue;
                 }
+                if (appendRecord.ContainsKey(val))
+                {
+                    originRecord[val] = originRecord[val] + 1;
+                    continue;
+                }
+                originRecord[val] = 1;
+                appendRecord[val] = true;
                 length++;
             }
             log.D("ReadOriginText received check text with length: {0}", length);
@@ -213,6 +236,7 @@ namespace frequency
             // append
             var tempTexts = new string[length];
             int index = 0;
+            appendRecord = new Dictionary<string, bool>();
             for (int i = 0; i < texts.Length; i++)
             {
                 var val = texts[i].Trim();
@@ -220,6 +244,11 @@ namespace frequency
                 {
                     continue;
                 }
+                if (appendRecord.ContainsKey(val))
+                {
+                    continue;
+                }
+                appendRecord[val] = true;
                 tempTexts[index++] = texts[i];
             }
 
@@ -233,6 +262,7 @@ namespace frequency
                     this.originTextsOrder[index++] = tempTexts[i] + "-" + tempTexts[j];
                 }
             }
+
             index = 0;
             this.originTextsInverse = new string[(length * (length - 1)) / 2];
             for (int i = length - 1; i >= 0; i--)
@@ -266,7 +296,7 @@ namespace frequency
                 MessageBox.Show("file is empty");
                 return 1;
             }
-            log.D("ReadTargetText read texts: {0}", texts);
+            log.D("ReadTargetText read texts success with length: {0}", texts.Length);
             // check
             int length = 0;
             for (int i = 0; i < texts.Length; i++)
@@ -305,6 +335,7 @@ namespace frequency
             var originLength = this.targetTexts.Length;
             string[] tempStrings = new string[this.targetTexts.Length];
             var index = 0;
+            targetRecord = new Dictionary<string, int>();
             for (int i = 0; i < this.targetTexts.Length; i++)
             {
 
@@ -318,7 +349,27 @@ namespace frequency
                     continue;
                 }
 
+                val = val.Replace("--", "-");
+                var vals = val.Split('-');
+                if (vals.Length< 2)
+                {
+                    continue;
+                }
+                // if ("" == vals[1].Trim())
+                if ("" == vals[0].Trim() || "" == vals[1].Trim())
+                {
+                    continue;
+                }
+
                 var clearStr = ClearString(val);
+                //clearStr = clearStr.Replace("--", "-");
+                if (targetRecord.ContainsKey(clearStr))
+                {
+                    targetRecord[clearStr] = targetRecord[clearStr] + 1;
+                    continue;
+                }
+
+                targetRecord[clearStr] = 1;
                 tempStrings[index++] = clearStr;
             }
             this.targetTexts = new string[index];
@@ -371,14 +422,12 @@ namespace frequency
                     this.currentIndex++;
                     if (judge(this.originTextsOrder[i], this.targetTexts[j]))
                     {
-                        var key = this.originTextsOrder[i];
-                        if (result.ContainsKey(key))
-                        {
-                            result[key] = result[key] + 1;
-                        }
-                        else
+                        var originStr = this.originTextsOrder[i];
+                        var targetStr = this.targetTexts[j];
+                        var num = getCompareResult(originStr, targetStr);
+                        if (0 != num)
                         {
-                            result[key] = 1;
+                            result[originStr] = num;
                         }
                     }
                 }
@@ -391,14 +440,19 @@ namespace frequency
                     this.currentIndex++;
                     if (judge(this.originTextsInverse[i], this.targetTexts[j]))
                     {
-                        var key = this.originTextsInverse[i];
-                        if (result.ContainsKey(key))
+                        var originStr = this.originTextsInverse[i];
+                        var targetStr = this.targetTexts[j];
+                        var num = getCompareResult(originStr, targetStr);
+                        if (0 != num)
                         {
-                            result[key] = result[key] + 1;
-                        }
-                        else
-                        {
-                            result[key] = 1;
+                            if (result.ContainsKey(originStr))
+                            {
+                                result[originStr] = result[originStr] + num;
+                            }
+                            else
+                            {
+                                result[originStr] = num;
+                            }
                         }
                     }
                 }
@@ -411,6 +465,20 @@ namespace frequency
             return ;
         }
 
+        private int getCompareResult(string origin, string target)
+        {
+            var originStrs = origin.Split(new char[] { '-' }, 2, StringSplitOptions.None);
+            if (originStrs.Length < 2)
+            {
+                return 0;
+            }
+            if (!originRecord.ContainsKey(originStrs[0]) || !originRecord.ContainsKey(originStrs[1]) || !targetRecord.ContainsKey(target))
+            {
+                return 0;
+            }
+            return originRecord[originStrs[0]] * originRecord[originStrs[1]] * targetRecord[target];
+        }
+
         private bool judge(string origin, string target)
         {
             var strs = origin.Split(new char[] { '-' }, 2, StringSplitOptions.None);
@@ -419,20 +487,22 @@ namespace frequency
                 return false;
             }
             var originStr1 = strs[0] + "-" + strs[1];
-            var originStr2 = strs[0] + "--" + strs[1];
-            if (judgeDetail(originStr1, target))
-            {
-                return true;
-            } else if(judgeDetail(originStr2, target))
-            {
-                return true;
-            }
-            return false;
+            //var originStr2 = strs[0] + "--" + strs[1];
+            return judgeDetail(originStr1, target);
+            //if (judgeDetail(originStr1, target))
+            //{
+            //    return true;
+            //}
+            //else if (judgeDetail(originStr2, target))
+            //{
+            //    return true;
+            //}
+            //return false;
         }
 
         /*
          * 解决形如 ea#b-c#d 中查找a#b-c#d,但是返回true的bug
-         */ 
+         */
         private bool judgeDetail(string origin, string target)
         {
             var index = target.IndexOf(origin);

BIN
frequency/build/frequency.exe


+ 3 - 3
frequency/test/test-target.txt

@@ -17,8 +17,8 @@ a#b-c#d
 ea#b-c#d
 a#b-c#de
 ea#b-c#de
--a#b-c#d
+a#b-c#d
+a#b-c#d-
 a#b-c#d-
--a#b-c#d-
--a#b-c#de
+a#b-c#de
 ea#b-c#d-