/// <summary> /// 更改节点值 /// </summary> /// <param name="index"></param> /// <param name="weight"></param> public void Change(int index, T val) { MyLineTreeNode <T> parent = Root; //通过循环找到索引所在的节点 do { int mid = (parent.StartIndex + parent.EndIndex) / 2; if (index <= mid) { parent = parent.Left; } else { parent = parent.Right; } } while (parent.StartIndex != index || parent.EndIndex != index); //更改所在节点的值 parent.SavedVal = val; //更改所在节点的值之后,需要调整所有父节点的值(通过不断和右边节点比较) while (parent.Parent != null) { MyLineTreeNode <T> temp = parent.Parent; temp.SavedVal = CompareFunction.Invoke(temp.Left.SavedVal, temp.Right.SavedVal) ? temp.Left.SavedVal : temp.Right.SavedVal; parent = temp; } }
internal CNTK.Function ToFunction(Variable labels, Variable predictions) { var function = LabelPredictionFunction?.Invoke(labels, predictions); if (ReferenceEquals(function, null)) { throw new InvalidOperationException(); } return(function); }
/// <summary> /// Example of a function accepting a delegate (function pointer) as an argument. /// </summary> private bool CompareDelegate(int x, int y, CompareFunction pred) { return(pred.Invoke(x, y)); }