今天后来在看查找的部分.. 清华那本C语言描述的书...
看到二叉树部分... 二叉树中求平均长度的那个等式楞了挺久还是没得出来...
p(n)=(1-1/(n^2))p(n-1) + 2/n - 1/(n^2);
p(n) = 2(1+1/n)(1/2+1/3+...+1/(n+1)) - 1; 到这步的推导还没反应出来... 留着明天想了就`~
看求二叉排序数中的求后继算法的时候.... 突然发现.. 自己的思想确实是有点问题...
不够top-down??? 也许...
看到求后继的时候直接反应是其在树上的位置该是如何... 而实际上这是个数学关系..
二叉排序数按中序遍历得到的就是一个顺序的序列... 从这个角度出发很自然的能发现其后继该是在树上的哪个位置.. [或者说... 从图中.. 该反应到这个想法才行..] 这样可以得到很清晰的编程思路.... [似乎自己做类似题目的时候.. 还没学会用数学的角度来看待程序... 对这样类似的程序反应总是偏慢??? 至少尝试过的acm题目... 都不晓得真正的算法从哪里下手... 联想到那个数学模型去... /lh...]
正在看算法... 学习ing ...... [希望尽快让自己对程序有个好的数学觉悟... ]
二叉排序数的删除操作 // 来自 算法导论... remarked
Binary_search
1. 2 compare per loop
2. 1 compare per loop
if left[z] == null or right[z] == null
then y = z
else y = tree-successor(z)
if left[y] != null // this time jugde whether only one child
then x = left[y] //parent of y
else x = right[y]
if x != null // if z have no child
then p[x] = p[y] //x are left[y] or right[y]
if p[y] = null
then root[T] = x // T mean tree
else if y = left[p[y]]
then left[p[y]] = x
else right[p[y]] = x
if y != z // i'm not sure why this statement need if - -!
then key[z] = key [y]
return y
P.S: 那个team似乎现在放假也可以回老家了... 能陪丫头去旅游了就... 还是有点懒散啊... 今天下午上课的时候其实很压力... 机房的机子又让人郁闷... 结果就光坐着... 耗掉了中午的时间... 然后赶紧逃了回来... 郁闷无比... team里面估计就数我最最菜了... 要努力....