示例#1
0
        /// <summary>
        /// Reconstitutes the given tree into a new one (balances it)
        /// </summary>
        /// <param name="OldTree"></param>
        public Company_KDTree(Company_KDTree OldTree)
        {
            List <Company> CompanyList = new List <Company>();

            OldTree.GetAllCompanies(ref CompanyList);
            Company[] CompanyArray = CompanyList.ToArray();

            SplitDimensionIndex = 0;
            if (CompanyArray.Length > 2)
            {
                SortByDimension(ref CompanyArray, SplitDimensionIndex);
                int MedianIndex = CompanyArray.Length / 2;
                SplitPosition = CompanyArray[MedianIndex].Location[SplitDimensionIndex];
                Company[] LowerList = new Company[MedianIndex + 1];
                Company[] UpperList = new Company[CompanyArray.Length - MedianIndex - 1];
                Array.Copy(CompanyArray, 0, LowerList, 0, LowerList.Length);
                Array.Copy(CompanyArray, MedianIndex + 1, UpperList, 0, UpperList.Length);
                LessEqualNode = new Company_KDTree(SplitDimensionIndex, LowerList);
                GreaterNode   = new Company_KDTree(SplitDimensionIndex, UpperList);
            }
            else
            {
                Constituents = CompanyArray;
                isLeafNode   = true;
            }
        }
        /// <summary>
        /// Reconstitutes the given tree into a new one (balances it)
        /// </summary>
        /// <param name="OldTree"></param>
        public Company_KDTree(Company_KDTree OldTree)
        {
            List<Company> CompanyList = new List<Company>();
            OldTree.GetAllCompanies(ref CompanyList);
            Company[] CompanyArray = CompanyList.ToArray();

            SplitDimensionIndex = 0;
            if (CompanyArray.Length > 2)
            {
                SortByDimension(ref CompanyArray, SplitDimensionIndex);
                int MedianIndex = CompanyArray.Length / 2;
                SplitPosition = CompanyArray[MedianIndex].Location[SplitDimensionIndex];
                Company[] LowerList = new Company[MedianIndex + 1];
                Company[] UpperList = new Company[CompanyArray.Length - MedianIndex - 1];
                Array.Copy(CompanyArray, 0, LowerList, 0, LowerList.Length);
                Array.Copy(CompanyArray, MedianIndex + 1, UpperList, 0, UpperList.Length);
                LessEqualNode = new Company_KDTree(SplitDimensionIndex, LowerList);
                GreaterNode = new Company_KDTree(SplitDimensionIndex, UpperList);
            }
            else
            {
                Constituents = CompanyArray;
                isLeafNode = true;
            }
        }
示例#3
0
 public void GetAllCompanies(ref List <Company> AppendList)
 {
     if (isLeafNode)
     {
         for (int i = 0; i < Constituents.Length; i++)
         {
             if (Constituents[i].Money > 0)
             {
                 AppendList.Add(Constituents[i]);
             }
         }
     }
     else
     {
         LessEqualNode.GetAllCompanies(ref AppendList);
         GreaterNode.GetAllCompanies(ref AppendList);
     }
 }