问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

pascal算法问题

发布网友 发布时间:2024-10-12 01:29

我来回答

4个回答

热心网友 时间:2024-11-17 20:24

书上有啊!、

定义:

BST 待遍历的二叉树;

postorder 后序遍历规则;

first_node 按后序遍历规则遍历时将访问的第一个结点;

current_node 当前将要访问的结点;

next_node 根据postorder规则,在current_node之后即将访问的后继结点;

parent(node) 结点node的父结点;

lchild(node) 结点node的左孩子;

rchild(node) 结点node的右孩子。

算法步骤:

1 找到BST中以postorder方式遍历时将访问的第一个结点,即first_node;

2 令current_nodeçfirst_node;

3 查找current_node的后继结点next_node:

3.1 若current_node之父结点为空,算法结束;

3.2 若current_node为其父结点的左孩子,且其父结点无右子树,则next_nodeçparent(current_node);

3.3 若current_node为其父结点的左孩子,且其父结点有右子树,则令pçparent(current_node),于是next_node为结点p之右子树中以postorder方式遍历时将访问的第一个结点;

3.4 若current_node为其父结点之右子树,则next_nodeçparent(current_node);

4 访问current_node;

5 令current_nodeçnext_node,转到3。

满二叉树时之复杂度

不妨令满二叉树的深度为k(二叉树的层数记为i=1, 2, …, k-1),则总的结点数n=2k-1。对于一棵深度为k的满二叉树,按后序遍历规则查找第一个结点的操作步骤数为k-1。对满二叉树的第i层结点(i=1, 2, …, k-1),有2i-1个结点是其父结点的左孩子,有2i-1个结点是其父结点的右孩子。对于第i层的每个左孩子结点,需要按后序遍历规则查找其后继结点,此时父结点之右子树的深度为k-i,根据前述说明,则每个左孩子结点需要执行k-i-1次查找后继结点的操作,总的操作次数为2i-1 * (k-i-1)次。对于第i层的每个右孩子结点,其父结点即为其后继结点,因此对每个右孩子结点所需要执行的操作为1,因此第i层右孩子总的操作数为2i-1 * 1。由此,第i层总的操作数为2i-1 * (k-i-1) + 2i-1 * 1=2i-1 * (k-i)。将以上所有层累加起来即得到除根结点之外的所有层上的操作数(i=1, 2, …, k-1),不妨设为α:

α= 21-1 * (k-1) + 22-1 * (k-2) + … + 2k-2 * 1 = 20 * (k-1) + 21 * (k-2) + … + 2k-2 * 1

则有

α= 2α-α= … = 2k – k – 1

以上就是除根结点之外所有结点上的操作总数。当处理根结点时,实际上只需要做一次判断即可。于是算法总的操作次数T = α+1 = 2k – k。又由前面的假设可知n=2k-1,因此2k=n+1,k=lg(n+1)。故可得算法总的操作数为:

T = n+1-lg(n+1)

故,该算法的复杂度为O(n)。

热心网友 时间:2024-11-17 20:23

bst就是二叉查找树,一个节点的权值,它大于它的左儿子权值,小于右儿子权值。这样如果是一棵平衡的二叉树,那么在二叉树里面搜索一个数值的复杂度就是log2(n),n是节点个数

其实很简单,就是插入,删除,查找三个操作。理想复杂度都是log2(n)
这个算法书上都有。

bst没什么意义,因为如果退化成一条链复杂度就变成n了。
建议去看一看平衡树,类似于splay之类的。

热心网友 时间:2024-11-17 20:18

二叉排序树 二叉排序树(Binary Sort Tree)或者是一棵空树;或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
查找:
步骤:若根结点的关键字值等于查找的关键字,成功。
否则,若小于根结点的关键字值,递归查左子树。
若大于根结点的关键字值,递归查右子树。
若子树为空,查找不成功。
插入算法:
首先执行查找算法,找出被插结点的父亲结点。
判断被插结点是其父亲结点的左、右儿子。将被插结点作为叶子结点插入。
若二叉树为空。则首先单独生成根结点。
注意:新插入的结点总是叶子结点。
void InsertBST(t,key)
//在二叉排序树中插入查找关键字key
{
if(t==NULL){
t=new BiTree;
t->lchild=t->rchild=NULL;
t->data=key;
return; }
if(key<t->data ) InsertBST(t->lchild,key);
else InsertBST (t->rchild, key );
}
void CreateBiTree(tree,d[ ],n)
//n个数据在数组d中,tree为二叉排序树根
{ tree=NULL;
for(i=0;i<n;i++)
InsertBST(tree,d);
}

题目嘛 我推荐
Poj 2418 2482 2352
初学的话可以先看看2418的题解顺便体会一下BST的使用,然后后面两题独立地做

热心网友 时间:2024-11-17 20:21

BST是一种二叉树,满足左子树的节点都比根小,右子树的节点都比根大.
BST可以动态的进行插入,删除,找第k大,找某个节点操作
例如插入某个节点,那么就从根开始递归,比根小就递归到左子树,否则递归到右子树,一直到递归到叶子为止,再插入.
其它的操作都类似.这些操作复杂度都是O(h),h树的高度.期望情况下h=O(logn),不过最坏的话h=O(n).为了保持H=O(logn),需要加强bst使之平衡,叫做平衡树,例如avltree,rbtree,sbt,splay,treap等.

例题嘛......noi2004 cashier以及刚结束的ioi 2009的hiring都是用到平衡树的.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
谁能给个单机版的风云之雄霸天下啊?? 求风云雄霸天下PC单机游戏WIN7版 雄霸天下任务指南 开心网001老房子卖了以后家具还有吗? 为什么001开心网买房子组件删除仓库里的东西都没了 请教一下,开心001的开心庄园里面的建材有好多富余的的 除了5元一个卖... 开心网001小号怎么给大号送房子? 开心网001多少级能送别人房子?多少级能接受别人给的房子? 开心网001果实或家具能送人吗 开心网(kaixin001)怎么买外地房子? pascal各种排序比较 pascal语言插入排序问题 pascal语言:输入n个数,并输出最大的数和最小的数 ...市平桥区五里镇(九店乡)连丰村冯岗组怎么坐车?请知道的朋友尽量说详... 飞信系统表情支持快捷键吗? 请问飞信系统表情支持快捷键操作吗?! 每次开启新版飞信,发送快捷键总用不了ctrl+enter,一定要再设才行??? 李梓的配音作品有哪些? 如何从宿主访问虚拟机中django(宿主机访问虚拟机) Django为什么只能指定本机ip django怎么局域网(django局域网访问) 作七字上学对联,上联明字开头,下联国字开头 欧洲足球先生不是和世界足球先生合并了吗 怎么又出现小白得到欧洲足球先 ... 足球先生的奖和什么奖合并了 科研在线主要功能介绍 推荐三个神级科研网站,都挺好! 科研在线服务平台使用说明 科研在线服务平台科研在线 参迈海参的个头大吗? 纯淡干的参迈海参有营养价值吗? pascal 求解 问题描述 由文件给出N个1到30000间无序正整数,其中1&lt;=N... 中级经济师成绩有小数点吗 鹿心血粉吃法 ...密度增高影,双侧胸腔未见液性密度影,纵隔... 杭州乐园的游乐项目 数码相机曝光多长时间对相机损害最大 数码相机长时间工作对机子有何危害 我想问一下长时间曝光问题。一些入门的单反。比如D3100.D5100,一些入... 网签购房合同后如何退房 鲜虫草花蒸排骨制作步骤 荷香虫草花蒸排骨简介 虫草花蒸排骨 招财进宝黄色烟嘴,恭喜发财招财进宝顺序 吉祥如意图片招财,招财进宝财源广进和吉祥如意哪个寓意好 猫尾巴最后一节弯了怎么回事 猫尾巴有折角有什么问题 为啥末端是弯的 猫尾巴最后一节弯了 猫的尾巴末端拐了个弯 为什么猫咪尾巴会变弯了 猫的尾巴末端拐了个弯咋回事 是不是麒麟猫