分治法-折半查找和二叉树的相关特性

4.3 折半查找

对于有序数组的查找来说,折半查找是一种性能卓越的算法。它通过比较查找健K和数组中间元素A[m]来完成查找工作。如果它们相等,算法结束。否则,如果K<A[m],就对数组的左半部分执行该操作,如果K>A[m],则对数组的右半部分执行该操作。

折半查找是基于递归思想的,但也可以以迭代方式实现。

代码实现:


算法分析:

分析折半查找效率的标准方法是计算查找键和数组元素的比较次数(三路比较次数)。对于一个n元素的数组来说,算法的比较次数不仅是取决于n,而且取决于特定输入的特征。最坏输入包括所有那些不包含查找键K的数组,也包括部分查找成功的。对于最坏情况,有如下关系式:

当n>1时,Cworst(n)=Cworst(n/2)+1,Cworst(1)=1,即Cworst(n)≈log2n+1≈log2(n+1)

折半查找的平均效率为:Cavg(n)≈log2n

折半查找应当看作是一种退化了的分治算法,而更适合归类到减半算法。这里书的作者说道,有时候一个坏的例子比一个好的例子更能够说明一个道理。:-)

4.4 二叉树遍历及其相关特性

我们将树的高度定义为从叶子到根之间的最长路径,所以,其值应为其左右子树的最大高度+1。下面代码以递归方式计算树的高度。

代码实现:

(相关的getter和setter略)

 

二叉树的遍历:

二叉树的遍历分为三种:前序遍历、中序遍历、后序遍历,这些都是相对于父节点而言。

代码实现:



转载于:https://www.cnblogs.com/fei-er-blog/p/4820316.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值