Example #1
0
        /// <summary>
        /// 递归寻找方法
        /// </summary>
        /// <param name="inputNode">输入的节点</param>
        /// <param name="inputValue">输入的值</param>
        /// <returns>找到的值若为Null则未找到</returns>
        private KDTreeNode searchRecursion(KDTreeNode inputNode, IDimensionValueBean inputValue)
        {
            if (null == inputNode)
            {
                return(null);
            }
            //若两节点相同
            else if
            (UtilityMethod.IfDDimensionIsEqula
                 (inputNode.ThisDataValue, inputValue, ifUseRecursionCheck))
            {
                //若节点已删除
                if (inputNode.IsDeleteTag)
                {
                    return(null);
                }
                else
                {
                    return(inputNode);
                }
            }
            else
            {
                //获取维度索引
                int dimensionIndex = inputNode.NowDimisionIndex;
                //获取多维数据封装
                IDimensionValueBean nodeValue = inputNode.ThisDataValue;
                //获得当前节点维度的值
                double tempDimensionValue = nodeValue.GetValueAtDimensionIndex(dimensionIndex);
                //获得输入数值在节点维度的值
                double tempInputValue = inputValue.GetValueAtDimensionIndex(dimensionIndex);

                //比较两值
                CompareResultEnum compareResult = UtilityMethod.CompareDoulbe(tempInputValue, tempDimensionValue);
                //比较结果调整
                compareResult = equalStrategy(compareResult);

                //次轮迭代使用的节点
                KDTreeNode nextRoundNode = null;

                //若小于去左节点
                if (compareResult == CompareResultEnum.Less)
                {
                    nextRoundNode = inputNode.LeftChild;
                }
                //其它去右节点
                else
                {
                    nextRoundNode = inputNode.RightChild;
                }
                //递归执行
                return(searchRecursion(nextRoundNode, inputValue));
            }
        }
Example #2
0
        /// <summary>
        /// 相等策略调整
        /// </summary>
        /// <param name="inputResult">输入的比较结果</param>
        /// <returns>调整后的结果</returns>
        private CompareResultEnum equalStrategy(CompareResultEnum inputResult)
        {
            if (CompareResultEnum.Equal != inputResult)
            {
                return(inputResult);
            }

            //相等视为小于
            if (true == ifValueEqualAsLess)
            {
                return(CompareResultEnum.Less);
            }
            //相等视为大于
            else
            {
                return(CompareResultEnum.Large);
            }
        }
Example #3
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="isNormal"></param>
 public CompareResult(CompareResultEnum cre)
 {
     this.CompareResultEnum = cre;
 }