算法导论第十四章利用红黑树查找顺序统计量
来源:互联网 发布:java 去除html标签 编辑:程序博客网 时间:2024/05/20 01:13
利用红黑树可以早lg(n)内查找任意个顺序统计量,这比前面讲到的在O(n)内查找效率要高,但是实现起来比较麻烦。在前面红黑树的基础上实现就比较简单,在树的节点域上加上size整型变量,用来标记以该节点为根的树中有多少节点。特别的叶子节点的size为1.在红黑树中需要修改的是在插入和删除节点时记得要重新调整size的数值,本代码中利用中序遍历的方法对size重新调整:代码如下:
void SizeAdjust(BRTreeNode*node){if(node!=nil){SizeAdjust(node->left);SizeAdjust(node->right);node->size=node->left->size+node->right->size+1;}}
如果想查找树中第i小的顺序统计量只需找到根节点左边的size为i-1的节点,或根节点右边的size为i-1-size(root)的节点,该节点的父节点即为i小顺序统计量。文字表述可能不清楚,代码如下:
BRTreeNode*GetIthnode(BRTreeNode*node,int num){int r=node->left->size+1;if(r==num){return node;}else if(r>num){return GetIthnode(node->left,num);}else{return GetIthnode(node->right,num-r);}}
该代码在红黑树的博客算法导论第十三章--红黑树C++代码实现中可以直接运行,只是红黑树要稍作修改。
- 算法导论第十四章利用红黑树查找顺序统计量
- 算法导论第十四章顺序统计量树确定一个元素的秩
- 算法导论第十四章习题14.1-7利用顺序统计数统计数组中的逆序数
- [算法导论]第九章《中位数和顺序统计量》
- 算法导论第九章-中位数和顺序统计量
- 算法导论 第九章:顺序统计量(Order Statistic)
- 算法导论 第九章 中位数和顺序统计量
- 算法导论(4) 顺序统计量
- 【算法导论】中位数和顺序统计量之选择算法
- 算法导论思考题9-3小顺序统计量问题
- 算法导论笔记:09中位数和顺序统计量
- 算法导论—中位数与顺序统计量
- 排序和顺序统计量(算法导论)
- 算法导论之中位数和顺序统计量(1)
- 算法导论之中位数与顺序统计量(2)
- 算法导论之中位数和顺序统计量(3)
- [学习《算法导论》]第二部分 排序和顺序统计量
- 中位数和顺序统计量---算法导论学习笔记
- activemq的网络层介绍(二)
- hdu 2103 Family planning (水)
- VIM自动完成功能
- hdu 3782 xxx定律 (水)
- 汇编练手的呵呵..
- 算法导论第十四章利用红黑树查找顺序统计量
- hdu3783 ZOJ (水)
- ofstream 和ifstream的具体用法
- Datagridview中控件textbox,支持特殊字符(@.()录入解决办法
- 汇编:判断两个字符串是否相等
- hdu 2114 Calculate S(n) (递推)
- 路由器密码破解:路由器登陆密码破解方法(仅用于丢失密码后
- 读入两个数并选择加减法运算将结果输出
- android Alarm 闹钟