| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构 | 折半查找 /二分查找 算法细节、二分查找判定树 -> 正文阅读 |
|
[数据结构与算法]数据结构 | 折半查找 /二分查找 算法细节、二分查找判定树 |
一、基本思想
二、时间复杂度
如果x=a[n/2],则找到x,算法中止; 如果x<a[n/2],则只要在数组a的左半部分继续搜索x, 如果x>a[n/2],则只要在数组a的右半部搜索x。 时间复杂度就是求while循环的次数。
其中k就是循环的次数。 所以时间复杂度可以表示为O(h)=O(log2(n)) 三、优缺点
?四、C++实现
运行结果:
五、分析(一)为何需要向下取整或向上取整呢?
比如 a[] = {1, 2, 3, 4, 5, 6},3和4都是中间元素,向下取整得到的是3,向上取整得到的是4。 (二)while里要不要加等号 1、对于bin_search函数,等号是一定要加的 2、对于bin_search_1与bin_search_2函数,等号是一定不能加的 3、bin_search_2与bin_search_1道理一样,不能加等号 (三)bin_search_1与bin_search_2在while结束后,为何还要用if再判断一次?
4 为何bin_search_1里,low = mid + 1, high = mid?
bin_search_2中同理。 六、二分查找判定树对表中每个记录的查找过程,可用二叉树来描述,树中的每个结点对应有序表中的一个记录,结点的值为该记录在表中的位置,常将这个描述二分查找过程的二叉树称为二分查找判定树。 1、构造当 n=0 时,折半查找判定树为空 当 n>0 时,折半查找判定树的根结点为 mid=(n+1)/2,根结点的左子树是与有序表 r[1] ~ r[mid-1] 相对应的折半查找判定树,根结点的右子树是与 r[mid+1] ~ r[n] 相对应的折半查找判定树。? 2、性质任意两棵折半查找判定树,若它们的结点个数相同,则它们的结构完全相同 折半查找的判定树一定是平衡二叉树且只有最下面一层是不满的 具有n个结点的折半查找树的高度为 log(n+1) 向上取整,或者 (logn) 向下取整+1 任意结点的左右子树中结点个数最多相差 1 任意结点的左右子树的高度最多相差 1 任意两个叶子所处的层次最多相差 1 左子树 < 中间结点 < 右子树结点 n个成功结点的判定树、失败结点个数是:n+1个 ? ? 七、复杂度分析最坏情况下,关键码比较次数为 log2(n+1),时间复杂度为 O(logn) 在表中查找任一记录的过程,即是折半查找判定树中从根结点到该记录结点的路径,和给定值的比较次数等于该记录结点在树中的层数。 具有 n 个结点的二分查找判定树的深度为 ,因此当查找成功时,所进行的关键码比较次数至多为 ?log2?n?+1 (向下取整,小),而查找不成功时,就是走了一条从根结点到外部结点的路径,和给定值进行的关键码的比较次数等于该路径上内部结点的个数,即失败情况下的平均查找长度等于树的高度。 以深度为 k 的满二叉树为例,其深度为:, 树上的第 i 层有:?个结点, 假设表中的每条记录查找概率相等,即:? 则有: ? 故平均时间复杂度为:O(logn) 原文来自 |
|
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:13:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |