簡易的陣列相似度比較

  • 2272
  • 0

比較陣列的相似度

 

假設一:一維陣列、順序有差、
假設二:數字會變、位置不會變、
假設三:長數列沒試過、效率可能有問題
假設四:兩造雙方、都是已處理過的陣列、目的在一堆陣列中、找出最相似的一個
 
原理:先標出每一數字在另一陣列中的位置、沒出現則為0、
  int[] aa1 = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
  int[] aa2 = new int[13] { 55,66,88, 2, 3, 7, 5, 6, 7, 8, 9, 0,1 };
aa2的位置值為{ 13,4,5, 0, 7, 8, 6, 10,11, 12 }
在找出最長的順序_,4,5,_,7,8,_,10,11,12 所以相似度 7/10 x 100 = 70啪 
 
  	    public static int Compare(int[] source, int[] dest)
            #region >><<
            {
                int rtn = 0;
                int[] aa1 = new int[source.Length];
                int idd = 0;//命中率
                int iff = 0;//失敗率
                for (int ii = 0; ii < source.Length; ii++)
                {
                    aa1[ii] = Compare(source[ii], 0, dest);
                    if (aa1[ii] == ii+1) idd++;
                    else if (aa1[ii] == 0) iff++;
                }
                rtn = (int)(idd / (double)source.Length) * 100;    //出現的順序、
                int iff2 = (int)(iff / (double)source.Length * 100);//沒有出現的數量、
                if (iff2 > 50) rtn = 0;                             //一半的數字沒有出現
                else if (rtn < 80) rtn = Compare(aa1);              //比較數字出現的前後順序
                return rtn;
            }

            private static int Compare(int[] Num)
            #region >>比較產生的順序'利用窮舉法、計算可能性<<
            {
                int rtn = 0;
                int pa1 = 0;
                int totalPa = 0;
                //從頭比到尾中段、
                int ilast = Num.Length - (int)(Num.Length / 4.0);
                for (int ii = 0; ii < ilast; ii++)
                {
                    if (Num[ii] != 0)      //0表示沒出現、不用檢查
                    {//利用窮舉法、計算可能性
                        pa1 = Compare(Num, ii);
                        totalPa += pa1;
                        rtn = rtn > pa1 ? rtn : pa1;
                        if (totalPa >= 99) break;
                    }
                }
                return rtn;
            }
            #endregion

          
            private static int Compare(int[] Num,int idx)
            #region >>比較出現的順序、所以只會有0,1,2,3,4,5,6,7,8,9...<<
            {
                int rtn = 0;
                int inum1 = Num[idx];
                int pa1 = 0;       
                int idx1 = 0;
                for (int ii = idx; ii < Num.Length; ii++)
                {
                    if (inum1 + idx1 == Num[ii])   
                    {
                        pa1++;
                        Num[ii] = 0;
                    }
                    idx1++;
                }
                rtn = (int)(pa1 / (double)Num.Length * 100);
                return rtn;
            }
            #endregion

            
            private static int Compare(int source,int index, int[] dest)
            #region >>數字第一次出現的位置'從1開始<<
            {
                for (int ii = index; ii < dest.Length; ii++)
                {
                    if (dest[ii] == source) return ii+1;
                }
                return 0;
            }
            #endregion
            #endregion

===================

搞了C#

現在來學學維修筆電